Estoy intentando explotar la vulnerabilidad de desbordamiento de pila simple. Tengo un código básico en c:
#include <cstring>
int main( int argc, char** argv )
{
char buffer[500];
strcpy(buffer, argv[1]);
return 0;
}
compilado utilizando -fno-stack-protector
. Ya he averiguado la longitud del búfer y he sobrescrito con éxito los registros EBP y EIP. Inyecté una gran cantidad de NOP, seguí con este código de shell y finalmente inserté una dirección donde los NOP inyectados son los códigos. se ejecuta.
Ahora el problema. En la imagen adjunta puedes ver la salida de gdb. Si ejecuto mi programa con entrada maliciosa, obtiene un SIGSEGV. Al descargar la dirección 0xbffff880
, se puede ver que hay muchos NOP seguidos con el código de shell (cuadro rosa) y, finalmente, con la dirección (cuadro azul).
Pensé que esto funcionaría de la siguiente manera: Al principio, 0x90909090
sy el código de shell se consideran datos simples. Después de estos (más allá del cuadro rosado) hay una dirección 0xbffff880
. Le estoy diciendo a la CPU "hey allí, ahora, ejecute lo que está en 0xbffff880
". El cpu toma lo que está en la dirección y ejecuta todos los NOP y el shellcode en sí. Sin embargo, eso no está sucediendo y ocurre SIGSEGV.
¿Dónde estoy equivocado?
Estoy intentando lograr esto en la instancia de Virtualbox de Ubuntu 14.04 Linux 3.13.0-39-generic-i686 de 32 bits con ASLR desactivado.