Solución ropemporium split
Split
El título del challenge nos dice lo siguiente:
“Los elementos que te permitieron completar ret2win aún están presentes, simplemente se han dividido. Encuéntralos y recombínalos usando una corta cadena ROP. Así que estaremos haciendo otro ret2win.”
Empezamos analizando las protecciones del binario. Tenemos NX activado, una protección de prevención de ejecución de datos cuyo propósito es evitar la ejecución de instrucciones a bajo nivel.
Al ejecutar el binario, observamos que nos solicita un input.
Creamos un patrón con cyclic
.
Observamos un desbordamiento de búfer, y determinamos que el offset es de 40 bytes.
Dado que en el challenge sabemos que debemos realizar un llamado a la dirección que ejecuta /bin/cat flag.txt
, buscamos los strings utilizando rabin2
para obtener la dirección de memoria.
Necesitamos obtener la dirección de system
. Para ello, utilizamos objdump
de la siguiente manera.
Ahora necesitamos encontrar las instrucciones pop rdi; ret
y ret
. Utilizaremos ROPgadget
para esto.
Ahora que tenemos toda la información necesaria, podemos construir nuestro exploit para leer la flag.