Las evidencias son un precioso fichero .7z (que en Debian no se puede abrir con unzip, hay que usar p7zip, ojo), que una vez descomprimido nos deja los siguientes ficheros:
# ls -laht total 27G drwxr-xr-x 2 root root 4.0K Aug 27 18:10 . drwxr-xr-x 5 root root 4.0K Aug 27 17:43 .. -rw-r--r-- 1 root root 4.0G Mar 22 22:21 DFA_CTF_Triage-0.vmdk -rw-r--r-- 1 root root 23G Mar 22 22:21 DFA_CTF_Triage.vmdk -rw-r--r-- 1 root root 2.0K Mar 22 22:14 DFA_CTF_Triage.vmx
Podríamos arrancar la máquina virtual en VMWare, pero vamos a tratar la VM como una evidencia muerta, para ver si somos capaces de sacar todas las evidencias de un modo más formal.
La forma más rápida de montar en Debian un .vmdk es, si tienes qemu instalado, la siguiente:
Insertamos el módulo de NBD (Network Block Devices) y montamos las imagenes:
# sudo modprobe nbd # qemu-nbd -r -c /dev/nbd0 DFA_CTF_Triage-0.vmdk # qemu-nbd -r -c /dev/nbd1 DFA_CTF_Triage.vmdk
Identificamos las particiones de cada uno de los discos:
# fdisk -l /dev/nbd0 Disk /dev/nbd0: 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: 0x8e796ee0 Device Boot Start End Sectors Size Id Type /dev/nbd0p1 2048 20967423 20965376 10G 7 HPFS/NTFS/exFAT root@MOX:/fast/defcon/vm# fdisk -l /dev/nbd1 Disk /dev/nbd1: 30 GiB, 32212254720 bytes, 62914560 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: 0x1e3eccd3 Device Boot Start End Sectors Size Id Type /dev/nbd1p1 * 2048 206847 204800 100M 7 HPFS/NTFS/exFAT /dev/nbd1p2 206848 62910463 62703616 29.9G 7 HPFS/NTFS/exFAT
Creamos los puntos de montaje correspondientes:
# mkdir /mnt/win1 # mkdir /mnt/win2 # mkdir /mnt/win3
y montamos las particiones correspondientes:
# mount /dev/nbd0p1 /mnt/win1 # mount /dev/nbd1p1 /mnt/win2 # mount /dev/nbd1p2 /mnt/win3
Win1 parece una partición extra que solo contiene un volcado de memoria (parece como si fuera un servidor en la nube al que se le hubiera añadido un disco nuevo solo para poder guardar ahí el volcado de memoria). Win2 parece la partición de boot de un Windows 10, y Win3 es nuestra partición de sistema.
Ahora que ya tenemos todo identificado… ¡al lío!
1. ¿Cuál es el nombre del usuario?
Tenemos montado el disco, así que es cuestión de acceder a la carpeta Users y comprobar que Bob es nuestro único usuario.
* Respuesta: Bob
2. ¿A qué hora se realizó el inicio de sesión más reciente? La respuesta es en formato UTC as MM/DD/YYYY HH:MM:SS (24h).
Las cosas que han pasado se quedan en los logs (casi siempre). En nuestro caso, los inicios de sesión son tarea de Security, por lo que podemos abrirlo con un Visor de Eventos de cualquier Windows moderno. Nos cuesta bien poco encontrar el primer login de Bob, pero saber la hora en UTC es algo más complejo (recuerda que Visor de Eventos funciona con la hora local del equipo, ojo).
Lo más sencillo es seleccionar las propiedades del evento, y dentro de los detalles nos aparece la fecha en UTC (indicado por el “Z” al final de la fecha).
* Respuesta: 03/22/2019 20:50:51
3. ¿Cuándo se apagó el equipo por última vez? La respuesta es en formato UTC as MM/DD/YYYY HH:MM:SS (24h).
Más valores molones del registro:
HKLM\SYSTEM\CurrentControlSet\Control\Windows -> ShutdownTime
Podemos abrir el registro con RegistryExplorer y acceder fácilmente a la clave del registro indicada, que sin embargo está codificada. Sin embargo, su funcionalidad de intérprete de datos es una gozada, ya que nos traduce sin problemas el formato binario a UTC.
* Respuesta: 03/22/2019 21:11:14
4. Un fichero .7z fue borrado. ¿Cuál es el hash CRC32 del fichero que contenía en su interior?
Ahora es cuando nos toca sacarle brillo a Scalpel para hacer un carving salvaje de varias horas que no se deje ni un bit por rebuscar. O también podemos ir y mirar lo que hay en la papelera de Windows. Lo que nos pida el cuerpo, vamos.
# ls -laht total 3.2M -r-------- 1 root root 544 Mar 22 04:29 $I9C7G1J.asd dr-x------ 1 root root 4.0K Mar 22 04:29 . -r-------- 1 root root 544 Mar 8 04:34 $ILUERRD.exe -r-------- 1 root root 2.9M Mar 8 04:34 $RLUERRD.exe -r-------- 1 root root 27K Mar 8 04:10 $R9C7G1J.asd -r-------- 1 root root 544 Mar 8 03:54 $IATGMO5.7z -r-------- 1 root root 252K Mar 8 03:34 $RATGMO5.7z dr-x------ 1 root root 0 Jan 26 2019 .. -r-------- 1 root root 129 Jan 26 2019 desktop.ini
Si nos copiamos los dos .7z y los abrimos con un 7Zip, el segundo de ellos nos da la respuesta:
* Respuesta: AD96120C
5. ¿En qué timezone está el equipo (en formato UTC)
Otra pregunta de configuración del sistema, otra clave del registro que revisar:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\TimeZoneInformation
Un poco de Registry Explorer nos da la respuesta.
Eastern Standard Time se traduce en términos de UTC a UTC-5, que es nuestra respuesta. Aquí podríamos que ser un poco puntillosos, porque la fecha del equipo es el 22 de Marzo de 2019, por lo que estaríamos en horario de verano, en el que aplicaríamos en UTC-4 (ya que se aplica en el segundo domingo de Marzo):
https://en.wikipedia.org/wiki/Eastern_Time_Zone#Daylight_saving_time
Observando los datos de RegistryExplorer comprobamos que tenemos 3 valores implicados:
- Bias: 300 (el valor por defecto de ajuste horario, en minutos)
- DaylightBias: 4294967236 (las modificaciones por horario de verano, que con el intérprete de datos de RegistryExplorer queda en cristiano en -60)
- ActiveTimeBias: 240 (Bias + DaylightBias)
Las cuentas nos salen. Aunque la timezone sera UTC-5, nuestra hora real tiene que ser UTC-4.
* Respuesta: UTC-5
6. ¿Cuántos usuarios tienen un RID igual o superior en el equipo?
Esta casi la podíamos haber respondido de cabeza: dado que solo hay un usuario en el equipo, y que las cuentas conocidas (Administrador, Guest) tienen RID < 1000 … la respuesta es 1. Pero vamos a sacar a pasear a RegRipper sobre el hive SAM para asegurarnos:
* Respuesta: 1
7. ¿Cuál es el ID de la extensión de Chrome instalada?
Chrome guarda las extensiones en la siguiente carpeta:
C:\Users\[login_name]\AppData\Local\Google\Chrome\User Data\Default\Extensions
Si nos vamos a ese directorio encontramos una buena pila de extensiones instaladas.
# ls -laht total 36K dr-x------ 1 root root 32K Mar 22 22:11 .. dr-x------ 1 root root 4.0K Mar 21 17:57 . dr-x------ 1 root root 0 Mar 21 17:57 hdokiejnpimakedhajhdlcegeplioahd dr-x------ 1 root root 0 Mar 8 04:26 hnbmfljfohghaepamnfokgggaejlmfol dr-x------ 1 root root 0 Feb 9 2019 ghbmnnjooekpmoecnnnilnnbdlolhkhi dr-x------ 1 root root 0 Feb 9 2019 pjkljhegncpnkpknbcohdijeoejaedia dr-x------ 1 root root 0 Feb 9 2019 blpcfgokakmgnkcojhhkbfbldkacnbeo dr-x------ 1 root root 0 Feb 9 2019 apdfllckaahabafndbhieahigkjlhalf dr-x------ 1 root root 0 Feb 9 2019 aohghmighlieiainnegkcijnfilokake dr-x------ 1 root root 0 Feb 9 2019 nmmhkkegccagdldgiimedpiccmgmieda dr-x------ 1 root root 0 Feb 9 2019 pkedcjkdefgpdelpbcmbmeomcjbeemfm dr-x------ 1 root root 0 Feb 9 2019 felcaaldnbdncclmgdcncolpebgiejap dr-x------ 1 root root 0 Feb 9 2019 aapocclcgogkmnckokdopfmhonfmgoek
hdokiejnpimakedhajhdlcegeplioahd –> LastPass … pero no nos la da como válida
hnbmfljfohghaepamnfokgggaejlmfol –> ncage, que es la respuesta correcta.
Para los curiosos, ncage es una extensión que reemplaza todas las imágenes de la página visitada por fotos de Nicholas Cage. No es coña:
https://37.187.124.60/ext/hnbmfljfohghaepamnfokgggaejlmfol.html
* Respuesta: hnbmfljfohghaepamnfokgggaejlmfol
8. ¿Cuántas veces se ejecutó Adobe Reader?
Prefetch nos va a dar la respuesta en 3 segundos… si no fuera porque la carpeta está vacía. Es más que posible que Windows haya sido instalado en un disco duro SSD, motivo por el cual no se crea la carpeta (las aplicaciones ya se cargan a toda pastilla por lo que no tiene sentido).
Nos toca recurrir a los registros de UserAssist, algo que RegRipper nos solventa ágilmente con su plugin userassist y el NTUSER.dat del usuario en cuestión.
De las ejecuciones de Mimikatz y Powershell que hemos visto poco después hablaremos más tarde (espero) … ;)
* Respuesta: 7
9. Existen un ejecutable escondido en el escritorio. ¿Cuál es el nombre del fichero (extensión incluida)?
Cuando lo tienes montado en Linux eso de que esté escondido siempre es relativo. Si hacemos un file en el directorio Desktop del usuario Bob encontramos dos ejecutables:
# file * |grep PE32 hfs.exe: PE32 executable (GUI) Intel 80386, for MS Windows, UPX compressed howudoin.exe: PE32+ executable (GUI) x86-64, for MS Windows
Aunque si abrimos la carpeta desde un Windows parece que lo de “escondido” tiene su explicación (sobre todo porque una de las cosas que hace servidor con un equipo Windows es desactivar esa opción de “esconder las extensiones de los ficheros”):
* Respuesta: howudoin.exe
10. ¿A qué hora accedió el usuario a contenido en placerholder.com? Responde en formato HH:MM
Vamos a emplear ChromeHistoryView para revisar el historial (vamos a tirarnos un triple y asumir que, ya que en una pregunta anterior preguntaban sobre Chrome, es el navegador usado).
Y en efecto, acertamos ya que encontramos un acceso a via.placeholder.com:
Ahora viene cuando tenemos que calcular con cuidado. El acceso se ha producido a las 17:12h (hemos sido previsores y configurado ChromeHistoryView en formato UTC). En preguntas anteriores hemos visto que se estaba trabajando en UTC-4, por lo que tendremos que restarle cuatro horas al resultado. Sin embargo, 13:12 no le gusta al reto como resultado.
Después de darle un millón de vueltas al tema y de tirarme de los pelos, encuentro la respuesta: la pregunta no indica hora en UTC, ni especifica formato de horas. Aunque en España estemos acostumbrados al formato de 24h, en los países sajones se emplea el formato de 12h, en el que las 13:13 equivalen a 1:12h. Siendo exactos, a 01:12.
El próximo reto forense me las voy a apañar para hacer preguntas que tengan metros, kilómetros, euros y conducir por la derecha. Para que sufran.
https://en.wikipedia.org/wiki/24-hour_clock
* Respuesta: 01:12
11. ¿Cuál es el hostname del equipo?
La verdad está en el registro:
HKLM\SYSTEM\CurrentControlSet\Control\ComputerName\ComputerName.
* Respuesta: IM-A-COMPOOTA
12. ¿Qué aplicación de mensajería ha sido descargada en este equipo?
No nos vamos a negar a un par de preguntas facilonas. Si entramos en la carpeta de Downloads de Bob vemos que se ha descargado muchas cosas… pero ahí tenemos un precioso Skype que nos da la flag que buscábamos.
* Respuesta: Skype.
13. ¿Cuántas veces visitó Bob Outlook.com?
Lo primero es ver qué navegadores se han usado. De los datos del UserAssist que hemos obtenido gracias a RegRipper en preguntas anteriores tenemos los siguientes valores:
Fri Mar 22 20:56:25 2019 Z Chrome (34) Thu Mar 21 16:19:13 2019 Z Microsoft.InternetExplorer.Default (7) Value names with no time stamps: OperaSoftware.OperaWebBrowser.1549736806
El historial de Chrome se guarda en:
C:\Users\Bob\AppData\Local\Google\Chrome\User Data\Default\History
y lo podemos ver fácilmente con ChromeHistoryView:
obteniendo en total 18 hits.
El de Opera lo tenemos en:
C:\Users\antonio\Desktop\Defcon_DFIR_CTF_2019\windows\bob\AppData\Roaming\Opera Software\Opera Stable\History
y lo podemos ver también con ChromeHistory View, en este caso sin tener resultados.
Nos queda Internet Explorer. Después de un buen rato intentando encontrar los directorios WebCache/INetCache sin éxito pienso … ¿seguro que esto es un Windows 10, chombatta? Y resulta que no, que es un Windows 7. Y en Windows 7 no tenemos de esas moderneces, tenemos el Internet Explorer viejuno de toda la vida, con su historial en:
C:\Users\Bob\AppData\Local\Microsoft\Windows\History\
La herramiente IEHistoryView nos permite ver el historial, pero no tenemos visitas a Outlook.com. 18 hits serán … !fail!
Después de mucho darle vueltas al asunto y de hacer varias pruebas, descubro esta pequeña joya escondida en un rincón de Internet:
https://www.lowmanio.co.uk/blog/entries/how-google-chrome-stores-web-history/
que indica que el valor “Visit_Count” almacena el total de visitas para dicha URL. Es decir, que por mucho que tengamos varias líneas con una URL, el Visit_Count va a ser el mismo si la URL es la misma. Esto nos reduce el resultado de 18 a 3, que es la respuesta correcta.
* Respuesta: 3
14. Parece que Bob ha estado haciendo de RRHH. ¿Puedes encontrar el número de la seguridad social para una persona con las iniciales R.C. ?
Rebuscando un poco en la carpeta de usuario de Bob encontramos el directorio EmployeeDocuments, y dentro el fichero EmployeeInformation.xlsx, que nos da nuestra respuesta
* Respuesta: 601-25-0735
15. Bob estaba viendo vídeos de YouTube en el trabajo. La captura de red indica que el ID del vídeo es N9NCyGaxoDY. ¿Cuál es el título del vídeo?
Esta parece que tiene truco de lo sencilla que es. La estructura estándar de una URL de un vídeo de Youtube es:
https://www.youtube[.]com/watch?v=ddp70SjsiNw
donde el valor “ddp70SjsiNw” corresponde al identificador del vídeo (que por cierto, no debéis abrir si sois fácilmente impresionables).
Si abrimos la URL https://www.youtube[.]com/watch?v=ddp70SjsiNw
nos encontramos con una deliciosa actuación de Rowan Atkinson, y de paso nuestra flag.
* Respuesta: Rowan Atkinson Toby the Devil – Welcome to Hell
16. Bob ha escondido una presentación en PowerPoint. ¿Cuál es el hash CRC32 del fichero?
Después de revisar todos los ficheros en busca de PowerPoint, y de descomprimir con lupa todos y cada uno de ellos, me doy por vencido.
* Respuesta: N/A
17. ¿Cuál es la flag en el fichero C:\Users\Bob\Desktop\WABBIT\1 ?
Como al parecer tenemos varios retos relacionados con la carpeta WABBIT, vamos a sacar algo de info de los mismos:
# file * 1: PE32+ executable (GUI) x86-64, for MS Windows 2: data 3: data 4: data 5: JPEG image data # exiftool * ======== 1 ExifTool Version Number : 10.40 File Name : 1 Directory : . File Size : 189 kB File Modification Date/Time : 2019:03:08 04:14:58+01:00 File Access Date/Time : 2019:03:08 04:03:23+01:00 File Inode Change Date/Time : 2019:03:08 04:14:58+01:00 File Permissions : r-------- File Type : Win64 EXE File Type Extension : exe MIME Type : application/octet-stream Machine Type : AMD AMD64 Time Stamp : 2009:07:14 01:56:35+02:00 PE Type : PE32+ Linker Version : 9.0 Code Size : 43008 Initialized Data Size : 153600 Uninitialized Data Size : 0 Entry Point : 0x3570 OS Version : 6.1 Image Version : 6.1 Subsystem Version : 6.1 Subsystem : Windows GUI File Version Number : 6.1.7600.16385 Product Version Number : 6.1.7600.16385 File Flags Mask : 0x003f File Flags : (none) File OS : Windows NT 32-bit Object File Type : Executable application File Subtype : 0 Language Code : English (U.S.) Character Set : Unicode Company Name : Microsoft Corporation File Description : Notepad File Version : 6.1.7600.16385 (win7_rtm.090713-1255) Internal Name : Notepad Legal Copyright : © Microsoft Corporation. All rights reserved. Original File Name : NOTEPAD.EXE Product Name : Microsoft® Windows® Operating System Product Version : 6.1.7600.16385 ======== 2 ExifTool Version Number : 10.40 File Name : 2 Directory : . File Size : 48 kB File Modification Date/Time : 2019:03:08 03:54:54+01:00 File Access Date/Time : 2019:03:08 03:47:06+01:00 File Inode Change Date/Time : 2019:03:08 03:54:54+01:00 File Permissions : r-------- Error : Unknown file type ======== 3 ExifTool Version Number : 10.40 File Name : 3 Directory : . File Size : 35 kB File Modification Date/Time : 2019:03:08 04:01:55+01:00 File Access Date/Time : 2019:03:08 04:01:29+01:00 File Inode Change Date/Time : 2019:03:08 04:01:55+01:00 File Permissions : r-------- Error : Unknown file type ======== 4 ExifTool Version Number : 10.40 File Name : 4 Directory : . File Size : 116 kB File Modification Date/Time : 2019:03:08 03:58:23+01:00 File Access Date/Time : 2019:03:08 03:56:52+01:00 File Inode Change Date/Time : 2019:03:08 03:58:23+01:00 File Permissions : r-------- Error : Unknown file type ======== 5 ExifTool Version Number : 10.40 File Name : 5 Directory : . File Size : 22 kB File Modification Date/Time : 2019:03:08 03:59:34+01:00 File Access Date/Time : 2019:03:08 03:52:21+01:00 File Inode Change Date/Time : 2019:03:08 03:59:34+01:00 File Permissions : r-------- File Type : JPEG File Type Extension : jpg MIME Type : image/jpeg Warning : JPEG format error 5 image files read # md5sum * 2b6f256aa3b70c8be799a23826fb92bd 1 a86dfe127b8d5a9dbfaedd9b96af2a77 2 dc90f97b5152b707b28168ccad9da409 3 5528514fa047070578da87e55f70d448 4 44abefbcb058ce5ebd17296a6a6e416f 5
Los metadatos dicen que es un Notepad… pero no hay que fiarse de nada de lo que te diga un ejecutable. VirusTotal lo marca como “ligeramente” malicioso, y no está firmado digitalmente por Microsoft, así que ojito al parche:
https://www.virustotal.com/gui/file/5199a352dce04e8c50a1ad3048fb44347634bbd52ea2a7a902c3f77d44cfc7dc/behavior/VirusTotal%20Jujubox
¿Lo tiramos en una sandbox? ¿Nos pegamos 5 años de nuestra vida en un retiro espiritual y nos hacemos uno con IDA? ¿O quizás le tiramos un strings sucísimo y miramos a ver qué dice? Los últimos serán los primeros:
# strings 1 |grep -i flag !flag<program cannot be run in DOS>ode.
* Respuesta: program cannot be run in DOS
18. ¿Cuál es la flag en el fichero C:\Users\Bob\Desktop\WABBIT\2 ?
Si le hacemos un strings sucio sucio para ver si cae premio lo único que tenemos es una pista:
# strings -n 8 2 NETSCAPE2.0 3+33+f3+ 3U33Uf3U f+3f+ff+ fU3fUffU Y7[$/^aR &2Hct.Eo Dm8t)"s`h m840\WDt %*D\dLAhP i(u3zB~# &n|7R(5}ZQ 2?C_ddJ~6 )9Cp\mCw
Si buscamos NETSCAPE2.0 nos encontramos una oscura referencia al formato de GIF animados:
http://fileformats.archiveteam.org/wiki/GIF
Lo renombramos a .gif a ver si tenemos suerte … y nada. Nos lo vamos a tener que currar un poco más. Vamos a ver un poco el hexadecimal que tiene dentro con hexdump:
00000000 00 00 00 00 00 00 1c 02 95 01 85 00 00 19 5c 4a |..............\J| 00000010 3a d3 aa 00 00 00 37 c9 a2 3d dd b2 2c a6 85 1c |:.....7..=..,...| 00000020 74 5c 33 be 99 22 87 6c 28 97 79 30 b2 8f 0f 41 |t\3..".l(.y0...A| 00000030 34 3b d8 ae 32 b8 94 2b a6 84 18 69 53 24 87 6c |4;..2..+...iS$.l| 00000040 35 c3 9d 23 87 6c 29 9f 7f 3d df b4 38 ce a6 36 |5..#.l)..=..8..6| 00000050 c9 a2 25 90 73 27 97 79 2e ac 8a 20 7e 65 1e 74 |..%.s'.y... ~e.t| 00000060 5d 2f b2 8f 3c dc b1 05 2d 22 0e 41 33 0d 41 33 |]/..<...-".A3.A3| 00000070 11 4f 3f 26 97 79 3c dc b2 27 98 79 3b d9 af 2d |.O?&.y<..'.y;..-| 00000080 ac 8a 3a d6 ac 32 bb 96 00 00 00 00 00 00 00 00 |..:..2..........| 00000090 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| * 000000c0 00 00 00 00 00 00 00 00 00 00 00 00 00 21 ff 0b |.............!..| 000000d0 4e 45 54 53 43 41 50 45 32 2e 30 03 01 00 00 00 |NETSCAPE2.0.....| 000000e0 21 f9 04 00 07 00 00 00 2c 00 00 00 00 1c 02 95 |!.......,.......| 000000f0 01 87 00 00 00 00 00 33 00 00 66 00 00 99 00 00 |.......3..f.....| 00000100 cc 00 00 ff 00 2b 00 00 2b 33 00 2b 66 00 2b 99 |.....+..+3.+f.+.| 00000110 00 2b cc 00 2b ff 00 55 00 00 55 33 00 55 66 00 |.+..+..U..U3.Uf.| 00000120 55 99 00 55 cc 00 55 ff 00 80 00 00 80 33 00 80 |U..U..U......3..| 00000130 66 00 80 99 00 80 cc 00 80 ff 00 aa 00 00 aa 33 |f..............3| 00000140 00 aa 66 00 aa 99 00 aa cc 00 aa ff 00 d5 00 00 |..f.............| 00000150 d5 33 00 d5 66 00 d5 99 00 d5 cc 00 d5 ff 00 ff |.3..f...........| 00000160 00 00 ff 33 00 ff 66 00 ff 99 00 ff cc 00 ff ff |...3..f.........|
Mmm … esa cadena “21 ff 0b” según esta documentación parece la del formato gif
http://glup2.blogspot.com/2017/04/aclaracion.html
Tiene toda la pinta de que la cabecera del fichero se ha eliminado de forma deliberada para ofuscar el tipo de fichero (nótese el hueco perfecto de “00 00 00 00 00 00” que tenemos al principio del fichero, justo donde tendría que estar el Magic: “47 49 46 38 39 61”
Si modificamos el fichero con un editor hexadecimal (Bless en mi caso), y lo dejamos como tiene que estar:
nos aparece un taco sonriente junto con nuestra flag. Juzgad vosotros según la imagen, pero yo tuve que llamar a un amigo médico para que me descifrara el elegante garabato a mano alzada de los creadores del reto:
* Respuesta: taco_bout
19. ¿Cuál es la flag en el fichero C:\Users\Bob\Desktop\WABBIT\3 ?
Empezamos con el strings a ver qué pista tenemos en este caso:
# strings -n 8 3 yayeet.. eFile source: https://commons.wikimedia.org/wiki/File:DragonForce_-_Wacken_Open_Air_2016-AL8703.jpg ICC_PROFILE mntrRGB XYZ 9acspAPPL %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz &'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz pZ;^<3]^I&
Yayeet es al parecer es jerga moderna para decir “Yahoo!” “Yihaa!” o cualquier cosa afirmativo-festiva (vamos, lo que es equivalente en friki español a gritar “wiiiii” y montarte en tu unicornio para cabalgar hacia el horizonte).
https://www.urbandictionary.com/define.php?term=Ya%20yeet
El enlace lleva a un grupo heavy (DragonForce) actuando en el Wacken (un festival con tanta concentración de METAL que algún día acabará modificando el campo magnético de la tierra).
Las dos líneas siguientes son interesantes porque suenan a que tenemos un formato de imagen. Y en efecto, parece que corresponden al JFIF (JPEG File Interchange Format).
https://en.wikipedia.org/wiki/JPEG_File_Interchange_Format
Si lo abrimos con un editor hexadecimal parece que la cabecera se ha ido a por tabaco y no ha vuelto:
Después de intentar identificar el sitio correcto por donde cortar, optamos por una opción burda: eliminamos todo antes del ICC_PROFILE, y añadimos antes el magic de un JFIF “FF D8”. Y esperemos que el visor de imágenes sea más bien laxo con los formatos apaleados… que lo es :)
* Respuesta: dragonforce
20. ¿Cuál es la flag en el fichero C:\Users\Bob\Desktop\WABBIT\4 ?
En este caso el strings no nos da ninguna pista:
# strings -n 8 4 %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz &'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz pk>]Lv5ZMH U9u`NK}* hg-5GCmv =x5<>%V9 iUpM"*AKVe]/ xf&nP~T*) )M.IJNRq{ lH=1_[t~. (BzJ*M)/
pero si lo abrimos con el editor hexadecimal vemos que es otro JFIF al que le han cambiado el magic (FF D9 en lugar de FF D8).
Corregimos el magic y obtenemos nuestra flag dentro de la imagen (!auuuuuuuuu!):
* Respuesta: wof_on_champ
21. Un dispositivo con la letra de unidad “U” fue conectado. ¿Cuál era la etiqueta del volumen?
Si se ha conectado un dispositivo (posiblemente un USB) es para usarlo, por lo que posiblemente tengamos algo en los documentos recientes. Si empleamos el plugin de RegRipper recentdocs obtenemos rápidamente nuestra respuesta:
* Respuesta: ZOOM
22. ¿Cuál es la flag en el fichero C:\Users\Bob\Desktop\WABBIT\5 ?
Tanto analizar malware acaba permitiendo cosas como reconocer formatos así de un vistazo. Aunque el magic sea “FF D8” (el de un JPEG/JFIF) parece a todas luces un PDF. Si regeneramos el header cambiando el existente por “25 50 44 46 2d” logramos que el Adobe Reader nos lo muestre pero sin contenido (habremos hecho mal el formato, que los PDF son muy suyos).
Después de una buena media hora de prueba y error modificando la cabecera y metiendo y quitando bytes, sin querer hago doble click en el PDF y veo que ha seleccionado algo ¿Texto transparente? ¿De verdad? De verdad.
flag<pdf_LOLZ>
* Respuesta: pdf_LOLZ
23. Un fichero con MD5 981FACC75E052A981519ABB48E2144EC existe en algún lugar del equipo. ¿Cuál es el nombre del fichero (con extensión)?
En Linux algunas cosas son muuuy sencillas. Vamos a asumir en primer lugar que el fichero está en la carpeta de Bob, por lo que podemos calcular el hash MD5 de todos los ficheros y volcarlo a un .txt
# find . -exec md5sum {} \; > /fast/defcon/vm/bob_filelist_md5.txt
Luego es tan simple como tirar un grep y encontrar nuestra respuesta:
# fgrep -i 981FACC75E052A981519ABB48E2144EC /fast/defcon/vm/bob_filelist_md5.txt 981facc75e052a981519abb48e2144ec ./AppData/Roaming/Microsoft/Windows/Recent/sleepy.png.lnk
* Respuesta: sleepy.png
24. El liderazgo de DFA se cansó … ¿Cuál es la flag EN el escritorio?
Después de buscar como un loco y de rebuscar todos los ficheros del Desktop del usuario, me doy por vencido
* Respuesta: N/A
25. Parece que Bob se está volviendo un poco loco escondiendo ficheros dentro de diferentes ficheros ¿Puedes encontrar una flag dentro de un powerpoint relacionado con un argumento de ventas (sales pitch)? Copia la flag exactamente como la encuentres (sin usar el formato de flag actual).
El documento salespitch.pptx lo tenemos localizado en la carpeta Documents. Para el que no lo sepa, los documentos de versiones modernas de Office (entendiendo como moderno desde Office 2010 para arriba) son en realidad ficheros comprimidos en .zip, por lo que podemos descomprimirlo en una carpeta temporal.
# ls -laht total 24K drwxr-xr-x 5 root root 4.0K Aug 29 17:19 . drwxr-xr-x 4 root root 4.0K Aug 29 17:19 .. drwxr-xr-x 2 root root 4.0K Aug 29 17:18 _rels drwxr-xr-x 7 root root 4.0K Aug 29 17:18 ppt drwxr-xr-x 2 root root 4.0K Aug 29 17:18 docProps -rw-r--r-- 1 root root 3.1K Jan 1 1980 [Content_Types].xml
Como nos han dicho que hay una flag, buscamos una flag:
# fgrep flag -R * ppt/slides/slide1.xml:Some new product!<flag="welikeslidestoo"></flag="welikeslidestoo">
* Respuesta: <flag=”welikeslidestoo”></flag=”welikeslidestoo”>
26. jerry was a racecar driver
Tenemos un fichero con ese nombre en el Desktop del usuario Bob, así que vamos a ver de qué pie cojea:
# file "jerry was a race car driver" jerry was a race car driver: DOS/MBR boot sector MS-MBR Windows 7 english at offset 0x163 "Invalid partition table" at offset 0x17b "Error loading operating system" at offset 0x19a "Missing operating system", disk signature 0x9005b55b; partition 1 : ID=0x7, start-CHS (0x0,2,3), end-CHS (0x2,254,63), startsector 128, 55296 sectors
No tengo del todo claro qué es lo que es, ni cómo voy a abrirlo, pero por si acaso le voy a tirar un strings nada más empezar a ver si suena la flauta:
# strings -n 8 "jerry was a race car driver" |grep flag flag<nascar_murica>
Tri-lu-lí (dedicada al niño de dos plantas más abajo de mi casa que está aprendiendo a jugar la flauta)
* Respuesta: nascar_murica
Conclusiones
Dada la limitación temporal que me había autoimpuesto, este año le he terminado dedicando unas 30-35h al reto. Un poco menos que el año pasado, pero también nos hemos dejado algunas preguntas en el tintero…
Sí que he apreciado una clara diferencia de la dificultad de los cuatro niveles disponibles: el nivel de Linux era MUY sencillo, el de análisis de la memoria era bastante asequible (y lo recomiendo para cualquiera que trabaje con Volatility, es un entrenamiento al alcance de todos). Dentro de los dos Windows teníamos preguntas muy sencillas y algunas de las que se llaman en los CTF “de idea feliz” (o se te aparece la Virgen o no las sacas). Pero bueno, es algo habitual en casi todos los retos.
Sigo manteniendo mi idea del año pasado: estos CTF forenses son una oportunidad excelente para hacer didáctica de cómo gestionar un incidente. A lo largo de todas las preguntas he ido descubriendo evidencias del incidente que, aunque he dejado de lado porque no correspondían a ninguna pregunta, me habían dado una cierta idea de lo que había ocurrido realmente.
Si se orquestaran las preguntas alrededor del “¿qué ha pasado aquí?”, se podría crear una narrativa que guiara a los participantes del reto en la misma línea en la que lo haría un investigador, conformando una herramienta de entrenamiento estupenda (sí, me sale la vena docente, es lo que tiene).
Como conclusión final, el reto deja un buen sabor de boca (aunque 84 preguntas hace que a veces sea como correr una maratón), y deja algunas herramientas nuevas e ideas para aprender a hacer mejores retos… así que el año que viene, volveremos a por más.