CybexCTF 2020 Writeup (Beep Boop, Potencial/Intensidad & Unsafe Behaviour)
En este post voy a tratar los retos que he presentado para el CTF comunitario de Cybex, empecemos!
Esteganografía
Beep Boop
-
The FBI has found this strange audio with a list of weird things inside the computer of a suspect of stealing a dog. They think this won’t be a great problem, but they don’t know they are dealing with a well-known cybercriminal.
-
Hint 1: Stay out of the Deep dangers of the cyberworld. (Haciendo referencia al programa que se debe usar al principio: DeepSound)
-
Hint 2: Not everything is graphically watchable with your eyes. (Haciendo refierencia a que se debe investigar en una foto la cual contiene más archivos.)
-
Flag: CYBEX{mR_R0b0T_FtW!}
-
Dificultad: Medio
Este reto está escrito en inglés para ayudar a llegar a la conclusión de que se está haciendo referencia a la serie “Mr Robot”.
Para empezar, si hacemos una búsqueda en google sobre Mr Robot, esteganografía (y Deep si cogiéramos la pista) llegaríamos a artículos o vídeos como este.
Tras descargar la herramienta, vemos que nos pide una contraseña, aquí es cuando john, deepsound2john y la lista “extraña” entran en acción.
Primero utilizaremos deepsound2john para hashear el wav y posteriormente poder crackearlo con john.
$ /usr/share/john/deepsound2john.py hellofriend.wav
hellofriend.wav:$dynamic_1529$bbfe6bb6e1deb87f3a09ca2964e227cb15179959
Una vez tenemos el hash, lo mandamos a john y en escasos segundos tendremos la contraseña. (Se podría haber “adivinado” al ver que es bastante distinta a las demás de la lista.)
hellofriend.wav:ER280652
Teniendo la contraseña podemos entrar en deepsound y extraer los archivos:
$ ls
image01.jpg image02.jpg image03.png image04.png image06.jpg image07.png
Aquí entra en juego el análisis simultáneo de muchas imágenes, en el que hay que pensar de manera crítica e ir “a lo seguro”.
# exiftool *
======== image01.jpg
ExifTool Version Number : 11.80
File Name : image01.jpg
Directory : .
File Size : 354 kB
File Modification Date/Time :
<-- data -->
Datemodify : 2020-02-12T20:13:59+01:00
Comment : CYBEX{h4hA_n0T_th4T_EaSY}
Warning : [minor] Trailer data after PNG IEND chunk
Image Size : 540x277
Megapixels : 0.150
6 image files read
Aquí encontramos lo que parece una flag,
CYBEX{h4hA_n0T_th4T_EaSY}
pero no es legítima. Si seguimos buscando podemos ver que en la última foto hay cosillas inusuales.
Si investigamos los carácteres legibles…
$ strings image07.png
<-- data -->
If<c
If you read this means we are under terrible circumstances, please be careful. czNjcjN0cDRzc3cwckQhKg==
9JP'8MIfxr
<-- data -->
¡Tenemos una contraseña! czNjcjN0cDRzc3cwckQhKg== : s3cr3tp4ssw0rD!*
< Imagen normal >
DECIMAL HEXADECIMAL DESCRIPTION
--------------------------------------------------------------------------------
0 0x0 JPEG image data, EXIF standard
12 0xC TIFF image data, little-endian offset of first image directory: 8
1210 0x4BA Copyright string: "Copyright (c) 1998 Hewlett-Packard Company"
< Imagen modificada >
DECIMAL HEXADECIMAL DESCRIPTION
--------------------------------------------------------------------------------
0 0x0 PNG image, 540 x 277, 8-bit colormap, non-interlaced
1029 0x405 Zlib compressed data, best compression
94181 0x16FE5 PNG image, 540 x 277, 8-bit colormap, non-interlaced
95055 0x1734F Zlib compressed data, best compression
187948 0x2DE2C Zip archive data, encrypted at least v1.0 to extract, compressed size: 33, uncompressed size: 21, name: flag.txt
188141 0x2DEED End of Zip archive, footer length: 22
Podemos ver que dentro de esta imagen hay otra imagen y un zip que contiene un archivo llamado “flag.txt”.
Si lo extraemos e introducimos la contraseña que vimos anteriormente:
$ binwalk -e image07.png
DECIMAL HEXADECIMAL DESCRIPTION
--------------------------------------------------------------------------------
0 0x0 PNG image, 540 x 277, 8-bit colormap, non-interlaced
1029 0x405 Zlib compressed data, best compression
94181 0x16FE5 PNG image, 540 x 277, 8-bit colormap, non-interlaced
95055 0x1734F Zlib compressed data, best compression
187948 0x2DE2C Zip archive data, encrypted at least v1.0 to extract, compressed size: 33, uncompressed size: 21, name: flag.txt
188141 0x2DEED End of Zip archive, footer length: 22
$ cd _image07.png.extracted/
$ ls
1734F 1734F.zlib 2DE2C.zip 405 405.zlib flag.txt
$ unzip 2DE2C.zip
Archive: 2DE2C.zip
[2DE2C.zip] flag.txt password: s3cr3tp4ssw0rD!*
replace flag.txt? [y]es, [n]o, [A]ll, [N]one, [r]ename: y
extracting: flag.txt
$ cat flag.txt
CYBEX{mR_R0b0T_FtW!}
Criptografía
Potencial / Intensidad
-
Hacienda ha abierto una investigación contra uno de los mayores cómicos de la actualidad en España. Te han pedido que descifres el mensaje que han encontrado en su portátil, junto a unos ejemplares en pdf del “Hola”.
-
Flag: CYBEX{l4_r3s1st3nc14_m0l4}
Este reto lo quise ambientar en el programa “La Resistencia”, y se trataba de un texto de 512 carácteres en el que se podían distinguir frases dichas en el programa por el presentador.
Si nos fijamos, vemos que hay letras en minúscula y mayúscula, sin seguir un patrón de principio de palabra, pero sí encontramos que todos los segmentos miden 8 carácteres.
Si probamos a pasar las minúsculas a 0s y las mayúsculas a 1s vemos que nos queda un mensaje coherente si lo desciframos:
< mensaje.enc a binario >
010100000110100101110001011101011110100100100000011100000110000101100111011000010010000001101100011000010010000001100101011100110111010001100001011101000111010101100001001011000010000001111010011011110111001001110010011011110010111000001010000010100100001101011001010000100100010101011000011110110110110000110100010111110111001000110011011100110011000101110011011101000011001101101110011000110011000100110100010111110110110100110000011011000011010001111101
< binario a texto >
Piqué paga la estatua, zorro.
CYBEX{l4_r3s1st3nc14_m0l4}
Web
Unsafe behaviour
-
Un amigo me ha dicho que ha desarrollado un login imbatible y me ha pasado esta web. Parece bastante segura, ¿sabrías colarte?. Te aviso, mi amigo es muy troll.
-
Flag: CYBEX{Cl13nT_s1D3_v4l1D4TIOn}
En este reto intento demostrar cómo la validación de datos en el lado del cliente es muy insegura.
Para pasar el reto debemos aplicar un breakpoint en la línea en la que se valida el usuario y la contraseña:
Cuando el breakpoint salte, podemos pedirle al navegador que nos de la resolución de la ofuscación del usuario.
Con esto, sabemos que el usuario es “admin”, y la contraseña “hunter2”. Si entramos con estas credenciales vemos que visita hiddenflag.html y vuelve a index.html. Si abrimos la pestaña de red e investigamos el comportamiento tras pulsar el login vemos la flag: