Disclaimer : questo exploit è puramente per uso didattico. In questo exploit interpreto il ruolo della vittima e il software sfruttato è scritto da me da solo.
Ho un semplice server HTTP che voglio sfruttare con un attacco di overflow del buffer. Sto inviando una richiesta HTTP pericolosa che trabocca il buffer di una variabile di richiesta tramite la funzione strcpy - lo scenario è che lo sviluppatore ha dimenticato di usare strncpy.
Tuttavia, ci sono due sfide con la sovrascrittura dell'indirizzo di ritorno in questo programma che non so come risolvere:
-
Strcpy interromperà la copia quando incontra un byte NULL nella stringa di origine. Pertanto, è possibile sovrascrivere l'indirizzo di ritorno con un indirizzo di destinazione che contiene il byte NULL 0x00? Ad esempio, se l'indirizzo di destinazione è 0x407200, dobbiamo scrivere \ x00 \ x72 \ x40. Tuttavia, strcpy restituirà il primo \ x00 e non copierà \ x72 \ x40. Pertanto, è possibile codificare \ x00 in modo tale che non faccia in modo che strcpy ritorni prematuramente?
-
Allo stesso modo, il parser HTTP nel mio server HTTP divide la richiesta HTTP in token con lo spazio character \ x20 come delimitatore. Pertanto, è possibile sfuggire questo carattere, come il terminatore NULL qui sopra, in modo tale che un indirizzo che contiene \ x20 non venga diviso in due token separati da strtok?
In caso contrario, si tratta solo di una limitazione degli attacchi di buffer overflow, in quanto, a causa della costruzione del programma in questione, non è sempre possibile sovrascrivere l'indirizzo di ritorno con un indirizzo di destinazione di propria scelta?