A ver, tengo una duda que no me está permitiendo avanzar en este campo.
Empecé a leer el libro de shellcoders sobre exploits, entonces uno de los primeros ejemplos del libro es:
Código:
void return_input(void)
{
char array[30];
gets(array);
printf("%s\n",array);
}
main()
{
return_input();
return 0;
}
Vale, la idea es la siguiente:
Desensamblas con gdb la parte del main y obtienes la dirección a la que se invoca al return_input, con el fin de desbordar el buffer para que lo ejecute dos veces.
Aquí llega la cuestión, desesamblando me saca (por poner un ejemplo):
0x080483ed <main+3> call 0x80483c4 <return_input>
Y desbordo el buffer como indica el libro :
printf "AAAAAAAAAABBBBBBBBBBCCCCCCCCCCDDDDDD\xed\x83\x04\x08"|./overflow
Ahí está la cuestión, que no logro de ninguna manera que no dé segmentation fault, y que me repita dos veces la llamada al return_input
Estoy usando wifislax 2.0, que aquellos kernel y gcc y tal, no llevaban protecciones overflow, pero claro, yo lo que pienso es lo siguiente:
Cómo coño va afuncionar, esa dirección que saca el gdb, no tiene por qué coincidir con la que haya en tiempo de ejecución, no???
Saludos y espero ayuda, que me encantaría iniciarme en profundidad, aunque ya he visto que el tema en los últimos años, ha ido poniendo muchísimas protecciones.





Autor





En línea
Ponnos la salida de GDB.

