hacktricks/network-services-pentesting/5353-udp-multicast-dns-mdns.md

109 lines
8.6 KiB
Markdown

# 5353/UDP Multicast DNS (mDNS) y DNS-SD
<details>
<summary><strong>Aprende hacking en AWS de cero a héroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
Otras formas de apoyar a HackTricks:
* Si quieres ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF**, consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
* Consigue el [**merchandising oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección de [**NFTs exclusivos**](https://opensea.io/collection/the-peass-family)
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **sigue** a **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
* **Comparte tus trucos de hacking enviando PRs a los repositorios de github** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
</details>
## Información Básica
Multicast DNS (mDNS) es un **protocolo de configuración cero** que te permite realizar **operaciones similares a DNS** en la red local en ausencia de un servidor DNS unicast convencional. El protocolo utiliza la **misma** API, **formatos de paquetes** y semántica de operación que DNS, lo que te 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 más a menudo 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 usando 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 puedes usar mDNS para resolver **nombres de dominio globales** (los que no son .local), pero las implementaciones de mDNS deben **deshabilitar** este comportamiento por defecto. 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 **Time-to-Live** (TTL) que indica cuántos segundos es válido el registro. Enviar una respuesta con **TTL=0 significa que el registro correspondiente debe ser eliminado**. Otra bandera importante es el bit QU, que indica 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 la subred local**.
### Cómo funciona DNS-SD
DNS-SD permite a los clientes **descubrir servicios disponibles en la red**. Para usarlo, los clientes envían consultas DNS estándar para registros de puntero (PTR), que mapean 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 usan el formato de nombre "\<Servicio>.\<Dominio>". La parte de **\<Servicio>** es el **nombre del servicio** precedido por "\_" (por ejemplo, \_ipps, \_printer o \_ipp) y ya sea **\_tcp o \_udp**. La porción de **\<Dominio>** es "**.local**".\
Los **respondedores** luego devuelven los registros PTR que apuntan a los correspondientes registros de **servicio (SRV)** y **texto (TXT)**. 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** del dos puntos es su **nombre**, y la parte a la **derecha** es el registro **SRV** al que el registro PTR apunta. El registro **SRV** lista el **host** objetivo y el **puerto** donde se puede alcanzar 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 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>** (test en este caso). 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) para 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
Puedes aprender mucho sobre la red local simplemente enviando solicitudes mDNS y capturando tráfico mDNS multicast.
Puedes usar la herramienta [**Pholus**](https://github.com/aatlasis/Pholus/) para enviar solicitudes mDNS (-rq) en la red local y capturar tráfico mDNS multicast (durante -stimeout 10 segundos):
```bash
sudo python3 pholus3.py eth0 -rq -stimeout 10
```
## Ataques
### Abusando de la Fase de Sondeo mDNS
Cuando un respondedor mDNS se inicia 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 de un error al usuario.
El siguiente comando evitará que cualquier nuevo dispositivo obtenga un nuevo nombre, ya que indicará que **cualquier nombre ya está tomado**:
```bash
sudo python pholus.py eth0 -afre -stimeout 1000
```
### Spoofing/MitM
El ataque más interesante que puedes realizar sobre este servicio es llevar a cabo un **MitM** en la **comunicación entre el cliente y el servidor real**. Podrías obtener archivos sensibles (MitM en la comunicación con la impresora) o incluso credenciales (autenticación de Windows).\
Para más información consulta:
{% 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><strong>Aprende hacking en AWS de cero a héroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
Otras formas de apoyar a HackTricks:
* Si quieres ver a tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
* Consigue el [**merchandising oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección de [**NFTs**](https://opensea.io/collection/the-peass-family) exclusivos
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **sigue** a **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
* **Comparte tus trucos de hacking enviando PRs a los repositorios de GitHub** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
</details>