4 minutes
[ES] Desafío ESET 29: Write Up
WeLiveSecurity es un blog sobre seguridad informatica administrado por la comunidad de analistas de seguridad que trabajan para ESET, si el famoso antivirus!
Cada cierto tiempo en este blog presentan retos en los que cualquiera puede participar, divertirse un rato, aprender y ganar algun premio. Hoy presentaron el reto 29 el cual se basa en buscar un flag.
Entramos al post del blog y nos encontramos con un Zip para descargar, pero nos avisan que el mismo tiene una contraseña la cual podemos encontrar si es que logramos resolver el problema en la siguiente imagen:
Tenemos una imagen QR, asi que volvemos a utilizar nuestra herramienta online para decodificar su contenido y nos encontramos con:
RG9Nb3Jl==
Debido a los dos signos ”=” del final, nos damos cuenta rapidamente que se trata de un string en base 64, decodificandolo terminamos obteniendo la clave:
DoMore
En este punto tenemos una carpeta llamada “Desafio_-_29” la cual contiene un archivo llamado “Desafio__29.exe” asi que vamos a investigar un poco ese ejecutable.
El primer paso es extraer todos los strings que este contiene por lo que utilizando la herramienta “strings.exe” de SysInternals terminamos obteniendo entre otras cosas
8fda2e04="Archivo auto-extraible WinRAR"
Ok al parecer tenemos un ejecutable que en realidad es un un archivo SFX generado con WinRAR, el siguiente paso es abrirlo y ver cuales son sus ordenes de extraccion junto con su contenido.
Adentro de este SFX tenemos un archivo sin extension y un comentario que indica que se realizara la extraccion silenciosamente (Silent = 1) por lo que no veremos ninguna ventana al momento de realizarse la descompresion, tambien vemos que la ruta donde se hara la misma es en “C:\WINDOWS\Temp”.
Ahora podemos ejecutar el exe con seguridad de que no se nos paso nada, y buscar ese archivo “Desafio__29” para identificar su contenido gracias a sus primeros bytes, los cuales son:
d0 cf 11
Un poco de Google y nos encontramos con la respuesta: Microsoft Office Document.
Renombramos el archivo a “Desafio__29.doc” por probar y acertamos…
A simple vista no hay ningun flag, pero ahora mismo tenemos un archivo Word y un reto de una compania de anti malware, donde uno puede guardar malware en un archivo de Office?…
En los Macros!!
Vamos a analizar un poco este codigo:
En el principio (el cual no esta en la imagen), podemos observar como se declaran las funciones “CreateThread”, “VirtualAlloc”, “RtlMoveMemory” lo cual nos hace sospechar de que en algun lugar hay codigo ejecutable que sera cargado en memoria gracias al uso de estas funciones anteriormente mencionadas.
Si nos vamos al final del codigo podemos ver “Workbook_Open()”, este es un evento que se ejecuta al iniciar el documento siempre y cuando los macros esten activados, el mismo como se puede observar llama a la funcion Auto_Open.
Analizando Auto_Open:
“Array” guarda el codigo ejecutable, codificado en decimal, que sospechabamos que habia.
VirtualAlloc reserva memoria con el tamaño justo (gracias a UBound) para almacenar el Array.
RtlMoveMemory realiza movimientos de memoria para colocar la shellcode en memoria de manera correcta, toma como destino a “Ffhzpyadi + Spcwl” y como origen a Xosacrosk, siempre realizando movimientos de 1 byte. Por lo que tenemos basicamente en este bucle, un decoder!
CreateThread crea un nuevo hilo de ejecucion ejecutando ese codigo.
En este punto convencido de que el flag debe estar en ese shellcode, lo que voy a hacer es cargar en memoria ese shellcode y localizarlo a traves de “Ffhzpyadi”.
Para esto agrego un punto de inspeccion a la variable “Ffhzpyadi” y ejecuto el codigo hasta la linea de CreateThread. Ahora mismo el shellcode deberia estar ya en memoria y para ubicarlo miro el valor de la variable “Ffhzpyadi” el cual es “193003520”, pasando a hexadecimal obtenemos “0xb810000”.
Abrimos Inmunity Debugger y nos vamos a ver la direccion de memoria que obtuvimos antes, al final de todo nos encontramos con el FLAG!
Flag_is_EnjoySaferTechnology
Y hasta aca llega el reto!