Estoy tratando de entender por qué el desbordamiento de búfer no funciona. He estado luchando con esto por unos días, así que pensé que ya era hora de preguntar a los profesionales. Hace poco empecé a comprender el concepto de ataques de desbordamiento de búfer con un trineo NOP.
Esto es para un desafío. No se permiten spoilers, pero los punteros útiles serán muy apreciados.
Mi problema es este:
Puedo ejecutar un comando de Perl como este NOP ... Shellcode ... *mempntr
, esto funciona como se esperaba cuando le doy un puntero arbritario.
- Donde las cosas azules son mis NOP's
- El rojo es mi código de shell
- El amarillo resaltado es mi
mempntr
Program received signal SIGSEGV, Segmentation fault.
0xaaaaaaaa in ?? ()
Eso también es lo esperado.
Prueba con mempntr
Ahora, cuando intento cambiar el mempntr
a algo a lo que quiero señalarlo, como a mitad del trineo NOP, por ejemplo, la ubicación 0xffffd580
de las cosas se comportan de manera extraña.
En el punto de interrupción en leave
, verifico el eip
guardado
(gdb) i f
Stack level 0, frame at 0xffffd5c0:
eip = 0x80484b1 in main; saved eip = 0xffffd580
Arglist at 0xffffd5b8, args:
Locals at 0xffffd5b8, Previous frame's sp is 0xffffd5c0
Saved registers:
ebp at 0xffffd5b8, eip at 0xffffd5bc
Sin embargo, cuando c
o continue
tengo un SEGFUALT en una ubicación rara.
Program received signal SIGSEGV, Segmentation fault.
0xffffd5a7 in ?? ()
Estoy buscando una respuesta que pueda arrojar algo de luz sobre esto o señalarme un recurso donde pueda aprender lo que está sucediendo.