Desafío de CTF por desbordamiento de búfer

2

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.

    
pregunta brad 16.04.2018 - 18:29
fuente

1 respuesta

1

Finalmente, descubrí cuál era el problema con la ayuda de perror 1 . Como la ejecución parecía estar siguiendo la ruta correcta cuando especifiqué la entrada a través de un archivo, supuse que tal vez el shell se estaba ejecutando, pero se estaba cerrando automáticamente. La respuesta a la que se hace referencia tenía una sección llamada "Mantener abierto el stdin después de la inyección", que me indicó la dirección correcta y confirmó que el shell estaba funcionando.

Pude obtener el shell especificando la entrada de esta manera: (cat input.txt; cat) | ./programa

    
respondido por el brad 16.04.2018 - 19:17
fuente

Lea otras preguntas en las etiquetas