Resumen Ejecutivo
Este writeup presenta un análisis detallado de una evaluación de seguridad realizada en una máquina de TryHackMe, simulando un escenario de penetración ética. El objetivo fue identificar vulnerabilidades, explotarlas para obtener acceso inicial y escalar privilegios hasta alcanzar control total (root). Se utilizaron herramientas estándar de pentesting como Nmap, FFUF, Searchsploit y técnicas de evasión de defensas como AppArmor. El enfoque sigue una metodología estructurada basada en el ciclo de penetración: reconocimiento, enumeración, explotación, post-explotación y escalada de privilegios. Todas las acciones se realizaron en un entorno controlado, respetando principios éticos y legales.
Los hallazgos principales incluyen una vulnerabilidad crítica en el CMS SPIP (CVE-2023-27372) que permitió ejecución remota de código (RCE) sin autenticación, seguida de una escalada de privilegios mediante un binario SUID personalizado y evasión de restricciones de AppArmor. Este informe busca no solo documentar el proceso, sino también proporcionar insights académicos sobre las implicaciones de seguridad en sistemas basados en Linux y CMS de código abierto.
Introducción
En el contexto de la ciberseguridad, las evaluaciones de penetración (pentesting) son esenciales para identificar debilidades en sistemas informáticos antes de que sean explotadas por actores maliciosos. Este caso de estudio examina una máquina objetivo running un servidor web con CMS SPIP, destacando cómo configuraciones inadecuadas y versiones desactualizadas pueden llevar a compromisos graves. La máquina opera bajo Ubuntu Linux, con servicios expuestos en puertos 22 (SSH) y 80 (HTTP).
El proceso se inicia con un escaneo de puertos para mapear el panorama de la red, seguido de enumeración de servicios y directorios. Posteriormente, se identifica y explota una vulnerabilidad conocida, culminando en la obtención de flags de usuario y root como prueba de concepto (PoC).
Metodología
Se empleó una aproximación sistemática dividida en fases:
- Reconocimiento y Escaneo: Identificación de puertos abiertos y servicios.
- Enumeración: Análisis de directorios, versiones de software y configuraciones.
- Explotación: Uso de exploits públicos para ganar acceso inicial.
- Post-Explotación: Movimiento lateral y escalada de privilegios.
- Análisis y Evasión: Identificación de mecanismos de defensa y técnicas de bypass.
Herramientas utilizadas incluyen Nmap para escaneo, FFUF para fuzzing de directorios, Searchsploit para búsqueda de exploits, y comandos nativos de Linux para análisis interno.
Fase 1: Reconocimiento y Escaneo de Puertos
El proceso comienza con un escaneo inicial utilizando Nmap para detectar puertos abiertos y evitar detección por firewalls o sistemas de intrusión.
Comando ejecutado:
Este comando realiza un escaneo SYN sigiloso (-sS), ignora el descubrimiento de hosts (-Pn), escanea todos los puertos (-p-), y filtra solo aquellos abiertos (--open). La tasa mínima de paquetes (--min-rate 5000) acelera el proceso mientras mantiene la precisión.
Resultados:
- Puertos abiertos identificados: 22 (TCP) y 80 (TCP).
- Tiempo de ejecución: Aproximadamente 38.49 segundos.
Posteriormente, se realiza un escaneo detallado de versiones y scripts en los puertos encontrados:
Comando ejecutado:
- -sC: Ejecuta scripts predeterminados para enumeración.
- -sV: Detecta versiones de servicios.
- -oN: Guarda resultados en formato normal.
Hallazgos:
- Sistema Operativo: Ubuntu Linux.
- Puerto 22 (SSH): Abierto. Versión OpenSSH 8.2p1. Potencialmente útil para acceso autenticado si se obtienen credenciales.
- Puerto 80 (HTTP): Abierto. Servidor Apache 2.4.41.
- Pista Crítica: El título de la página web es "Publisher's Pulse: SPIP Insights & Tips", revelando el uso del CMS SPIP (Sistema de Publicación en Internet).
Fase 2: Enumeración de la Aplicación Web
Accedemos al servidor HTTP mediante un navegador web ingresando la IP 10.82.177.85. La página principal muestra un sitio basado en SPIP, con secciones como "Home", "Gallery", "Tutorials", etc.
Para enumerar directorios y archivos, se utiliza FFUF, una herramienta de fuzzing rápida.
Comando ejecutado:
- -u: URL con placeholder FUZZ para inyección de palabras.
- -w: Ruta al wordlist (diccionario de términos comunes; alternativamente, usar /usr/share/wordlists/dirb/common.txt si seclists no está instalado).
- -mc all: Muestra todos los códigos de estado HTTP.
- -fc 404: Filtra respuestas "Not Found".
- -fs 0: Filtra respuestas de tamaño cero.
Resultados:
- Archivos de configuración protegidos (.htaccess, .htpasswd) devuelven 403 Forbidden.
- Directorio /spip identificado mediante redirección 301, confirmando la instalación del CMS.
Inspeccionando el código fuente de la página (Ctrl + U), se identifica la versión de SPIP:
Código HTML relevante:
Fase 3: Búsqueda y Preparación de Exploits
Con la versión SPIP 4.2.0 confirmada, se busca exploits conocidos utilizando Searchsploit.
Comando ejecutado:
Resultados:
- Exploit: SPIP v4.2.0 - Remote Code Execution (Unauthenticated) | php/webapps/51536.py
Esta vulnerabilidad corresponde a CVE-2023-27372, permitiendo RCE sin autenticación.
1. Obtención y Preparación del Exploit
Descarga del exploit:
Al ejecutar el script (51536.py), surge un error de compatibilidad con urllib3 (AttributeError: DEFAULT_CIPHERS). Solución: Editar el archivo y comentar la línea 63:
Código Python editado:
2. Evasión de Filtros con Base64
Intentos iniciales de inyectar una reverse shell fallan debido a caracteres especiales que rompen la sintaxis PHP. Se opta por codificación Base64 para evadir filtros.
Generación del payload (IP atacante: 192.168.144.88, Puerto: 4444):
Resultado:
Fase 4: Explotación y Acceso Inicial
Configuración del listener:
Ejecución del exploit:
Resultado: Conexión inversa exitosa como usuario www-data.
Fase 5: Post-Explotación y Escalada a Usuario Think
Desde la shell como www-data, se navega para encontrar claves SSH:
Comandos ejecutados secuencialmente:
Se copia la clave privada id_rsa a la máquina atacante, se asignan permisos:
Conexión SSH:
Obtención de la flag de usuario:
Fase 6: Escalada de Privilegios a Root
Búsqueda de binarios SUID:
Resultado relevante: /usr/sbin/run_container
Análisis con strings:
Revela ejecución de /opt/run_container.sh.
Permisos del script:
Intento de modificación falla debido a AppArmor:
Evasión de AppArmor usando dynamic linker:
Modificación exitosa:
Ejecución:
Conclusiones y Recomendaciones
Este ejercicio demuestra la importancia de mantener software actualizado y configurar mecanismos de defensa como AppArmor adecuadamente. Vulnerabilidades en CMS como SPIP pueden llevar a compromisos completos si no se mitigan. Recomendaciones incluyen: parches regulares, revisión de permisos SUID, y monitoreo de logs.