hacktricks/network-services-pentesting/1883-pentesting-mqtt-mosquitto.md

13 KiB

1883 - Pentesting MQTT (Mosquitto)

{% hint style="success" %} Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)

Support HackTricks
{% endhint %}

Basic Information

MQ Telemetry Transport (MQTT) рдХреЛ publish/subscribe messaging protocol рдХреЗ рд░реВрдк рдореЗрдВ рдЬрд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬреЛ рдЕрдкрдиреА рдЕрддреНрдпрдзрд┐рдХ рд╕рд░рд▓рддрд╛ рдФрд░ рд╣рд▓реНрдХреЗрдкрди рдХреЗ рд▓рд┐рдП рдкреНрд░рд╕рд┐рджреНрдз рд╣реИред рдпрд╣ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдЙрди рд╡рд╛рддрд╛рд╡рд░рдгреЛрдВ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдЬрд╣рд╛рдВ рдЙрдкрдХрд░рдгреЛрдВ рдХреА рд╕реАрдорд┐рдд рдХреНрд╖рдорддрд╛рдПрдБ рд╣реЛрддреА рд╣реИрдВ рдФрд░ рдиреЗрдЯрд╡рд░реНрдХ рдРрд╕реЗ рд╣реЛрддреЗ рд╣реИрдВ рдЬреЛ рдХрдо рдмреИрдВрдбрд╡рд┐рдбреНрде, рдЙрдЪреНрдЪ рд╡рд┐рд▓рдВрдмрддрд╛, рдпрд╛ рдЕрд╕реНрдерд┐рд░ рдХрдиреЗрдХреНрд╢рдиреЛрдВ рдХреА рд╡рд┐рд╢реЗрд╖рддрд╛ рд░рдЦрддреЗ рд╣реИрдВред MQTT рдХреЗ рдореБрдЦреНрдп рдЙрджреНрджреЗрд╢реНрдпреЛрдВ рдореЗрдВ рдиреЗрдЯрд╡рд░реНрдХ рдмреИрдВрдбрд╡рд┐рдбреНрде рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЛ рдиреНрдпреВрдирддрдо рдХрд░рдирд╛ рдФрд░ рдЙрдкрдХрд░рдг рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдкрд░ рдорд╛рдВрдЧ рдХреЛ рдХрдо рдХрд░рдирд╛ рд╢рд╛рдорд┐рд▓ рд╣реИред рдЗрд╕рдХреЗ рдЕрддрд┐рд░рд┐рдХреНрдд, рдЗрд╕рдХрд╛ рдЙрджреНрджреЗрд╢реНрдп рд╡рд┐рд╢реНрд╡рд╕рдиреАрдп рд╕рдВрдЪрд╛рд░ рдмрдирд╛рдП рд░рдЦрдирд╛ рдФрд░ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рд╕реНрддрд░ рдХреА рдбрд┐рд▓реАрд╡рд░реА рдЖрд╢реНрд╡рд╛рд╕рди рдкреНрд░рджрд╛рди рдХрд░рдирд╛ рд╣реИред рдпреЗ рд▓рдХреНрд╖реНрдп MQTT рдХреЛ machine-to-machine (M2M) communication рдФрд░ Internet of Things (IoT) рдХреЗ рдЙрднрд░рддреЗ рдХреНрд╖реЗрддреНрд░ рдХреЗ рд▓рд┐рдП рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдЙрдкрдпреБрдХреНрдд рдмрдирд╛рддреЗ рд╣реИрдВ, рдЬрд╣рд╛рдВ рдХрдИ рдЙрдкрдХрд░рдгреЛрдВ рдХреЛ рдХреБрд╢рд▓рддрд╛ рд╕реЗ рдЬреЛрдбрд╝рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, MQTT рдореЛрдмрд╛рдЗрд▓ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдЕрддреНрдпрдзрд┐рдХ рд▓рд╛рднрдХрд╛рд░реА рд╣реИ, рдЬрд╣рд╛рдВ рдмреИрдВрдбрд╡рд┐рдбреНрде рдФрд░ рдмреИрдЯрд░реА рдЬреАрд╡рди рдХреЛ рдмрдЪрд╛рдирд╛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИред

Default port: 1883

PORT     STATE SERVICE                 REASON
1883/tcp open  mosquitto version 1.4.8 syn-ack

рдЯреНрд░реИрдлрд╝рд┐рдХ рдХрд╛ рдирд┐рд░реАрдХреНрд╖рдг рдХрд░рдирд╛

рдЬрдм MQTT рдмреНрд░реЛрдХрд░ рджреНрд╡рд╛рд░рд╛ рдПрдХ CONNECT рдкреИрдХреЗрдЯ рдкреНрд░рд╛рдкреНрдд рд╣реЛрддрд╛ рд╣реИ, рддреЛ рдПрдХ CONNACK рдкреИрдХреЗрдЯ рд╡рд╛рдкрд╕ рднреЗрдЬрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕ рдкреИрдХреЗрдЯ рдореЗрдВ рдПрдХ рд░рд┐рдЯрд░реНрди рдХреЛрдб рд╣реЛрддрд╛ рд╣реИ рдЬреЛ рдХрдиреЗрдХреНрд╢рди рд╕реНрдерд┐рддрд┐ рдХреЛ рд╕рдордЭрдиреЗ рдХреЗ рд▓рд┐рдП рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИред 0x00 рдХрд╛ рд░рд┐рдЯрд░реНрди рдХреЛрдб рдпрд╣ рджрд░реНрд╢рд╛рддрд╛ рд╣реИ рдХрд┐ рдХреНрд░реЗрдбреЗрдВрд╢рд┐рдпрд▓реНрд╕ рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░ рд▓рд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЬреЛ рд╕рдлрд▓ рдХрдиреЗрдХреНрд╢рди рдХрд╛ рд╕рдВрдХреЗрдд рд╣реИред рджреВрд╕рд░реА рдУрд░, 0x05 рдХрд╛ рд░рд┐рдЯрд░реНрди рдХреЛрдб рдпрд╣ рд╕рдВрдХреЗрдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдХреНрд░реЗрдбреЗрдВрд╢рд┐рдпрд▓реНрд╕ рдЕрдорд╛рдиреНрдп рд╣реИрдВ, рдЬрд┐рд╕рд╕реЗ рдХрдиреЗрдХреНрд╢рди рдХреЛ рд░реЛрдХ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрджрд┐ рдмреНрд░реЛрдХрд░ рдЕрдорд╛рдиреНрдп рдХреНрд░реЗрдбреЗрдВрд╢рд┐рдпрд▓реНрд╕ рдХреЗ рдХрд╛рд░рдг рдХрдиреЗрдХреНрд╢рди рдХреЛ рдЕрд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддрд╛ рд╣реИ, рддреЛ рд╕реНрдерд┐рддрд┐ рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦреЗрдЧреА:

{
"returnCode": "0x05",
"description": "Connection Refused, not authorized"
}

рдмреНрд░реВрдЯ-рдлреЛрд░реНрд╕ MQTT

MQTT рдХрд╛ рдкреЗрдВрдЯреЗрд╕реНрдЯрд┐рдВрдЧ

рдкреНрд░рдорд╛рдгреАрдХрд░рдг рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╡реИрдХрд▓реНрдкрд┐рдХ рд╣реИ рдФрд░ рдпрджрд┐ рдкреНрд░рдорд╛рдгреАрдХрд░рдг рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ, рддреЛ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдПрдиреНрдХреНрд░рд┐рдкреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ (рдХреНрд░реЗрдбреЗрдВрд╢рд┐рдпрд▓реНрд╕ рд╕реНрдкрд╖реНрдЯ рдкрд╛рда рдореЗрдВ рднреЗрдЬреЗ рдЬрд╛рддреЗ рд╣реИрдВ)ред рдкрд╛рд╕рд╡рд░реНрдб рдЪреБрд░рд╛рдиреЗ рдХреЗ рд▓рд┐рдП MITM рд╣рдорд▓реЗ рдЕрднреА рднреА рдХрд┐рдП рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВред

MQTT рд╕реЗрд╡рд╛ рд╕реЗ рдХрдиреЗрдХреНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдк рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ: https://github.com/bapowell/python-mqtt-client-shell рдФрд░ рд╕рднреА рд╡рд┐рд╖рдпреЛрдВ рдХреА рд╕рджрд╕реНрдпрддрд╛ рд▓реЗрдиреЗ рдХреЗ рд▓рд┐рдП:

> connect (NOTICE that you need to indicate before this the params of the connection, by default 127.0.0.1:1883)
> subscribe "#" 1
> subscribe "$SYS/#"

рдЖрдк https://github.com/akamai-threat-research/mqtt-pwn рдХрд╛ рднреА рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рдЖрдк рдЗрд╕рдХрд╛ рднреА рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:

apt-get install mosquitto mosquitto-clients
mosquitto_sub -t 'test/topic' -v #Subscribe to 'test/topic'
mosquitto_sub -h <host-ip> -t "#" -v #Subscribe to ALL topics.

рдпрд╛ рдЖрдк рдпрд╣ рдХреЛрдб рдЪрд▓рд╛ рд╕рдХрддреЗ рд╣реИрдВ рддрд╛рдХрд┐ рдмрд┐рдирд╛ рдкреНрд░рдорд╛рдгреАрдХрд░рдг рдХреЗ MQTT рд╕реЗрд╡рд╛ рд╕реЗ рдХрдиреЗрдХреНрдЯ рдХрд░рдиреЗ, рд╣рд░ рд╡рд┐рд╖рдп рдХреА рд╕рджрд╕реНрдпрддрд╛ рд▓реЗрдиреЗ рдФрд░ рдЙрдиреНрд╣реЗрдВ рд╕реБрдирдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд╕рдХреЗрдВ:

#This is a modified version of https://github.com/Warflop/IOT-MQTT-Exploit/blob/master/mqtt.py
import paho.mqtt.client as mqtt
import time
import os

HOST = "127.0.0.1"
PORT = 1883

def on_connect(client, userdata, flags, rc):
client.subscribe('#', qos=1)
client.subscribe('$SYS/#')

def on_message(client, userdata, message):
print('Topic: %s | QOS: %s  | Message: %s' % (message.topic, message.qos, message.payload))

def main():
client = mqtt.Client()
client.on_connect = on_connect
client.on_message = on_message
client.connect(HOST, PORT)
client.loop_start()
#time.sleep(10)
#client.loop_stop()

if __name__ == "__main__":
main()

рдЕрдзрд┐рдХ рдЬрд╛рдирдХрд╛рд░реА

рдпрд╣рд╛рдВ рд╕реЗ: https://morphuslabs.com/hacking-the-iot-with-mqtt-8edaf0d07b9b

рдкреНрд░рдХрд╛рд╢рд┐рдд/рд╕рджрд╕реНрдпрддрд╛ рдкреИрдЯрд░реНрди

рдкреНрд░рдХрд╛рд╢рд┐рдд/рд╕рджрд╕реНрдпрддрд╛ рдореЙрдбрд▓ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реИрдВ:

  • рдкреНрд░рдХрд╛рд╢рдХ: рдмреНрд░реЛрдХрд░ рдореЗрдВ рдПрдХ (рдпрд╛ рдХрдИ) рд╡рд┐рд╖рдпреЛрдВ рдкрд░ рдПрдХ рд╕рдВрджреЗрд╢ рдкреНрд░рдХрд╛рд╢рд┐рдд рдХрд░рддрд╛ рд╣реИред
  • рд╕рджрд╕реНрдп: рдмреНрд░реЛрдХрд░ рдореЗрдВ рдПрдХ (рдпрд╛ рдХрдИ) рд╡рд┐рд╖рдпреЛрдВ рдХреА рд╕рджрд╕реНрдпрддрд╛ рд▓реЗрддрд╛ рд╣реИ рдФрд░ рдкреНрд░рдХрд╛рд╢рдХ рд╕реЗ рднреЗрдЬреЗ рдЧрдП рд╕рднреА рд╕рдВрджреЗрд╢ рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИред
  • рдмреНрд░реЛрдХрд░: рдкреНрд░рдХрд╛рд╢рдХреЛрдВ рд╕реЗ рд╕рджрд╕реНрдпреЛрдВ рддрдХ рд╕рднреА рд╕рдВрджреЗрд╢реЛрдВ рдХреЛ рд░реВрдЯ рдХрд░рддрд╛ рд╣реИред
  • рд╡рд┐рд╖рдп: рдПрдХ рдпрд╛ рдЕрдзрд┐рдХ рд╕реНрддрд░реЛрдВ рд╕реЗ рдмрдирд╛ рд╣реЛрддрд╛ рд╣реИ рдЬреЛ рдПрдХ рдлреЙрд░рд╡рд░реНрдб рд╕реНрд▓реИрд╢ рджреНрд╡рд╛рд░рд╛ рдЕрд▓рдЧ рд╣реЛрддреЗ рд╣реИрдВ (рдЬреИрд╕реЗ, /smartshouse/livingroom/temperature)ред

рдкреИрдХреЗрдЯ рдкреНрд░рд╛рд░реВрдк

рд╣рд░ MQTT рдкреИрдХреЗрдЯ рдореЗрдВ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рд╣реЗрдбрд░ рд╣реЛрддрд╛ рд╣реИ (рдЪрд┐рддреНрд░ 02)ред рдЪрд┐рддреНрд░ 02: рдирд┐рд╢реНрдЪрд┐рдд рд╣реЗрдбрд░

https://miro.medium.com/max/838/1*k6RkAHEk0576geQGUcKSTA.png

рдкреИрдХреЗрдЯ рдкреНрд░рдХрд╛рд░

  • CONNECT (1): рд╕рд░реНрд╡рд░ рд╕реЗ рдХрдиреЗрдХреНрд╢рди рдХрд╛ рдЕрдиреБрд░реЛрдз рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреНрд▓рд╛рдЗрдВрдЯ рджреНрд╡рд╛рд░рд╛ рдЖрд░рдВрдн рдХрд┐рдпрд╛ рдЧрдпрд╛ред
  • CONNACK (2): рд╕рдлрд▓ рдХрдиреЗрдХреНрд╢рди рдХреА рд╕рд░реНрд╡рд░ рдХреА рд╕реНрд╡реАрдХреГрддрд┐ред
  • PUBLISH (3): рдХреНрд▓рд╛рдЗрдВрдЯ рд╕реЗ рд╕рд░реНрд╡рд░ рдпрд╛ рдЗрд╕рдХреЗ рд╡рд┐рдкрд░реАрдд рд╕рдВрджреЗрд╢ рднреЗрдЬрдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
  • PUBACK (4): PUBLISH рдкреИрдХреЗрдЯ рдХреА рд╕реНрд╡реАрдХреГрддрд┐ред
  • PUBREC (5): рд╕рдВрджреЗрд╢ рд╡рд┐рддрд░рдг рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХрд╛ рдПрдХ рднрд╛рдЧ рдЬреЛ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ рд╕рдВрджреЗрд╢ рдкреНрд░рд╛рдкреНрдд рд╣реБрдЖ рд╣реИред
  • PUBREL (6): рд╕рдВрджреЗрд╢ рд╡рд┐рддрд░рдг рдореЗрдВ рдЖрдЧреЗ рдХреА рд╕реБрдирд┐рд╢реНрдЪрд┐рддрддрд╛, рдПрдХ рд╕рдВрджреЗрд╢ рд░рд┐рд▓реАрдЬ рдХрд╛ рд╕рдВрдХреЗрддред
  • PUBCOMP (7): рд╕рдВрджреЗрд╢ рд╡рд┐рддрд░рдг рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХрд╛ рдЕрдВрддрд┐рдо рднрд╛рдЧ, рдкреВрд░реНрдгрддрд╛ рдХрд╛ рд╕рдВрдХреЗрддред
  • SUBSCRIBE (8): рдПрдХ рдХреНрд▓рд╛рдЗрдВрдЯ рдХрд╛ рд╡рд┐рд╖рдп рд╕реЗ рд╕рдВрджреЗрд╢ рд╕реБрдирдиреЗ рдХрд╛ рдЕрдиреБрд░реЛрдзред
  • SUBACK (9): SUBSCRIBE рдЕрдиреБрд░реЛрдз рдХреА рд╕рд░реНрд╡рд░ рдХреА рд╕реНрд╡реАрдХреГрддрд┐ред
  • UNSUBSCRIBE (10): рдПрдХ рдХреНрд▓рд╛рдЗрдВрдЯ рдХрд╛ рд╡рд┐рд╖рдп рд╕реЗ рд╕рдВрджреЗрд╢ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдмрдВрдж рдХрд░рдиреЗ рдХрд╛ рдЕрдиреБрд░реЛрдзред
  • UNSUBACK (11): UNSUBSCRIBE рдЕрдиреБрд░реЛрдз рдХрд╛ рд╕рд░реНрд╡рд░ рдХрд╛ рдЙрддреНрддрд░ред
  • PINGREQ (12): рдХреНрд▓рд╛рдЗрдВрдЯ рджреНрд╡рд╛рд░рд╛ рднреЗрдЬрд╛ рдЧрдпрд╛ рдПрдХ рд╣рд╛рд░реНрдЯрдмреАрдЯ рд╕рдВрджреЗрд╢ред
  • PINGRESP (13): рд╣рд╛рд░реНрдЯрдмреАрдЯ рд╕рдВрджреЗрд╢ рдХрд╛ рд╕рд░реНрд╡рд░ рдХрд╛ рдЙрддреНрддрд░ред
  • DISCONNECT (14): рдХрдиреЗрдХреНрд╢рди рд╕рдорд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреНрд▓рд╛рдЗрдВрдЯ рджреНрд╡рд╛рд░рд╛ рдЖрд░рдВрдн рдХрд┐рдпрд╛ рдЧрдпрд╛ред
  • рджреЛ рдорд╛рди, 0 рдФрд░ 15, рдЖрд░рдХреНрд╖рд┐рдд рдХреЗ рд░реВрдк рдореЗрдВ рдЪрд┐рд╣реНрдирд┐рдд рд╣реИрдВ рдФрд░ рдЙрдирдХрд╛ рдЙрдкрдпреЛрдЧ рдирд┐рд╖рд┐рджреНрдз рд╣реИред

рд╢реЛрдбрди

  • port:1883 MQTT

{% hint style="success" %} AWS рд╣реИрдХрд┐рдВрдЧ рд╕реАрдЦреЗрдВ рдФрд░ рдЕрднреНрдпрд╛рд╕ рдХрд░реЗрдВ:HackTricks Training AWS Red Team Expert (ARTE)
GCP рд╣реИрдХрд┐рдВрдЧ рд╕реАрдЦреЗрдВ рдФрд░ рдЕрднреНрдпрд╛рд╕ рдХрд░реЗрдВ: HackTricks Training GCP Red Team Expert (GRTE)

HackTricks рдХрд╛ рд╕рдорд░реНрдерди рдХрд░реЗрдВ
{% endhint %}