拿到泄露的 MQTT 密钥怎么用:从连接到具体危害

你在 GitHub 挖到了一个 .env,或者在日志里翻到了一串配置:

1
2
3
4
5
MQTT_HOST=mqtt.example.com
MQTT_PORT=1883
MQTT_USER=device_admin
MQTT_PASS=Admin123!
MQTT_CLIENT=device-999

不知道怎么用?本文给最直接的步骤。

本文只讨论授权环境下的测试思路,目标是验证访问控制是否正确,而非追求对真实系统的破坏性操作。

先搞懂什么是 MQTT,为什么拿到这串东西很关键

MQTT 是物联网、车联网、即时通信后台最常用的消息协议之一:发布者和订阅者不直接对话,所有消息全靠 broker(消息代理)中转。你发一条到 cmd/device-001/reboot,订阅了这个 topic 的所有设备都会收到。

协议本身只负责”把消息投递给订阅者”,完全不管”谁可以连、谁可以看、谁可以发”——认证和授权全靠 broker 配置。

大量部署默认开了弱配置:

  • 允许匿名连接
  • 连上就能订阅 # 看全部
  • 连上就能给任意 topic 发指令
  • 明文 1883 传输
  • retain 消息持久化

这意味着你手里这串东西,很可能不是”只能连一下”,而是”能读全部数据、能发控制指令”。

第一步:用 MQTTX 连上去

MQTTX 是跨平台图形化客户端,拿着泄露信息连最快。

  1. 去 EMQX/MQTTX releases 下载安装并打开。
  2. 点击左侧菜单栏的 + 按钮(或右侧的”新建连接”):
    mqttx-create
  3. 填写连接信息:
    • Broker 信息:Host 前选 mqtt://(明文 1883)或 mqtts://(TLS 8883),填地址和端口。Client ID 用泄露的,或点刷新生成新的:
      mqttx-brokerinfo
    • 用户认证:填入泄露的 Username 和 Password:
      mqttx-user
    • SSL/TLS:如果是 8883 且自签名,切到 SSL/TLS 标签,勾”Enable SSL/TLS”,选”Self signed”或勾”Skip server certificate verification”:
      mqttx-certs
  4. 点右上角”Connect”。

连接成功后界面右上角变绿,显示”Connected”。

第二步:订阅 #,看能拿到什么数据

连接成功后第一个要做的:订阅 #。

# 是多层通配符,等于订阅 broker 上所有非 $ 开头的主题——你可以看到所有正在流动的消息,以及没人发也推过来的 retained 消息(broker 保存的最后一条历史快照)。

在 MQTTX 里订阅:

  1. 点击左下角的 New Subscription 按钮:
    mqttx-topic
  2. Topic 填 #,QoS 选 0 或 1
  3. 点”Confirm”

右侧消息列表会开始刷,你会看到:

  • 设备遥测(温度、湿度、电量、GPS)
  • 设备状态(在线/离线、故障码)
  • 配置下发(WiFi 账号密码、时区设置)
  • OTA 固件更新(下载 URL、版本号)
  • 业务数据(聊天内容、订单、用户操作)

除了 #,还要试 $SYS/#,这是 broker 自身的系统主题,会暴露版本、连接数、上线/下线事件。

如果 # 数据量太大,用单层通配符 + 缩小范围:device/+/status、+/event/#。

这一步只看不动:截图保存样本、记录 broker 版本、理解业务逻辑和命令格式。

第三步:发布测试,看写权限能造成什么危害

有了前面的 topic 理解,这一步验证写权限存在,以及写权限对应的具体危害。

在 MQTTX 里发布:

  1. 在页面右下角填入你观察到的命令 Topic,选 QoS 和 Retain,输入 payload 后点发送:
    mqttx-message
  2. Topic 填你看到的命令主题,例如 cmd/device-001/reboot、config/device-001/set、ota/device-001/firmware
  3. Payload 按你看到的格式填测试 payload,例如 {"cmd":"reboot","from":"test"}
  4. Retain 勾上(勾了之后,broker 会保存这条消息,后续每个新订阅者/重连设备都会收到)
  5. 点发送(macOS command + enter,其他系统 control + enter)

发布后看:

  • 你自己的订阅列表里有没有收到(说明 topic 匹配、写权限存在)
  • topic 的 retained 消息是不是被覆盖了

高频利用点(授权测试仅验证权限存在,不实际执行破坏性操作):

  • 任意命令发布:直接控制设备(开关、重启、配置修改)
  • retain 投毒持久化:勾 retain 发布恶意配置/OTA URL,后续所有新上线的设备都会收到
  • 伪装设备/客户端:伪造设备状态、上报假数据、干扰监控系统

发布测试要克制:优先用无害 topic(例如 test/pentest、ping/pong)和明确的测试 payload,确认写权限存在即可。

总结

拿到泄露的 MQTT 密钥后,最直接的利用三步:用 MQTTX 连上去→订阅 # 看真实数据→发布测试验证控制能力。

泄露后最直接最具体的危害:拿到设备位置和遥测、拿到配置和固件 URL、能控制设备、能投毒持久化指令。

上一篇
下一篇