Tengo problemas para resolver un desafío que requiere el uso de un desbordamiento de búfer para sobrescribir la dirección de retorno y llamar a otra función que proporciona un shell. El programa solicita al usuario una entrada, que puede utilizarse para desbordar el búfer.
Puedo sobrescribir manualmente la dirección en gdb y obtener el shell, sin embargo, cuando intento ingresar datos al programa a través de un archivo, usando "run < input.txt" (aún en gdb) no funciona - Acabo de obtener una falta de seguridad. Incluso cuando el diseño de la memoria después de ingresar los datos se ve exactamente igual y el paso por el programa regresa y ejecuta correctamente la función "give_shell ()".
Incluso si solo ingrese un solo carácter usando el archivo de entrada y luego sobrescribo manualmente la dirección de retorno, no funciona. La única forma en que puedo obtener el shell es ingresar la entrada manualmente, romper, sobrescribir la dirección de retorno y luego continuar.
¿Alguien tiene alguna idea de por qué la ejecución sería diferente cuando ingrese manualmente la entrada al programa en lugar de enviarla a través de un archivo dentro de gdb?
Gracias.