1883 - Pentesting MQTT (Mosquitto)
Last updated
Last updated
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
MQ Telemetry Transport (MQTT) 被称为 发布/订阅消息协议,以其极端的简单性和轻量性而著称。该协议专门为设备能力有限且在带宽低、高延迟或不可靠连接的网络上运行的环境量身定制。MQTT的核心目标包括最小化网络带宽的使用和减少对设备资源的需求。此外,它旨在保持可靠的通信并提供一定程度的交付保证。这些目标使得MQTT特别适合于蓬勃发展的 机器对机器 (M2M) 通信 和 物联网 (IoT) 领域,在这些领域中,高效连接大量设备至关重要。此外,MQTT对移动应用程序也非常有利,因为节省带宽和电池寿命至关重要。
默认端口: 1883
当 MQTT 代理收到 CONNECT 数据包时,会发送回 CONNACK 数据包。该数据包包含一个返回代码,这对于理解连接状态至关重要。返回代码 0x00 表示凭据已被接受,标志着连接成功。另一方面,返回代码 0x05 表示凭据无效,从而阻止连接。
例如,如果代理因凭据无效而拒绝连接,则场景将如下所示:
身份验证是完全可选的,即使进行身份验证,默认情况下不使用加密(凭据以明文发送)。仍然可以执行 MITM 攻击以窃取密码。
要连接到 MQTT 服务,您可以使用:https://github.com/bapowell/python-mqtt-client-shell 并通过以下方式订阅所有主题:
您还可以使用 https://github.com/akamai-threat-research/mqtt-pwn
您还可以使用:
或者你可以运行这段代码尝试连接到一个没有身份验证的MQTT服务,订阅所有主题并监听它们:
来自这里: https://morphuslabs.com/hacking-the-iot-with-mqtt-8edaf0d07b9b
发布/订阅模型由以下部分组成:
发布者:向代理中的一个(或多个)主题发布消息。
订阅者:订阅代理中的一个(或多个)主题,并接收来自发布者的所有消息。
代理:将所有消息从发布者路由到订阅者。
主题:由一个或多个级别组成,级别之间用斜杠分隔(例如,/smartshouse/livingroom/temperature)。
每个MQTT数据包包含一个固定头(图02)。图02:固定头
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
学习和实践AWS黑客技术:HackTricks培训AWS红队专家(ARTE) 学习和实践GCP黑客技术:HackTricks培训GCP红队专家(GRTE)