WriteUp: DC-2 | VulnHub

Todos los derechos reservados a la organización WordPress
Resumen
- Enumeración de usuarios con
Caido - Descubrimiento de claves a través de
CeWL - Reutilización de credenciales para el servicio
SSH - Aprovechamiento de SUID del comando
git - Recomendaciones de seguridad para prevenir y mitigar las vulnerabilidades de esta máquina.
Habilidades Empleadas
- Enumeración de puertos y enumeración de CMS
- Búsqueda y uso de CVEs Críticos
- Uso de comandos básicos basados en GNU/Linux
- Aprovechamiento de SUID vulnerables
Herramientas Utilizadas
- arp-scan
- Ping
- Nmap
- Caido
- WPScan
- CeWL
- SSH
- Git
Escaneo y Análisis de Vulnerabilidades
Primeramente analizamos nuestra red local a través del comando arp-scan, especificando nuestra interfaz de red:
arp-scan -I eth3 -l
arp-scan: Permite identificar equipos conectados a la misma red que el host.
-I (interface): Especificamos la interfaz de red donde se enviarán solicitudes para identificar dispositivos.
-l (--localnet): Descubrimiento de dispositivos en nuestra subred local.
La dirección IP de interés es la 192.168.1.176. Realizamos una prueba de conectividad a través de ping para observar si es posible entablar una comunicación entre equipos:
ping -c1 -R 192.168.1.176
ping: Envía un paquete ICMP para verificar si un equipo está activo.
-c1: Especificamos que solo se envíe un paquete y se espere a recibirlo.
-R (Record Route): El resultado muestra los nodos por los que atravesó un paquete.
La ruta de la traza ICMP es exitosa. Así pues, el valor del TTL es igual a 64, lo cual podría indicar que estamos frente a un OS Linux/Unix.
Reconocimiento de Puertos
Enumeramos los 65535 puertos del sistema a través de la herramienta Nmap (Network Mapper) para intentar identificar puertos TCP abiertos:
nmap -p- --min-rate 5000 -Pn -n -oN nmap-scan 192.168.1.176
-p-: Nmap escanea los 65535 puertos TCP de un host.
--min-rate: Se envían como mínimo X cantidad de paquetes por segundo.
-Pn (No Ping): Omisión del descubrimiento de host mediante ping (Asumiendo que el host está activo).
-n (Sin resolución DNS): Omisión de resolución de DNS inversa (Se evita solicitar el nombre del host a partir de su IP).
-oN: Exportar los resultados en formato Nmap (Casi igual que el resultado en la CLI)
<= Importante => Dentro de entornos empresariales es preferible evitar el envío de paquetes
TCP, ICMP o UDPen grandes cantidades, pues esto puede provocar un ataqueDoSaccidental o ser bloqueados por sistemas de monitorización.
Enumeración de Puertos
Observamos los puertos 80 (http) y el 7744 (raqmon-pdu). Ahora, podemos centrar la enumeración en estos puertos utilizando la flag -sV, donde Nmap - tras haber entablado una comunicación con un puerto - analice las respuestas para determinar la versión del servicio que hay detrás.
Los puertos 80 (HTTP) y el 7744 (SSH) se encuentran activos. A partir de este punto podemos enumerar los servicios a través de Nmap.
nmap -sCV -80,7744 -oN ports-enumeration 192.168.1.176
-sCV: Enumeración de los servicios de cada puerto, potenciado a través de scripts de reconocimiento por defecto.
Tras un análisis de la enumeración de puertos, podemos agrupar los resultados en la siguiente tabla:
| Puerto | Servicio | Versión | Notas |
|---|---|---|---|
| 80 | HTTP | Apache httpd 2.4.10 ((Debian)) Debian 5+deb8u7 | Se identifica un CMS (WordPress, en este caso) con un servicio Apache 2.4.10. Por otro lado, se identifica un equipo con Debian 8 - jessie. |
| 7744 | SSH | OpenSSH 6.7p1 Debian 5+deb8u7 (protocol 2.0) | Versión desactualizada propensa al CVE-2018-15473, aunque para este equipo existen otros métodos. |
Herramientas como
whatweb(Comando) oWappalyzer(Extensión del navegador) son de gran utilidad cuando deseamos conocer únicamente las tecnologías que hay en un servicio http.
A partir de la tabla podemos definir posibles vectores de ataques:
Puerto 80 (HTTP): El
CMSes unWordPress 4.7.10propenso alCVE-2019-20041, enumeración de usuarios a través del archivo/wp-json/wp/v2/users, así como enumeración de vulnerabilidades a través de herramientas automatizadas comoWPScan.Puerto 7744 (SSH): Servicio
OpenSSHdesactualizado, siendo usado posiblemente por unDebian 8(jessie). Posible enumeración de usuarios a través delCVE-2018-15473, aunque para esta máquina es posible obtener acceso mediante una enumeración web (A través de herramientas comoCaidoyCeWL.
Enumeración Web
Previo a acceder a la web sin fallos, se mapea la IP de la máquina a la página dc-2 de manera temporal, modificando el archivo /etc/hosts para solucionar la dirección de la página:
Antes de acceder a través del navegador, realizamos una enumeración de direcciones dentro de la página web:
Observamos que dentro de las direcciones identificadas existe /wp-admin, por lo que accedemos a través del navegador para visualizar el panel de administración.
Se identificó la existencia del usuario admin, pero sin otros usuarios o contraseñas no es posible acceder al panel. Por ello se decidió utilizar curl para enumerar los usuarios del sistema:
for i in {0..10}; do curl -si "http://dc-2/?author=$i" | grep "author/"; done
Otra manera de enumerar posibles usuarios es consultando la dirección
/?rest_route=/wp/v2/users/, aprovechándonos de laREST APIde WordPress, incluida a partir de la versión4.7.0.Se debe destacar que la
REST APIsolo expondrá a los usuarios con por lo menos 1 publicación, saltándose el resto.
Tras finalmente haber enumerado a los usuarios existentes en la página, ahora debemos descubrir de algún modo las claves de los usuarios.
Los ataques por diccionario suelen tener tener mayor eficacia que diccionarios genéricos. Esta premisa se basa en que los trabajadores y usuarios suelen crear contraseñas basadas en su contexto (Consumo de productos, hobbies, herramientas de trabajo, etc.).
Acorde al paper “Context-Based Password Cracking for Digital Investigation” , se sugiere que los diccionarios personalizados (Información contextual) pueden mejorar la eficacia de un ataque hasta en un 50% en algunos casos. Esto frente a métodos de crakeo tradicionales.
Fuente: Context-Based Password Cracking for Digital Investigation
Por todo ello, se decidió generar un diccionario personalizado basado en el contenido de la página dc-2, utilizando la herramienta CeWL.
cewl -w custom_password_dictionary.txt http://dc-2/
CeWL: Custom Wordlist Generator genera diccionarios por medio del web crawling, siendo capaz de extraer palabras únicas, números de teléfono y correos electrónicos.
Explotación
A partir de este punto nos enfocamos en intentar acceder a través de diversos métodos al sistema del equipo DC-2.
Web
Tras obtener el diccionario, utilizamos una herramienta como hydra o Caido para automatizar la fase de prueba de credenciales:
Caido: Herramienta para auditorías web. Intercepta, modifica y gestiona tráfico HTTP/HTTPS en tiempo real.HTTPQL: Lenguaje de consultas utilizado por Caido. Permite consultas con operadores lógicos (AND u OR), facilitando tareas como filtrado de respuestas del servidor.
Podemos observar que Caido recibió el código de respuesta 302 (Found) para 2 consultas, las cuales fueron tom : parturient y jerry : adipiscing.
Utilizando las credenciales obtenidas, logramos acceder al panel de administración.
A pesar de tener acceso al panel, no se lograron identificar plugins desactualizados, información confidencial o avisos del administrador del sistema.
SSH
En diversos entornos de trabajo es común la reutilización de credenciales. Por ello, retomando el hecho de que durante la enumeración de puertos vimos que el servicio SSH se encontraba corriendo en el puerto 7744, intentamos acceder con los usuarios y contraseñas previas.
ssh tom@192.168.1.176
SSH: Secure Shell es un servicio de acceso remoto a servidores y dispositivos de manera segura
Al intentar ejecutar comandos como groups o sudo -l nos marca un error -rbash: ... command not found. Esto indica que nos encontramos frente una restricted bash, caracterizada por tener una cantidad limitada de comandos, acceso limitado a carpetas y no poder modificar su .bashrc.
Podemos verificar esto viendo el tipo de Shell de nuestra sesión, así como ver los comandos a los que estamos encapsulados:
echo $SHELL
ls -R -la usr/bin # Carpeta dentro del "/home" del usuario
Es posible observar que de la mayoría de los symlinks presentes (Equivalentes a un acceso directo en Windows) pueden dar paso a escapar de la rbash (vi, less y scp). En este caso utilizamos vi para cambiar la variable SHELL y solicitar una bash:
# > Ejecutar vi y presionar ESC
:set shell=/bin/bash
:shell
export PATH=/bin:/usr/bin:$PATHAl checar el valor nuevamente de SHELL, observamos que nuestra sesión ahora utiliza una bash sin restricciones, así como que tenemos acceso a todos comandos del sistema.
Al ejecutar sudo -l observamos que tom no se encuentra dentro del grupo sudoers. A pesar de ello, previamente durante la explotación web descubrimos que existía el usuario jerry. Probamos a cambiar de usuario:
su jerry # Contraseña: adipiscingObservamos nuevamente una reutilización de credenciales. Ahora intentamos listar -si es que existen- los comandos que podemos ejecutar con permisos de root:
Observamos que el usuario jerry tiene permisos de administrador para ejecutar el comando git, una herramienta utilizada para control de versiones.
Una manera rápida de elevar privilegios a través de git es siguiendo un formato similar al que utilizamos con vi:
sudo git -p help config # Abrirá un paginado
!/bin/bash
-p help config: Git lanza un paginador como el usuario root (Comoless) para visualizar la ayuda detallada para el comando config.
Ahora tenemos una sesión de bash como el usuario root. Como última comprobación, probamos a leer la flag que se encuentra en el directorio /root:
Congratulatons!!!
A special thanks to all those who sent me tweets and provided me with feedback - it’s all greatly appreciated.
If you enjoyed this CTF, send me a tweet via @DCAU7.
Impacto
El atacante con permisos de un usuario común como tom o jerry tiene capacidades de:
- Acceso y permisos de lectura en carpetas como
/www/html.- Capacidad de lectura del archivo
wp-config.php.- Acceso a la base de datos de WordPress, con capacidad de modificar tablas como
wp_users.- Capacidad de enumerar otros sistemas de la red y de realizar movimiento lateral.
El atacante con permisos de administrador obtiene las capacidades de:
- Crear, modificar o eliminar usuarios, entablar persistencia entre sesiones y controlar el tráfico del servidor.
- Modificación total de archivos del sistema
Linux.- Modificar o eliminar el sistema
WordPressdel servidor.
Resumen
La máquina DC-2 presentó una serie de vulnerabilidades críticas (No todas expuestas en este WriteUp) que permitieron técnicas como User enumeration y Dictionary Attack, así como Credential Reuse en el servicio SSH, entre otras más. Por ello, a continuación se expondrán los descubrimientos, su gravedad y pautas para evitar esta clase de fallas de seguridad.
Descubrimientos
Reutilización de Credenciales
| ID | Vulnerabilidad | Gravedad | Descripción |
|---|---|---|---|
| MF1 | CWE-1391: Uso de credenciales débiles | Crítica | Reutilización de credenciales entre el servicio Web y SSH, permitiendo al atacante acceder al servidor y saltar entre usuarios locales. |
Medidas inmediatas
- Evitar el uso de claves basadas en productos de la empresa como lo es la página web o contenido dentro de esta.
- No reutilizar credenciales bajo ninguna circunstancia.
- Cambiar periódicamente las credenciales de los usuarios (Tanto en el servicio
Webcomo en elSSH).
Ejecución de git como sudo
| ID | Vulnerabilidad | Gravedad | Descripción |
|---|---|---|---|
| MF2 | CWE-269: Gestión inadecuada de privilegios | Crítica | El usuario jerry posee la capacidad de escalar privilegios a través del binario git por medio de la flag --paginate |
Medidas inmediatas:
Para mitigar las capacidades de un atacante de poder escalar privilegios, se insta a:
- Establecer permisos restrictivos para el comando
gitdentro del archivo/etc/sudoers, permitiendo únicamente el uso desudopara comandos comogit pull.- Si se requieren permisos para la modificación de archivos dentro de
/var/www/, cambiar el dueño del directorio a usuarios especiales comowww-data.
Para remediar la capacidad de un atacante para escalar privilegios, se insta a utilizar herramientas automatizadas aisladas con permisos especiales, evitando que un usuario tenga que realizar tareas de forma manual.
Panel de Administración
| ID | Vulnerabilidad | Gravedad | Descripción |
|---|---|---|---|
| MF3 | CWE-307: Falta de control de intentos de autenticación excesivos | Alta | El panel de administración de WordPress no tiene un límite definido de intentos de autenticación, permitiendo automatizados de autenticación indefinidamente |
Medidas inmediatas:
- Establecer un método
2FApara reducir el alcance de ataques dirigidos.- Implementar un
WAF(Web application firewall) para monitorear y bloquear tráficoHTTP/HTTPSsospechoso.- Establecer una política de bloqueo de IPs temporal o permanente.
Enumeración de usuarios
| ID | Vulnerabilidad | Gravedad | Descripción |
|---|---|---|---|
| MF4 | CWE-200: Exposición de información sensible a un actor no autorizado | Media | La versión 4.7.0 de WordPress permite la enumeración de usuarios a través de la API REST en la URL /wp-json/wp/v2/users |
Medidas inmediatas:
- Restringir el acceso a la
API RESTa usuarios no privilegiados, o bien, deshabilitar losendpointsque permiten acceder a la información de los usuarios.- Bloquear la enumeración de usuarios a través de la URL
/?author=ID.
Related Posts
2026-03-16