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.