Caso di studio 1

Questi esempi sono molto più facili rispetto a quello visto precedentemente, che è un attacco di buffer overflow con lo scopo di acquisire privilegi elevati.
Ecco il codice da attaccare:

// nome file: stack1.c
#include <stdio.h>
#include <string.h>

int main(int argc, char** argv){
	int cookie;
	char buf[80];

	printf("buf: %08x cookie: %08x\n", &buf, &cookie);
	gets(buf);
	
	if(cookie == 0x41424344){
		printf("you win!");
	}
}
C

Fase 1: cosa notiamo ad una prima vista?
...

  1. C'è un buffer
  2. Il buffer sta sotto lo spazio allocato per una variabile intera cookie
    La prima cosa che ci viene in mente è: riempiendo il buffer si riesce a manipolare la variabile intera.
    Il buffer è attaccabile, poiché vi è una gets che prende in input dati inseriti dall'utente.

Fase 2: cosa mettere nella variabile intera?
...

Per fare stampare al programma you win! dobbiamo assegnare un valore specifico a cookie, che è 0x41424344.
0x41424344 sono quattro byte.
Ricordiamo che scrivendo byte dobbiamo rispettare l'ordinamento di essi, che ricordiamo essere little endian.
Sappiamo che un char è un byte.
Un intero corrisponde a 4 byte.
Quindi possiamo scrivere 4 caratteri in cookie per far si che corrispondano al valore esadecimale desiderato.

Inserendo in un convertitore online (qualsiasi) di valori esadecimale in testo, verifichiamo che:
Pasted image 20230926160728.png
Tale indirizzo corrisponde ai caratteri ABCD.
L'architettura è little endian, quindi dovremo i valori nell'ordine opposto: DCBA.
Pasted image 20230926164402.png

L'attacco
...

Quando il programma viene eseguito vi è una funzione gets avviata, che attende elementi in input. Possiamo scrivere 80 caratteri casuali e alla fine accodare DCBA, oppure possiamo farci aiutare da python a creare un testo che abbia esattamente il numero di caratteri che ci serve, così da copiarlo ed incollarlo una volta mandato in esecuzione il nostro programma target:
Questo è il risultato:
Pasted image 20230926163604.png

Ci si ricordi sempre di compilare con -z execstack -fno-stack-protector