hacktricks/generic-methodologies-and-resources/pentesting-network/spoofing-ssdp-and-upnp-devices.md

261 lines
20 KiB
Markdown
Raw Normal View History

2023-06-05 18:55:20 +00:00
# Suplantación de dispositivos SSDP y UPnP con EvilSSDP
<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)
* Consigue 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>
**Este post fue copiado de** [**https://www.hackingarticles.in/evil-ssdp-spoofing-the-ssdp-and-upnp-devices/**](https://www.hackingarticles.in/evil-ssdp-spoofing-the-ssdp-and-upnp-devices/)
## **Introducción**
### **¿Qué es SSDP?**
SSDP o Protocolo Simple de Descubrimiento de Servicios es un protocolo de red diseñado para **anunciar y descubrir servicios de red**. Puede funcionar sin ninguna configuración de DHCP o DNS. Fue diseñado para ser utilizado en entornos residenciales o pequeñas oficinas. Utiliza UDP como protocolo de transporte subyacente en **el puerto 1900**. Utiliza el método HTTP NOTIFY para anunciar el establecimiento o la retirada de servicios a un grupo multicast. Es la base del protocolo de descubrimiento UPnP.
### **¿Qué son los dispositivos UPnP?**
UPnP o Plug and Play Universal es un conjunto de **protocolos de red** que permite a los dispositivos en red, como ordenadores personales, impresoras, pasarelas de Internet, puntos de acceso Wi-Fi y dispositivos móviles, **descubrir la disponibilidad de cada uno en la red** y establecer servicios de red para comunicaciones, intercambio de datos y entretenimiento. La arquitectura UPnP admite la configuración de red sin necesidad de configuración. Un dispositivo compatible con UPnP de cualquier proveedor puede unirse dinámicamente a una red, obtener una dirección IP, **anunciar su nombre, publicitar o transmitir sus capacidades** a petición y aprender sobre la presencia y capacidades de otros dispositivos.
### **Flujo**
La pila **UPnP** consta de **seis capas**: direccionamiento, descubrimiento, descripción, control, eventos y presentación.
En la capa de direccionamiento, los sistemas habilitados para UPnP intentan obtener una dirección IP a través de **DHCP**. Si eso no es posible, se **asignarán una dirección** de la gama 169.254.0.0/16 (RFC 3927), un proceso conocido como AutoIP.
A continuación, está la capa de descubrimiento, en la que el sistema busca otros dispositivos en la red utilizando el **Protocolo Simple de Descubrimiento de Servicios** (SSDP). Las dos formas de descubrir dispositivos son **activa** y **pasiva**. Al utilizar el método **activo**, los dispositivos compatibles con UPnP **envían un mensaje de descubrimiento** (llamado una **solicitud M-SEARCH**) a la dirección multicast **239.255.255.250 en el puerto UDP 1900.** Llamamos a esta solicitud HTTPU (HTTP sobre UDP) porque contiene una cabecera similar a la cabecera HTTP. La solicitud M-SEARCH se ve así:
```
M-SEARCH * HTTP/1.1
ST: ssdp:all
MX: 5
MAN: ssdp:discover
HOST: 239.255.255.250:1900
```
Los sistemas UPnP que escuchan esta solicitud deben responder con un mensaje unicast UDP que anuncia la ubicación HTTP del archivo XML de descripción, que lista los servicios admitidos por el dispositivo.
Cuando se utiliza el método **pasivo** para descubrir dispositivos, los dispositivos con capacidad UPnP anuncian periódicamente sus servicios en la red enviando un mensaje **NOTIFY a la dirección multicast** 239.255.255.250 en el puerto UDP 1900. Este mensaje, que sigue el mismo formato que el enviado como respuesta al descubrimiento activo, se ve así:
```
NOTIFY * HTTP/1.1\r\n
HOST: 239.255.255.250:1900\r\n
CACHE-CONTROL: max-age=60\r\n
LOCATION: http://192.168.10.254:5000/rootDesc.xml\r\n
SERVER: OpenWRT/18.06-SNAPSHOT UPnP/1.1 MiniUPnPd/2.1\r\n
NT: urn:schemas-upnp-org:service:WANIPConnection:2
```
La descripción de cada perfil UPnP se referencia en el valor del campo LOCATION del mensaje de respuesta recibido durante el descubrimiento activo o en el mensaje NOTIFY recibido durante el descubrimiento pasivo.
La capa de control es probablemente la más importante, ya que permite a los clientes enviar comandos al dispositivo UPnP utilizando las URL del archivo de descripción. Pueden hacer esto utilizando el Protocolo Simple de Acceso a Objetos (SOAP), un protocolo de mensajería que utiliza XML sobre HTTP. Los dispositivos envían solicitudes SOAP al punto final controlURL, descrito en la etiqueta \<service> dentro del archivo de descripción. Una etiqueta \<service> se ve así:
```xml
<service>
<serviceType>urn:schemas-upnp-org:service:WANIPConnection:2</serviceType>
<serviceId>urn:upnp-org:serviceId:WANIPConn1</serviceId>
<SCPDURL>/WANIPCn.xml</SCPDURL>
<controlURL>/ctl/IPConn</controlURL>
<eventSubURL>/evt/IPConn</eventSubURL>
</service>
```
### **IGD - Dispositivo de Puerta de Enlace a Internet**
**IGD** mapea puertos en configuraciones de traducción de direcciones de red (NAT). IGD **permite** a una aplicación **añadir dinámicamente un mapeo de puerto temporal en el router** durante un cierto período de tiempo (sin necesidad de que el usuario realice ningún paso manual).
La mayoría de los dispositivos **normalmente no aceptan** paquetes **SSDP** a través de la **interfaz WAN**, pero algunos de ellos todavía pueden **aceptar comandos IGD** a través de puntos de control SOAP abiertos.
En la sección de herramientas de **Umap**, puedes encontrar una forma de explotar este vector.
## **Herramientas**
### **Miranda**
[**Miranda**](https://raw.githubusercontent.com/0x90/miranda-upnp/master/src/miranda.py) es un **cliente UPnP en python2** que puede ser útil para **descubrir** servicios UPnP, obtener los **detalles** y **enviar comandos** a ellos:
```
upnp> msearch
Entering discovery mode for 'upnp:rootdevice', Ctl+C to stop...
SSDP reply message from 192.168.1.254:49152
XML file is located at http://192.168.1.254:49152/wps_device.xml
Device is running Unspecified, UPnP/1.0, Unspecified
SSDP reply message from 192.168.1.254:53350
XML file is located at http://192.168.1.254:53350/37699b14/rootDesc.xml
Device is running Linux/3.4.11 UPnP/1.0 MiniUPnPd/1.9
upnp> host list
[0] 192.168.1.254:49152
[1] 192.168.1.254:53350
upnp> host get 0
upnp> host details 0
Host name: 192.168.1.254:49152
UPNP XML File: http://192.168.1.254:49152/wps_device.xml
Device information:
Device Name: WFADevice
Service Name: WFAWLANConfig
controlURL: wps_control
eventSubURL: wps_event
serviceId: urn:wifialliance-org:serviceId:WFAWLANConfig1
SCPDURL: wps_scpd.xml
fullName: urn:schemas-wifialliance-org:service:WFAWLANConfig:1
ServiceActions:
PutMessage
NewInMessage
InMessage:
dataType: bin.base64
[...]
upnp> host send 0 WFADevice WFAWLANConfig PutMessage
```
### Umap
La herramienta [**umap**](https://github.com/0x90/upnp-arsenal/blob/master/umap-bypass.py) puede ayudar a **descubrir comandos upnp** que están **disponibles** desde las interfaces **WAN** incluso si no están anunciados en esas interfaces (esto se debe a implementaciones con errores). Tenga en cuenta que si, por ejemplo, está probando un enrutador y tiene acceso a él desde la red interna y la interfaz WAN, debe intentar **enumerar todos los servicios desde la red interna** (usando **miranda** por ejemplo) y luego intentar **llamar a esos servicios desde la red externa**.
### **Otras herramientas UPnP**
Encuentre en [**https://github.com/0x90/upnp-arsenal**](https://github.com/0x90/upnp-arsenal) más herramientas upnp.
### **Evil SSDP**
La herramienta Evil SSDP fue desarrollada por [initstring](https://twitter.com/init\_string). Esta herramienta está alojada en GitHub. Usaremos el comando git clone para clonar todo el contenido del git en nuestra máquina atacante. El comando git clone creará un directorio con el mismo nombre que en GitHub. Dado que la herramienta está desarrollada en Python versión 3, tendremos que usar python3 seguido del nombre del archivo .py para ejecutar el programa. Aquí podemos ver una pantalla de ayuda básica de la herramienta.
```bash
git clone https://github.com/initstring/evil-ssdp.git
cd evil-ssdp/ls
python3 evil-ssdp.py --help
```
![](https://i0.wp.com/1.bp.blogspot.com/-O6lddDvxqts/Xkq5PHqeE\_I/AAAAAAAAisQ/FKOCxVwT9cMy54lLy0SsYcKoM5Q95K5mQCLcBGAsYHQ/s1600/1.png?w=687\&ssl=1)
En el directorio clonado, encontraremos un directorio llamado templates. Contiene todas las plantillas precompiladas que se pueden utilizar para hacer phishing al usuario objetivo.
## **Suplantación de escáner SSDP**
Ahora que hemos ejecutado la herramienta sin problemas, usemosla para obtener algunas credenciales. En esta primera práctica, suplantaremos un escáner como un dispositivo UPnP confiable. Para empezar, tendremos que configurar la plantilla.
### **Configuración de la plantilla**
Para usar la herramienta, tendremos que proporcionar la interfaz de red. Aquí, en nuestra máquina atacante, tenemos "eth0" como nuestra interfaz, puede encontrar su interfaz usando el comando "ifconfig".
Después de proporcionar la interfaz, usaremos el parámetro "--template" para pasar una plantilla que encontramos anteriormente en el directorio de plantillas. Para suplantar un escáner, ejecutaremos el siguiente comando. Como podemos ver, la herramienta ha hecho su trabajo y ha alojado varios archivos de plantilla en nuestra máquina atacante en el puerto 8888. También tenemos el puntero SMB alojado.
```bash
ls temlates/
python3 evil-ssdp.py eth0 --template scanner
```
![](https://i0.wp.com/1.bp.blogspot.com/-kg05jQ03Fnw/Xkq5Qing\_qI/AAAAAAAAisk/GYK8MuCKqKUalqh3DHGWVRoyDlAQaxUrwCLcBGAsYHQ/s1600/2.png?w=687\&ssl=1)
### **Manipulando al usuario**
El siguiente paso lógico es manipular al usuario para que haga clic en la aplicación. Al estar en la misma red que el objetivo, nuestro escáner falso aparecerá en su explorador. Aquí es donde entra en juego UPnP. La herramienta Evil SSDP crea este escáner con apariencia genuina en el sistema del objetivo sin ningún tipo de interacción forzada con el mismo.
![](https://i1.wp.com/1.bp.blogspot.com/-\_05xXp10Buk/Xkq5Qz4yosI/AAAAAAAAiso/HdHr0qJ59rkR2ur\_UYcrHMdf93uqMhXUwCLcBGAsYHQ/s1600/3.png?w=687\&ssl=1)
Al hacer clic en el icono dentro del Explorador, seremos redirigidos al navegador web predeterminado, abriendo nuestro enlace alojado. Aquí entran en juego las plantillas que utilizamos. El usuario ahora es consciente de que está conectado a un escáner genuino o a un dispositivo UPnP falso que hemos generado. El objetivo, sin saberlo y sin tener ninguna pista, introduce las credenciales válidas en esta plantilla, como se muestra en la imagen que se muestra a continuación.
![](https://i2.wp.com/1.bp.blogspot.com/-lp2DBNRl12A/Xkq5RBtGvgI/AAAAAAAAiss/G9jSOVdBO4wnRKixpXlbj6BJeCTBWz7cACLcBGAsYHQ/s1600/4.png?w=687\&ssl=1)
### **Obteniendo las credenciales**
Tan pronto como el usuario objetivo introduce las credenciales, comprobamos nuestra terminal en la máquina del atacante para encontrar que tenemos las credenciales introducidas por el usuario. Como no se requiere conversación para cada dispositivo objetivo, nuestro escáner falso es visible para cada usuario en la red. Esto significa que el alcance de este tipo de ataque es ilimitado.
![](https://i1.wp.com/1.bp.blogspot.com/-RAI02igc4F4/Xkq5RSJ3j2I/AAAAAAAAisw/p47jd\_jyyAE3RQIpms6nd-TzsPygD4CXQCLcBGAsYHQ/s1600/5.png?w=687\&ssl=1)
## **Suplantando SSDP de Office365**
En la práctica anterior, suplantamos el escáner al usuario objetivo. Ahora, al revisar el directorio de plantillas, encontramos la plantilla de Office365. Vamos a usarla.
### **Configuración de la plantilla**
Como hicimos anteriormente, comencemos con la configuración de la plantilla y la herramienta. Vamos a usar python3 para ejecutar la herramienta seguido del nombre del archivo de python. Luego proporcionaremos la interfaz de red que será seguida por el parámetro de plantilla con office365.
```bash
python3 evil-ssdp.py eth0 --template office365
```
![](https://i1.wp.com/1.bp.blogspot.com/-8GWxmKPDkIo/Xkq5RmgF8\_I/AAAAAAAAis0/bxVTcd4aBCUZBEDuUIg3-G39aMu7l5YCgCLcBGAsYHQ/s1600/6.png?w=687\&ssl=1)
Como podemos ver, la herramienta ha hecho su trabajo y ha alojado múltiples archivos de plantilla en nuestra máquina atacante en el puerto 8888.
### **Manipulando al usuario**
Tan pronto como ejecutamos la herramienta, tenemos un dispositivo UPnP llamado Office365 Backups. Esto fue hecho por la herramienta sin tener que enviar ningún archivo, carga útil o cualquier otro tipo de interacción al usuario objetivo. Todo lo que queda es que el usuario haga clic en el icono.
![](https://i0.wp.com/1.bp.blogspot.com/-txqBOw02D6w/Xkq5RgolUcI/AAAAAAAAis4/wkQTzYBmtdU\_Nbq9X1qI47FlJtdqHvIjQCLcBGAsYHQ/s1600/7.png?w=687\&ssl=1)
Al hacer clic en el usuario objetivo, se redirige a nuestra página de plantilla falsa a través de su navegador predeterminado. Esta es una página de Microsoft que parece muy genuina. El usuario desprevenido ingresa sus credenciales válidas en esta página.
![](https://i1.wp.com/1.bp.blogspot.com/-69Tf3PRpvhM/Xkq5RziDXzI/AAAAAAAAis8/vjejKgh0XigRHFC2Ib8QCpPlzx\_RAu4eACLcBGAsYHQ/s1600/8.png?w=687\&ssl=1)
### **Obteniendo las credenciales**
Tan pronto como el usuario ingresa las credenciales y se pasan como solicitud POST al servidor, que es nuestra máquina objetivo, vemos que en nuestra terminal, tenemos las credenciales.
![](https://i0.wp.com/1.bp.blogspot.com/-3KXN6DKT\_E0/Xkq5SEwhKHI/AAAAAAAAitA/a2gTi5UwNE0JsMH-XQEW33MchkxgjPGSwCLcBGAsYHQ/s1600/9.png?w=687\&ssl=1)
## **Desviando al usuario a un SSDP de bóveda de contraseñas**
Hasta ahora, hemos falsificado con éxito al usuario objetivo para obtener algunas credenciales de escaneo y algunas credenciales de respaldo de Office365. Pero ahora vamos por lo más importante que se usa como UPnP, la Bóveda de Contraseñas.
### **Configuración de plantilla**
Como hicimos en nuestras prácticas anteriores, tendremos que configurar la plantilla para la bóveda de contraseñas. En poco tiempo, la herramienta aloja la plantilla de la bóveda de contraseñas en el puerto 8888.
```bash
python3 evil-ssdp.py eth0 --template password-vault
```
### **Manipulando al usuario**
Pasando a la máquina objetivo, vemos que el Password Vault UPnP es visible en el Explorador. Ahora, el usuario hace clic en el dispositivo y queda atrapado en nuestro ataque. Al ver algo como Password Vault, el usuario se sentirá tentado a hacer clic en el icono.
![](https://i2.wp.com/1.bp.blogspot.com/-3oMPYaCZ46k/Xkq5PB4zQ\_I/AAAAAAAAisM/i5C8qZVB8RYWBwAkiKCZbdptIbsnk4CUwCLcBGAsYHQ/s1600/11.png?w=687\&ssl=1)
Mientras el usuario confiado piensa que ha logrado cosas muy importantes con las claves y contraseñas falsas. Esto funciona como una distracción para el usuario, ya que esto llevará al usuario a probar esta exhaustiva lista de credenciales sin éxito.
![](https://i0.wp.com/1.bp.blogspot.com/-SrCMlWIUxCM/Xkq5Pg\_IznI/AAAAAAAAisU/L\_ZIvQKfltkyk9iUCrEGyXCojx5b86uFgCLcBGAsYHQ/s1600/12.png?w=687\&ssl=1)
## **Suplantando Microsoft Azure SSDP**
Al trabajar con Suplantación, una de las tareas más importantes es no dejar que el usuario objetivo sepa que ha sido víctima de Suplantación. Esto se puede lograr redirigiendo al usuario después de que el atacante haya obtenido las credenciales o cookies o cualquier cosa que el atacante quisiera adquirir. La herramienta evil\_ssdp tiene un parámetro (-u) que redirige al usuario objetivo a cualquier URL de elección del atacante. Veamos el funcionamiento de este parámetro en acción.
Para empezar, usaremos python3 para cargar la herramienta. A continuación, mencionamos la Interfaz de Red que se debe utilizar. Ahora, para esta práctica, usaremos la Plantilla de Almacenamiento de Microsoft Azure. Después de seleccionar la plantilla, ponemos el parámetro (-u) y luego mencionamos cualquier URL donde queramos redirigir al usuario. Aquí estamos usando el enlace oficial de Microsoft. Pero esto puede ser cualquier sitio malicioso.
```bash
python3 evil-ssdp.py eth0 --template microsoft-azure -u https://malicous-site.com
```
### **Manipulando al usuario**
Ahora que hemos iniciado la herramienta, creará un dispositivo UPnP en la máquina objetivo como se muestra en la imagen a continuación. Para que el ataque tenga éxito, el objetivo debe hacer clic en el dispositivo.
![](https://i1.wp.com/1.bp.blogspot.com/-rROTfEGP3z8/Xkq5QBn46dI/AAAAAAAAisc/7RDv7fI3BPYt1XmrKVRKOEHurkGY1xeogCLcBGAsYHQ/s1600/14.png?w=687\&ssl=1)
Después de hacer clic en el icono, vemos que el usuario es redirigido a la página oficial de Microsoft. Esto puede ser lo que el atacante quiera que sea.
![](https://i2.wp.com/1.bp.blogspot.com/-gU36s2kyIbg/Xkq5QVRh61I/AAAAAAAAisg/hN3uVMTPh-suDiH5ID3-mWcQiNvDVYeJACLcBGAsYHQ/s1600/15.png?w=687\&ssl=1)
Esto concluye nuestra práctica de esta increíble herramienta de suplantación.
## **Mitigación**
* Desactivar los dispositivos UPnP.
* Educar a los usuarios para prevenir ataques de phishing.
* Monitorear la red para el viaje de contraseñas en texto claro.
<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>