El exploit de desbordamiento de búfer funciona con gdb pero no sin

6

Estoy aprendiendo sobre desbordamientos de búfer y estoy desarrollando mi primer exploit.

Hay un proceso de servidor que escucha un socket y establece un nuevo proceso para cada cliente. El proceso hijo tiene una vulnerabilidad de desbordamiento de búfer que estoy explotando.

Mi exploit funciona si inicio el servidor con gdb, sin embargo, obtengo un error de seguridad cuando el código de exploit se ejecuta si simplemente inicio el servidor sin gdb.

Mi pregunta es: ¿gdb desactiva automáticamente algunos mecanismos de protección, como aslr / stack protection, etc.? ¿Cuál sería una posible explicación de este comportamiento?

He compilado el servidor con -zexecstack -fno-stack-protector, todavía no puedo explotarlo sin gdb.

Esto está en Debian x86. Al ejecutar el servidor con gdb, me refiero a que ejecuto "gdb server" y luego simplemente teclee "ejecutar" en la consola de gdb, sin puntos de interrupción ni nada más. De esta manera mi exploit es exitoso (hace una solicitud de curl a mi servidor)

    
pregunta Andrei Socaciu 25.12.2015 - 22:09
fuente

2 respuestas

1

GDB usa un gancho de depuración y está diseñado para usar símbolos de depuración y manejarlos, y altera el comportamiento real. Entonces, está claro que algunos artefactos se mostrarán con seguridad

    
respondido por el Alexey Vesnin 18.09.2016 - 20:04
fuente
0

Por codeblog :

  

A partir de la versión 7 de GDB, que aparece por primera vez en Ubuntu con Karmic (Ubuntu 9.10), ASLR se desactiva (a través del indicador de personalidad ADDR_NO_RANDOMIZE) para el proceso de depuración. Si desea una vista más realista de cómo aparecerá un proceso en la memoria, debe "desactivar la desactivación de la aleatorización" en gdb.

    
respondido por el Neil Smithline 25.12.2015 - 22:44
fuente

Lea otras preguntas en las etiquetas