Usando un desbordamiento de búfer off-by-one, ¿puedo manipular el EIP para ejecutar el código ubicado fuera del programa objetivo?

1

Esto es para una clase de Seguridad de red y equipo. No estoy pidiendo la solución, sino un indicador en la dirección correcta.

El programa de destino tiene una vulnerabilidad off-by-one y se compila de tal manera que ebp no se inserta en la pila. Al atacar la vulnerabilidad, puedo cambiar el último byte de eip y enviar efectivamente el programa a cualquier instrucción en el programa.

Mi pregunta es, si coloco algún código malicioso en el programa de explotación (que llama al programa objetivo a través de un execve ), ¿puedo cambiar el eip para que apunte a este código malicioso, o si el tiempo de ejecución es lo suficientemente inteligente? para saber que estoy intentando ejecutar código que se encuentra fuera de los límites del programa de destino y, por lo tanto, ¿no lo puedo permitir?

El entorno es una máquina virtual Debian Etch sin ASLR, etc. El programa objetivo tiene setuid configurado como root, así que mi objetivo es lograr que el programa objetivo ejecute las instrucciones que abren un shell (dándome el shell root ).

    
pregunta xbonez 30.01.2013 - 23:08
fuente

1 respuesta

5

Es una computadora , no puede ser inteligente.

Desde el punto de vista del kernel, el espacio de memoria se divide en páginas (generalmente 4 kB por página). Cada página tiene derechos de acceso , como "se puede escribir en", "se puede leer", "se puede ejecutar" o "no se puede acceder / no aquí". Al núcleo no le importará de ninguna manera siempre que salte a una página que esté marcada como "se puede ejecutar". Si modifica solo el byte menos significativo de eip , caerá en la misma página que el llamante original, por lo que se permitirá el salto . Por supuesto, si saltas a bytes que no tienen sentido como instrucciones, las cosas se amargarán bastante rápido ...

(Nota: en la CPU x86 de 32 bits, con los sistemas operativos habituales, puede que no haya diferencia entre "se puede leer" y "se puede ejecutar" para las páginas; es una característica de Unidad de gestión de memoria utilizada en la primera CPU de x86 de 32 bits.)

    
respondido por el Tom Leek 30.01.2013 - 23:21
fuente

Lea otras preguntas en las etiquetas