Sto cercando di utilizzare una variabile di ambiente per memorizzare il mio shellcode e quindi puntare il mio RET su di esso, in modo che possa arrivare a eseguire il mio shellcode. Ecco il mio programma vulnerabile 'abc.c'
#include string.h
#include stdio.h
void foo(const char* str){
char buf[100];
printf("\n%p\n",buf);
strcpy(buf,str);
}
int main(int argc, const char* argv[]){
foo(argv[1]);
}
Ho seguito finora i seguenti passaggi
$gcc -z execstack -fno-stack-protector -o abc abc.c
Usando getenv () in un altro programma ho determinato quale fosse l'indirizzo del mio shellcode. Diciamo che è un po 'di 0xbfffc209
Utilizzo %codice% si blocca senza pietà il mio programma, ma se uso un indirizzo al posto dei quattro A il mio programma esce in modo pulito.
OrastiamousandounindirizzoinformatoIntel
Comesipuòvedere,nullaèstatosovrascritto.L'outputdiltracecon
$./abc$(python-c'print"AAAA"*30')
e anche
$ltrace ./abc $(python -c 'print "\x09\xc2\xff\xbf"*30')
è
Sono totalmente sconcertato da un comportamento inspiegabile di questo tipo e sarei lieto se qualcuno potesse aiutarmi a capire perché questo sta accadendo così.
Grazie in anticipo
PS
-
Uso una macchina virtuale Ubuntu 14.04 a 32 bit
-
Ottengo gli stessi risultati lanciati da me, indipendentemente dall'indirizzo che uso