¿Cómo organizo mi entrada para un desbordamiento de búfer?

4

Tengo un binario de Linux de 32 bits que es susceptible a un desbordamiento de búfer. Descubrí que necesito ingresar 1040 bytes antes de poder controlar el registro EIP.

Tengo un tamaño de shellcode de 28 bytes. ¿Cómo organizo esta entrada para rellenar el búfer, insertar mi código de shell y configurar EIP en la dirección del primer byte del código de shell?

Intenté insertar el código de shell en 1040-28 bytes, luego la dirección, pero eso no funcionó.

    
pregunta user1710563 22.03.2018 - 21:56
fuente

1 respuesta

0

El objetivo aquí es hacer que eip apunte a tu shellcode. Hay muchas maneras de hacer eso. Lo primero sería verificar si su código de shell se coloca en un registro. Si eso sucede, puede realizar un ret2reg ( regresar al registro ) encontrando un gadget que le permita regresar a ese registro ( como call reg etc ... ) . Otra forma sería usar un nopsled, pero eso no es tan estable. En ese caso, su carga útil podría ser como:

nops + shellcode + (1040 -len(nops+shellcode))*"A" + pack32(a_nop_address)

Sin embargo, tenga en cuenta que la "a_nop_address" de la carga útil anterior cambia dentro de gdb y no será estable en caso de que aslr esté habilitado. Todas las formas anteriores suponen que, por supuesto, su pila es ejecutable . Otra forma es también usar una variable de shell que contendrá su código de shell y luego hacer que eip apunte a esa dirección. Finalmente, también hay métodos más avanzados, como ret2libc, ret2plt, ROP, etc ... , que ni siquiera usan un código de shell para abrir un shell y también pueden ayudar a evitar algunas mitigaciones de seguridad como aslr y pila no ejecutable.

    
respondido por el game0ver 22.03.2018 - 23:03
fuente

Lea otras preguntas en las etiquetas