Estoy tratando de usar una variable de entorno para almacenar mi código de shell y luego apuntarlo con mi RET, para poder ejecutar mi código de shell. Aquí está mi programa vulnerable '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]);
}
He estado haciendo los siguientes pasos hasta ahora
$gcc -z execstack -fno-stack-protector -o abc abc.c
Usando getenv () dentro de otro programa, determiné cuál era la dirección de mi shellcode. Digamos que es algo de 0xbfffc209
Usando %código% bloquea mi programa sin piedad, pero si uso una dirección en lugar de las cuatro A, mi programa saldrá limpiamente.
AhorausandounadirecciónenformatoIntel
Comosepuedever,nadahasidosobrescrito.Lasalidadeltracecon
$./abc$(python-c'print"AAAA"*30')
y también
$ltrace ./abc $(python -c 'print "\x09\xc2\xff\xbf"*30')
es
Estoy totalmente desconcertado con un comportamiento inexplicable de este tipo, y me alegraría que alguien me ayude a entender por qué sucede esto.
Gracias de antemano
PS
-
Utilizo una VM de Ubuntu 14.04 32 bit
-
Recibo los mismos resultados sin importar la dirección que use