return-to-libc attack

3

Estaba intentando intentar un ataque de desbordamiento de búfer de retorno a libc para mi asignación de Seguridad del software del equipo. En mi opinión, podemos hacer este tipo de ataques independientemente de las medidas de protección de la pila, como canaries y non-executable stack . Esto se debe a que las funciones libc no residen en la pila y solo necesitamos cambiar el flujo de control de nuestro programa sobrescribiendo la dirección de retorno con el libc function address y pasando los argumentos adecuados. Esta figura parece resumir el procedimiento que supongo.



Lo que mi duda es, según el figura para la segunda parte, ¿se da el marco de pila para la función libc o es solo para una función definida en el programa del usuario? No puedo averiguar la necesidad de fake_ret . ¿No podemos simplemente sobrescribir la dirección de retorno de nuestra función al sobrescribir EIP con la dirección de decir unlink y los argumentos se pueden colocar en el búfer de funciones del usuario que se puede usar para pasar a la función unlink ? < br>
Tenga en cuenta que mediante el uso de (algo) del usuario, apunto a señalar (algo) que es definido por el propio usuario en su programa. Gracias.

    
pregunta yellow_flash 09.02.2016 - 05:36
fuente

1 respuesta

2

Puedes escribir un marco para cualquier llamada de función, no tiene que ser system() . Sin embargo, la mayoría de las hazañas apuntarán a una concha si es posible. La dirección fake_ret es simplemente donde la ejecución volverá después de la llamada system() . Si solo pones \x41\x41\x41\x41 allí, segfault. Si lo apunta a exit() , saldrá con gracia, o podría apuntarlo a un número de pop register seguido de una retención para controlar la ejecución en la pila (ROP).

    
respondido por el wireghoul 09.02.2016 - 08:36
fuente

Lea otras preguntas en las etiquetas