Ir al contenido principal

Iniciación a la técnica de ROP

CTF WriteUp sencillos con Radare2

Para comenzar el blog y así repasar yo de paso, ahora que llevo un tiempo sin hacer ningún tipo de reto en reversing voy a comenzar con algunos CTF que ya se han cerrado y que intentaré resolverlos haciendo uso de Radare2 para los retos que estén sobre la plataforma Linux y IDA para los resto sobre la plataforma Windows.

Iré comenzando de dificultad baja y poco a poco subiremos la dificultad conforme vaya sintiéndome mas cómodo yo con las herramientas utilizadas.

El  primer reto es un de Sharif_University_CTF_2016 y es llamado dMd  cuyo binario os podéis descargar de el Github que os dejo a continuación https://github.com/N4NU/Reversing-Challenges-List/tree/master/Baby/Sharif_University_CTF_2016_dMd.

Los voy a encarar de la forma mas sencilla posible para poder seguir un patrón:

1) Mirar el tipo de binario que es:



Tras ver el tipo de binario que es, seguidamente lo que hacemos es intentar sacar información del binario como algunas "Strings interesantes" y la sección en la que se encuentran (a veces nos puede ser util):





Vemos que las cadenas del binario, no nos dan mucha información, así que vamos a desensamblar el binario y echarle un "vistazo" rápido a la función principal (main) para ver si vemos algo que nos dé algo de luz.

Lo hacemos arrancando ya Radare2 con el binario a analizar, y seguidamente analizando el binario con el comando aaa y mostrando el desensamblado de la función sym.main  con el comando pdf @ sym.main. Si quisiéramos ver algunas lineas de desensamblado únicamente porque la función fuera muy grande podemos usar el comando pd 20 @sym.main  para ver las primeras 20 lineas.



2)Una vez tenemos el código desensamblado, a mi me gustar usar la parte visual que nos ofrece Radare2 (parecido a IDA) salvando muchísimo las diferencias y ver que cosas están pasando dentro de la función... para ello usamos el comando "VV" dentro de la consola de Radare2. Primero lo que hago es buscar la dirección donde empieza la función main con el comando "s @ sym.main"  y luego me muevo a esa posición con el comando "s main"  y ya nos vamos a la parte visual.

Vemos dentro de la parte desensamblada una llamada a call sym.md5_std::string y posteriormente empiezan comparaciones como mostramos en la siguiente imagen.





Comienzan comparando si el valor es un "780......"  obteniendo al final de todas las comparaciones una cadena con una estructura muy similar a MD5: 780438d5b6e29db0898bc4f0225935c0 .

Si alguna de las comparaciones no es válida, el programa muestra el mensaje de key no correcta. Por lo tanto aplicando ya un poco de lógica podemos comprobar extraer cual sería la key correcta, NO?.

Suponiendo que es una string lo que tenemos que introducir y que tras pasar por la función call sym.md5_std::string  de lugar a "780438d5b6e29db0898bc4f0225935c0" ...   haciendo uso de MD5 online decrypt: https://www.md5online.org/md5-decrypt.html


                                 



Por lo tanto nuestra solución de este reto sería "b781cbb29054db12f88f08c6e161c199"





Un saludo

Krilin4











Comentarios

Entradas populares de este blog

Hack the Box Eat the cake!

Buenas de nuevo, retomo esto en un "ratillo" que he sacado para ir dándole un poco de contenido al blog.

Hoy nos ponemos con el resto Eat the cake! de HTB, ya que el otro día me calenté e hice un par de retos para ver lo oxidado que estaba... La verdad que bastante! 😑


El fichero os lo podéis bajar directamente de la página, cuyo SHA256:bd2efc7a1b23885d88d401b2a1fa1d4b307f6efcd76ee0a7d9486f0a8b06e586

Bueno vemos a ponernos manos a las obra, es un ejecutable por lo tanto nos iremos a nuestra máquina Windows que tenemos preparada para este tipo de retos, y abrimos el archivo con el software PEiD para ver si esta empaquetado/ofuscado, pero vamos que ya os digo que sí.



Vemos que PEiD nos dice que esta empaquetada con UPX 0.89.6 -1.02 / 1.05 - 2.90 --> Markus & Laszlo.
Intentamos desempaquetar la muestra, usando UPX directamente con "upx -d" y tras desempaquetarlo, comprobamos si se  ha hecho de manera correcta, procediendo a su ejecución y esperando a que sea co…

Reversing Write-up Hatred (Bitup19)

Buenas a todos,

Después de un fin de semana intenso peleándome con C++ un poco ( ya veréis el churro de código que he hecho), me he decidido hacer un write-up de como resolví el reto de Hatred, con la compañía de un "figura" de CrackLatinos @bym24v..., bueno sentimentalismos atrás, vamos al turrón!

Comenzamos abriendo el binario y comprobamos que un un binario de x64( por lo tanto, necesitamos ejecutarlo en un SO de x64), seguidamente, vemos que al ejecutarse el binario, se nos cierra automáticamente sin mostrar nada..... (SOSPECHOCHO!)

Lo abrimos con IDA para ver porque se sale y comenzamos a "debuggearlo", lo primero que hacemos es buscar la función main() y re-nombrarla para verlo mas bonito con IDA.



Una vez ya la tenemos localizada, nos metemos dentro de la función, y vemos que nada mas comenzar hace una llamada a IsDebbugerPresent() (esta función nos devuelve eax = 0x1 cuando estamos "debugueando" y eax= 0x0 cuando no). Vemos que independientemente …

WinDBG- Diseño de ShellCodes

Buenas a  todos,

En este pequeño tutorial, voy a intentar explicar y mostrar con ejemplos como crear shellcode tanto en binarios de x86, y posteriormente crearé una entrada para ejemplos en binarios en x64.

Este tutorial esta basado en la parte 6 de los tutoriales  de Ricardo Narvaja de uso de herramientas de exploiting gratuitas y el tutorial de desarrollo de malware de ZeroPad, así que si os gusta las gracias a ellos.

Partimos de una shellcode que vamos a detallar, para explicar como funciona, y los componentes de la misma. Para ello hemos creado un binario donde se ejecuta únicamente esta shellcode para que nos sea mas fácil a la hora de analizarla.

winexec_calc_shellcode =b'\x33\xd2\x52\x68\x63\x61\x6c\x63\x89\xe6\x52\x56\x64\x8b\x72\x30\x8b\x76\x0c\x8b\x76\x0c\xad\x8b\x30\x8b\x7e\x18\x8b\x5f\x3c\x8b\x5c\x1f\x78\x8b\x74\x1f\x20\x01\xfe\x8b\x4c\x1f\x24\x01\xf9\x0f\xb7\x2c\x51\x42\xad\x81\x3c\x07\x57\x69\x6e\x45\x75\xf1\x8b\x74\x1f\x1c\x01\xfe\x03\x3c\xae\xff\xd7'


La shellcod…