hacktricks/network-services-pentesting/5353-udp-multicast-dns-mdns.md
carlospolop 63bd9641c0 f
2023-06-05 20:33:24 +02:00

95 lines
8 KiB
Markdown

## Información Básica
Multicast DNS (mDNS) es un protocolo de **configuración cero** que permite realizar operaciones **similares a DNS** en la red local en ausencia de un servidor DNS convencional unicast. El protocolo utiliza la misma API, formatos de paquetes y semántica de operación que DNS, lo que permite resolver nombres de dominio en la red local. **DNS Service Discovery (DNS-SD)** es un protocolo que permite a los clientes **descubrir una lista de instancias nombradas de servicios** (como test.\_ipps.\_tcp.local o linux.\_ssh.\_tcp.local) en un dominio utilizando consultas DNS estándar. DNS-SD se utiliza con mayor frecuencia en conjunto con mDNS, pero no depende de él. Ambos son utilizados por muchos dispositivos IoT, como impresoras de red, Apple TVs, Google Chromecast, dispositivos de almacenamiento conectados a la red (NAS) y cámaras.\
**Puerto predeterminado:** 5353/UDP
```
PORT STATE SERVICE
5353/udp open zeroconf
```
### Cómo funciona mDNS
Los dispositivos utilizan mDNS cuando la red local **carece** de un servidor DNS **unicast convencional**. Para resolver un nombre de dominio para una dirección local utilizando mDNS, el dispositivo envía una **consulta DNS para un nombre de dominio** que termina con **.local** a la dirección **multicast** **224.0.0.251** (para IPv4) o **FF02::FB** (para IPv6). También se puede utilizar mDNS para resolver **nombres de dominio globales** (no .local), pero las implementaciones de mDNS deben **desactivar** este comportamiento de forma predeterminada. Las solicitudes y respuestas de mDNS utilizan **UDP** y el puerto **5353** como puerto de origen y destino.
Las respuestas de mDNS contienen varias banderas importantes, incluyendo un valor de **Tiempo de vida** (TTL) que indica cuántos segundos el registro es válido. El envío de una respuesta con **TTL=0 significa que el registro correspondiente debe ser eliminado**. Otra bandera importante es el bit QU, que denota si la consulta es una consulta unicast o no. Si el **bit QU no está establecido**, el paquete es una consulta **multicast** (QM). Debido a que es posible **recibir consultas unicast fuera del enlace local**, las implementaciones seguras de mDNS siempre deben **verificar que la dirección de origen en el paquete coincida con el rango de direcciones de subred local**.
### Cómo funciona DNS-SD
DNS-SD permite a los clientes **descubrir servicios disponibles en la red**. Para utilizarlo, los clientes envían consultas DNS estándar para registros de puntero (PTR), que asignan el tipo de servicio a una lista de nombres de instancias específicas de ese tipo de servicio.
Para solicitar un registro PTR, los clientes utilizan la forma de nombre "\<Servicio>.\<Dominio>". La parte **\<Servicio>** es el **nombre del servicio** precedido por "\_" (por ejemplo, \_ipps, \_printer o \_ipp) y **\_tcp o \_udp**. La parte **\<Dominio>** es "**.local**".\
Los **respondedores** devuelven los registros PTR que apuntan a los registros de **servicio (SRV)** y **texto (TXT)** acompañantes. Aquí hay un ejemplo de un registro PTR:
```
_ipps._tcp.local: type PTR, class IN, test._ipps._tcp.local
```
La parte del registro PTR a la **izquierda** de los dos puntos es su **nombre**, y la parte a la **derecha** es el registro **SRV** al que apunta el registro PTR. El registro **SRV** lista el **host** y el **puerto** de destino donde se puede acceder a la instancia del **servicio**. Por ejemplo, la siguiente imagen muestra un registro SRV "test.\_ipps.\_tcp.local" en Wireshark en el host ubuntu.local y el puerto 8000:
![](<../.gitbook/assets/image (651) (1) (1) (1) (1).png>)
Por lo tanto, el **nombre del registro SRV** es **similar** al registro **PTR** **precedido** por el nombre de la **\<Instancia>** (en este caso, test). El registro **TXT** tiene el **mismo nombre** que el registro **SRV** y contiene la información necesaria cuando la dirección IP y el número de puerto (contenidos en el registro SRV) de un servicio no son suficientes para identificarlo.
## Enumeración
### nmap
```bash
nmap -Pn -sUC -p5353 192.168.1.2
Starting Nmap 6.46 (http://nmap.org) at 2015-01-01 10:30 GMT
Nmap scan report for 192.168.1.2
PORT STATE SERVICE
5353/udp open zeroconf
| dns-service-discovery:
| 9/tcp workstation
| Address=192.168.1.2
| 22/tcp ssh
| Address=192.168.1.2
| 22/tcp sftp-ssh
| Address=192.168.1.2
| 445/tcp smb
| Address=192.168.1.2
```
### Enumeración de Red
Se puede aprender mucho sobre la red local simplemente enviando solicitudes mDNS y capturando tráfico multicast mDNS.
Se puede utilizar la herramienta [**Pholus**](https://github.com/aatlasis/Pholus/) para enviar solicitudes mDNS (-rq) en la red local y capturar tráfico multicast mDNS (durante -stimeout 10 segundos):
```bash
sudo python3 pholus3.py eth0 -rq -stimeout 10
```
## Ataques
### Abuso de la fase de sondeo mDNS
Cuando un respondedor mDNS comienza o cambia su conectividad, pregunta a la red local si hay **algún recurso con el nombre que planea usar**. Si la respuesta contiene el registro en cuestión, el host de sondeo **debe elegir un nuevo nombre**. Si se producen 15 conflictos en 10 segundos, el host debe esperar al menos cinco segundos antes de cualquier intento adicional. Además, si pasa un minuto durante el cual el host no puede encontrar un nombre sin usar, informa un error al usuario.
El siguiente comando de línea de comandos evitará que cualquier nuevo dispositivo obtenga un nuevo nombre, ya que indicará que **cualquier nombre ya está en uso**:
```bash
sudo python pholus.py eth0 -afre -stimeout 1000
```
### Spoofing/MitM
El ataque más interesante que se puede realizar sobre este servicio es realizar un **MitM** en la **comunicación entre el cliente y el servidor real**. Podría ser posible obtener archivos sensibles (MitM la comunicación con la impresora) o incluso credenciales (autenticación de Windows).\
Para obtener más información, consulte:
{% content-ref url="../generic-methodologies-and-resources/pentesting-network/spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md" %}
[spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md](../generic-methodologies-and-resources/pentesting-network/spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md)
{% endcontent-ref %}
## Referencias
* [Practical IoT Hacking: The Definitive Guide to Attacking the Internet of Things](https://books.google.co.uk/books/about/Practical\_IoT\_Hacking.html?id=GbYEEAAAQBAJ\&redir\_esc=y)
<details>
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
- ¿Trabajas en una **empresa de ciberseguridad**? ¿Quieres ver tu **empresa anunciada en HackTricks**? ¿O quieres tener acceso a la **última versión de PEASS o descargar HackTricks en PDF**? ¡Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
- Descubre [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
- Obtén el [**swag oficial de PEASS y HackTricks**](https://peass.creator-spring.com)
- **Únete al** [**💬**](https://emojipedia.org/speech-balloon/) [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **sígueme** en **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
- **Comparte tus trucos de hacking enviando PR al [repositorio de hacktricks](https://github.com/carlospolop/hacktricks) y al [repositorio de hacktricks-cloud](https://github.com/carlospolop/hacktricks-cloud)**.
</details>