ATAQUE RET2LIBC
exploit básico de Return-Oriented Programming
Un ataque de ret2libc está basado en la función system que podemos encontrar dentro de la librería libc. Ésta función ejecuta todo lo que se le pasa como argumento, convirtiéndose en un objetivo perfecto.
Otra cosa que se encuentra en el interior de libc es la cadena /bin/sh. Si se le pasa ésta cadena a system como parámetro, obtenemos una shell.
EXPLOTACIÓN MANUAL
Encontrar dirección base de libc
Afortunadamente Linux posee un comando llamado ldd para binarios lincados dinámicamente. Si lo ejecutamos en nuestro archivo ELF, nos dirá qué librerías utiliza y sus direcciones base.
$ ldd vuln-32
linux-gate.so.1 (0xf7fd2000)
libc.so.6 => /lib32/libc.so.6 (0xf7dc2000)
/lib/ld-linux.so.2 (0xf7fd3000)Necesitamos libc.so.6 por lo que la dirección base será 0xf7dc2000.
Encontrar el offset de system
Para llamar a system, necesitamos su localización en memoria. Para ello podemos utilizar el comando readelf:
$ readelf -s /lib32/libc.so.6 | grep system
1534: 00044f00 55 FUNC WEAK DEFAULT 14 system@@GLIBC_2.0La flag -s le dice a readelf que busque símbolos, por ejemplo, funciones. Aquí podemos ver que el offset de system en libc es 0x44f00.
Encontrar el offset de /bin/sh
Puesto que /bin/sh es una string, podemos utilizar el comando strings en la libreria dinámica que encontramos antes en ldd.
-a le dice al comando que examine todo el archivo y -t x que presente el offset en formato hexadecimal.
El offset de /bin/sh en libc es 0x18c32b
Exploit en 32-bit
Exploit en 64-bit
Es necesario repetir el proceso con la libreria lincada al binario x64 que se llamará algo parecido a /lib/x86_64-linux-gnu/libc.so.6.
AUTOMATIZANDO CON PWNTOOLS
El de 64 bits es practicamente igual
Última actualización
¿Te fue útil?