wall_paint
Puntuación: 250
El enunciado de este reto indica lo siguiente:
We recently detected an intrusion in our networks that led many users to be infected with malware. We need to know how the malware got into the users machines and learn the most out of it. Can you lend a hand?
Mirrors to download:
-
https://drive.google.com/file/d/10HlcmXQeWzBbAd7v-wCwXvUmENnkZ3am/view?usp=sharing
-
https://drive.google.com/file/d/1UQj-Xal06qRWEuGZYYAMrDOT5DzeizXi/view?usp=sharing
-
https://mega.nz/file/BqZEwQ7I#SIKDb8CQPhp18FUzT6gk00Bv-YoszfoNmsXoUSZGtB8
-
Challenge created by @guille_hartek
En este reto obtenemos una imagen de un dump, usaremos file para detectar el tipo de fichero:
1 |
image: DOS/MBR boot sector |
Analizaremos ahora la imagen con fdisk para conocer que hay en su interior:
1 2 3 4 5 6 7 8 9 10 11 12 |
# fdisk -lu image Disk image: 10 GiB, 10737418240 bytes, 20971520 sectors Units: sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disklabel type: dos Disk identifier: 0xcb310dcc Device Boot Start End Sectors Size Id Type image1 * 2048 16779263 16777216 8G 83 Linux image2 16781310 20969471 4188162 2G 5 Extended image5 16781312 20969471 4188160 2G 82 Linux swap / Solaris |
Conocido el contenido, procedemos a montarla.
1 |
mount -o loop,ro,offset=1048576 image imagefolder |
El valor 1048576 lo obtenemos de multiplicar el inicio del sector (2048) por el tamaño de bloque (512).
Analizamos, entre otras cosas, la home del usuario corpworker obteniendo un fichero con información importante en la ruta home/corpworker/.local/share/recently-used.xbel
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
# cat recently-used.xbel <?xml version="1.0" encoding="UTF-8"?> <xbel version="1.0" xmlns:bookmark="http://www.freedesktop.org/standards/desktop-bookmarks" xmlns:mime="http://www.freedesktop.org/standards/shared-mime-info" > <bookmark href="file:///home/corpworker/corpwallpaper_1.0.deb" added="2020-04-03T10:16:28Z" modified="2020-04-03T10:16:28Z" visited="2020-04-03T10:16:29.112909Z"> <info> <metadata owner="http://freedesktop.org"> <mime:mime-type type="application/vnd.debian.binary-package"/> <bookmark:applications> <bookmark:application name="Thunderbird" exec="'thunderbird %u'" modified="2020-04-03T10:16:28Z" count="2"/> </bookmark:applications> </metadata> </info> </bookmark> </xbel> |
Donde nos llama la atención el fichero home/corpworker/corpwallpaper_1.0.deb, el cual ya no existe en la home del usuario.
Realizamos varias búsquedas en la imagen, y posteriormente hacemos un hexdump de la imagen, donde identificamos algunos correos que mencionan la intrusión y se facilita la password del fichero .deb en uno de ellos.
Continuamos buscando y obtenemos el correo original, junto con un base64 bastante grande.
Extraemos el base64, lo decodificamos y lo guardamos con el nombre del fichero visto anteriormente y procedemos a extraer el contenido del paquete .deb
1 |
# ar x corpwallpaper_1.0.deb |
Donde observamos dos ficheros tar.xz y el fichero binario del paquete.
Tras extraer los mismos y analizar el contenido, observamos que por una parte se descarga una foto de un gatito de internet e instala un servicio llamado wallpaper. Además de ello ejecuta el siguiente script:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
# cat control/postinst #!/bin/bash set -e systemctl daemon-reload systemctl enable wallpaper echo "Installation password required: " read -s password openssl aes-256-cbc -a -salt -d -in /tmp/st.sh -pass pass:$password 2>/dev/null | bash (shred /tmp/st.sh 2>/dev/null 2>/dev/null && rm /tmp/st.sh 2>/dev/null) || true (shred /home/*/corpwallpaper_1.0.deb 2>/dev/null && rm /home/*/corpwallpaper_1.0.deb 2>/dev/null) || true (shred /home/*/*/corpwallpaper_1.0.deb 2>/dev/null && rm /home/*/*/corpwallpaper_1.0.deb 2>/dev/null) || true (shred /tmp/corpwallpaper_1.0.deb 2>/dev/null && rm /tmp/corpwallpaper_1.0.deb 2>/dev/null) || true |
Que ejecuta el script “st.sh” y elimina todos los archivos que han sido creados y utilizados.
Si probamos a leer el script st.sh observamos que el mismo está cifrado:
1 2 |
# cat data/tmp/st.sh U2FsdGVkX19qUIkWLiyBPAfzN7xCV253v3sjC+JN7hMJu3VqOJF6SQBwUUrz+XV3 |
Utilizamos el comando de openssl visto en el anterior script, junto con la contraseña del anterior correo para descifrar el fichero:
1 2 |
# openssl aes-256-cbc -a -salt -d -in st.sh -pass pass:YTM0NGNmZDdjY2NhYTc5OGVmZmQ5NTZlNWUyYTA3YTUgIC0K echo "flag{ur_1nf3ct3d_m4t3!!}" |
Y conseguimos con ello la flag:
1 |
flag{ur_1nf3ct3d_m4t3!!} |
Puedes ver el resto de writeups en este enlace.