1883 - Pentesting MQTT (Mosquitto)
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Learn & practice GCP Hacking:
HackTricks Training GCP Red Team Expert (GRTE)
Basic Information
MQ Telemetry Transport (MQTT) é conhecido como um protocolo de mensagens publish/subscribe que se destaca por sua extrema simplicidade e leveza. Este protocolo é especificamente adaptado para ambientes onde os dispositivos têm capacidades limitadas e operam em redes caracterizadas por baixa largura de banda, alta latência ou conexões não confiáveis. Os principais objetivos do MQTT incluem minimizar o uso da largura de banda da rede e reduzir a demanda sobre os recursos do dispositivo. Além disso, visa manter uma comunicação confiável e fornecer um certo nível de garantia de entrega. Esses objetivos tornam o MQTT excepcionalmente adequado para o crescente campo da comunicação máquina-a-máquina (M2M) e da Internet das Coisas (IoT), onde é essencial conectar uma infinidade de dispositivos de forma eficiente. Além disso, o MQTT é altamente benéfico para aplicativos móveis, onde conservar largura de banda e vida útil da bateria é crucial.
Default port: 1883
Inspecionando o tráfego
Quando um pacote CONNECT é recebido pelos brokers MQTT, um pacote CONNACK é enviado de volta. Este pacote contém um código de retorno que é crucial para entender o status da conexão. Um código de retorno de 0x00 significa que as credenciais foram aceitas, significando uma conexão bem-sucedida. Por outro lado, um código de retorno de 0x05 sinaliza que as credenciais são inválidas, impedindo assim a conexão.
Por exemplo, se o broker rejeitar a conexão devido a credenciais inválidas, o cenário seria algo assim:
![](https://book.hacktricks.xyz/~gitbook/image?url=https%3A%2F%2F910640767-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FjzQiXe8oFAkPoN0MXcUG%252Fuploads%252Fgit-blob-4f2c9b7583562686a3dc4fc33b54f634b494d704%252Fimage%2520%28976%29.png%3Falt%3Dmedia&width=768&dpr=4&quality=100&sign=16d9f5d2&sv=1)
Pentesting MQTT
A autenticação é totalmente opcional e mesmo que a autenticação esteja sendo realizada, a criptografia não é usada por padrão (as credenciais são enviadas em texto claro). Ataques MITM ainda podem ser executados para roubar senhas.
Para se conectar a um serviço MQTT, você pode usar: https://github.com/bapowell/python-mqtt-client-shell e se inscrever em todos os tópicos fazendo:
Você também pode usar https://github.com/akamai-threat-research/mqtt-pwn
Você também pode usar:
Ou você poderia executar este código para tentar se conectar a um serviço MQTT sem autenticação, assinar todos os tópicos e ouvi-los:
Mais informações
a partir daqui: https://morphuslabs.com/hacking-the-iot-with-mqtt-8edaf0d07b9b
O Padrão Publish/Subscribe
O modelo publish/subscribe é composto por:
Publisher: publica uma mensagem em um (ou muitos) tópico(s) no broker.
Subscriber: se inscreve em um (ou muitos) tópico(s) no broker e recebe todas as mensagens enviadas pelo publisher.
Broker: roteia todas as mensagens dos publishers para os subscribers.
Topic: consiste em um ou mais níveis que são separados por uma barra (por exemplo, /smartshouse/livingroom/temperature).
Formato do Pacote
Cada pacote MQTT contém um cabeçalho fixo (Figura 02). Figura 02: Cabeçalho Fixo
![](https://book.hacktricks.xyz/~gitbook/image?url=https%3A%2F%2Fmiro.medium.com%2Fmax%2F838%2F1*k6RkAHEk0576geQGUcKSTA.png&width=768&dpr=4&quality=100&sign=442a4199&sv=1)
Tipos de Pacote
CONNECT (1): Iniciado pelo cliente para solicitar uma conexão ao servidor.
CONNACK (2): O reconhecimento do servidor de uma conexão bem-sucedida.
PUBLISH (3): Usado para enviar uma mensagem do cliente para o servidor ou vice-versa.
PUBACK (4): Reconhecimento de um pacote PUBLISH.
PUBREC (5): Parte de um protocolo de entrega de mensagens que garante que a mensagem seja recebida.
PUBREL (6): Garantia adicional na entrega da mensagem, indicando a liberação de uma mensagem.
PUBCOMP (7): Parte final do protocolo de entrega de mensagens, indicando conclusão.
SUBSCRIBE (8): Um pedido do cliente para escutar mensagens de um tópico.
SUBACK (9): O reconhecimento do servidor de um pedido SUBSCRIBE.
UNSUBSCRIBE (10): Um pedido do cliente para parar de receber mensagens de um tópico.
UNSUBACK (11): A resposta do servidor a um pedido UNSUBSCRIBE.
PINGREQ (12): Uma mensagem de heartbeat enviada pelo cliente.
PINGRESP (13): Resposta do servidor à mensagem de heartbeat.
DISCONNECT (14): Iniciado pelo cliente para encerrar a conexão.
Dois valores, 0 e 15, são marcados como reservados e seu uso é proibido.
Shodan
port:1883 MQTT
Aprenda e pratique Hacking AWS:HackTricks Training AWS Red Team Expert (ARTE)
Aprenda e pratique Hacking GCP:
HackTricks Training GCP Red Team Expert (GRTE)
Last updated