Sucedió algo extraño. He creado EGG = NOPs + shellcode. Entonces me sale la dirección de EGG;
Hiceundesbordamientodebúferysaltéaélyobtuveelshell(ladireccióndelshelleselsegundoparámetro).¿Cómoesestoposiblesilapilanoesejecutable?
Sucedió algo extraño. He creado EGG = NOPs + shellcode. Entonces me sale la dirección de EGG;
Hiceundesbordamientodebúferysaltéaélyobtuveelshell(ladireccióndelshelleselsegundoparámetro).¿Cómoesestoposiblesilapilanoesejecutable?
Eso es seguro porque no estás ejecutando nada en la pila. Sin el binario en cuestión, intentaré adivinar qué está sucediendo aquí.
Con el primer print "A"*268 + '\x68\x96\x04\x08'
probablemente esté sobrescribiendo un puntero para apuntar a 0x08049668
. Esta dirección es probablemente una entrada GOT para una función llamada más tarde como printf()
o exit()
.
Luego, en el segundo argumento, especifique el valor al que apunta el puntero. En otras palabras, sobrescribe esa entrada GOT ( 0x08049668
) con tu dirección de código de shell ( 0xbffff891
).
Entonces, cuando el programa llame a esa función de biblioteca compartida ( exit()
, printf()
, whatever()
, ...), se llamará a su código de shell, porque se ha sobrescrito.
En este proceso, no se coloca ningún código en la pila. Se sobrescribe un puntero en la pila. Eso es todo. Luego, utiliza ese puntero sobreescrito para sobrescribir una dirección de función de biblioteca compartida con la dirección del código de shell.
Lea otras preguntas en las etiquetas exploit buffer-overflow shellcode