On-The-Fly: Cómo hackear MQTT con Network Packet Manipulation en 1 minuto
'on-the-fly' es una proyecto del equipo de Ideas Locas que ofrece capacidades para realizar pruebas de pentesting en varios dominios (IoT, ICS & TI). Se trata de una herramienta innovadora al unir diferentes mundos que comparten un factor común: la red. Es Open Source, por lo que te animamos a participar activamente en el proyecto que puedes encontrar en su GitHub.
![]() |
Figura 3: Libro de Ethical Hacking 2ª Edición de Pablo González en 0xWord |
- Un broker MQTT que se encargue de hacer llegar los mensajes entre los diferentes clientes.
- Dos clientes MQTT, uno que publicará el mensaje (que se manipulará en el aire) y otro cliente que esté suscrito al topic que recibirá el mensaje.
- Una máquina con Kali Linux y herramienta ‘on-the-fly’ preparada.
- El módulo de manipulación MQTT preparado y lanzado.
Montaje del broker
Para poner en marcha el broker de manera rápida puedes hacer uso de Docker con una imagen de mosquitto (puedes encontrarla en el Docker Hub):
$ docker run -it -p 1883:1883 -p 9001:9001
-v mosquitto.conf:/mosquitto/config/mosquitto.conf eclipse-mosquitto
Debes tener en cuenta que tienes que tener un fichero de configuración. En el ejemplo, mosquitto.conf se encuentra en local y se montará sobre la ruta /mosquitto/config/mosquitto.conf del contenedor. En el repositorio de GitHub de mosquitto puedes encontrar un ejemplo de configuración, además de tener la documentación oficial en el sitio web de mosquitto donde se explica con detalle cada uno de los parámetros de configuración posibles.
![]() |
Figura 4: Libro de Docker:SecDevOps en 0xWord de |
listener 1883listener 9001protocol websockets
Ahora podemos lanzar el contenedor y hacer una prueba de conexión con el broker. Para ello necesitaremos un cliente, por ejemplo MQTTX. MQTTX es un cliente gráfico MQTT, es Open Source bajo una licencia Apache 2.0, y es multiplataforma, por lo que podemos usarlo con los principales sistemas operativos.
Ahora podemos crear una nueva suscripción para estar pendientes de todos los mensajes que se mandan a dicho "topic". Para este ejemplo vamos a suponer que hay una bombilla a la que se le puede cambiar el color cuando se publica sobre el topic ‘bulb/color’.
Con la suscripción creada, vamos a mandar un mensaje con un color, por ejemplo, blue, suponiendo que el dispositivo que estamos ejemplificando espera recibir este mensaje para cambiar su color.
Al mandar y recibir el mensaje en el mismo cliente lo vemos como si fuera una conversación: a la derecha los mensajes enviados y a la izquierda los mensajes que se reciben. En ambos casos aparece el topic donde se ha mandado/recibido.
MQTT Packet Manipulation PoC
Ahora que ya sabemos como funciona el protocolo MQTT, vamos a hacer uso del nuevo módulo de 'on-the-fly' para manipular estos paquetes en el aire.
Para empezar necesitamos hacer que el tráfico de una máquina víctima pase a través de nosotros, por lo que comenzamos haciendo uso del módulo arp_spoof, o cualquiera de las técnicas que se explican en el libro de Ataques en redes de datos IPv4&IPv6 (4ª Edición).
load modules/spoof/arp_spoof
En el ejemplo, conocemos la dirección IP de la víctima y del su puerta de enlace - "gateway" -, por lo que lo configuramos con el uso del comando set y lo ejecutamos con run.
Con el ARP Spoofing en ejecución, cargamos el módulo de manipulación MQTT:
load modules/manipulation/mqtt_manipulation
Para este módulo hay que configurar dos parámetros:
- mqtt_topic_modify: este valor indica el topic que se quiere escuchar para manipular su mensaje.
- msg_spoof: este valor representa el nuevo mensaje que se quiere asignar.
Por último, realizamos la prueba de funcionamiento. Nos dirigimos a la máquina víctima y realizamos la publicación de un nuevo color.
Si todo ha ido bien podremos observar que, aunque el mensaje que ha salido del cliente es correcto, la recepción que llega a la suscripción es el modificado por 'on-the-fly', por lo que hemos conseguido manipular el tráfico MQTT en tiempo real. En el siguiente video puedes ver la demostración completa del ejemplo.
Como ves, este módulo de manipulación de paquetes MQTT hace muy sencillo poder jugar con este protocolo, y propone otro caso de uso para un entorno IoT donde 'on-the-fly' tiene ya varios módulos disponibles.
![]() |
Figura 14: Pentesting con Kali Silver Edition |