Solución Ropemporium ret2csu
Introducción
Este es el ultimo post de ropemporium. El enunciado del challenge nos indica que tiene similitudes con callme. Simplemente tendremos que llamar a ret2win()
con 3 parámetros, de la siguiente forma: ret2win(0xdeadbeefdeadbeef, 0xcafebabecafebabe, 0xd00df00dd00df00d)
Direcciones de gadgets y funciones
Comenzamos como es de costumbre con pwndbg, en este caso analizaremos la funcion usefulFunction
. Como podremos ver en la siguiente imagen, se realiza un call a ret2win()
con su direccion en memoria:
El inconveniente que tenemos es la falta de un gadget que nos permita hacer pop rbx
, asi que tendremos que seguir analizando el codigo.
Por suerte, si dumpeamos la funcion__libc_csu_init_
, podremos ver que contiene un pop rbx
:
Vale, necesitamos ahora el gadget número dos que tendría que ser un mov rdx rsi
, pero otra vez si buscamos gadgets no hay ninguno, si nos fijamos otra vez en la función __libc_csu_init
de allí sacaremos el gadget 0x0000000000400680 <+64>: mov rdx,r15
Y por último, nos faltaría st_value
ubicado en 0x4003b0
, la región de memoria donde se inicia _fini
. Dejo el paper de la blackhat donde lo explica detalladamente.