MQTT 协议安全测试方法

  1. MQTT 协议
  2. 探测发现
    1. 网络空间引擎
      1. Shodan
      2. FOFA
      3. ZoomEye
      4. Censys
    2. 工具
      1. Nmap
      2. MQTTX
      3. Mosquitto 客户端
  3. 测试方法
    1. 未授权订阅
    2. 凭据与 ACL
  4. 参考

MQTT 协议

默认端口:1883(mqtt)、8883(mqtt-tls)


探测发现

网络空间引擎

Shodan

product:”MQTT”

FOFA

protocol=”mqtt”
protocol=”mqtt-ssl”

ZoomEye

service=”mqtt”

Censys

host.services.protocol = “MQTT”(免费用户不可用)

工具

Nmap

官网 Github

nmap <主机> -p1883 --script mqtt-subscribe \
  --script-args mqtt-subscribe.listen-msgs=1

mqtt-subscribe 会建立 MQTT 连接并订阅主题。mqtt-subscribe.listen-msgs=1 表示收到一条 PUBLISH 后结束。

MQTTX

官网

MQTTX 可直接查看 CONNECTSUBSCRIBEPUBLISH 的返回码,用于比较匿名连接与不同 ACL 账号的行为。

Mosquitto 客户端

使用命令行复核单个主题:

mosquitto_sub -h <主机> -p 1883 -t '<测试主题>' -C 1 -W 5

-C 1 在收到一条消息后退出,-W 5 设置五秒超时。--insecure 会跳过 TLS 证书主机名校验。


测试方法

未授权订阅

可以使用 Nmap 脚本做最小验证:

nmap <主机> -p1883 --script mqtt-subscribe \
  --script-args mqtt-subscribe.listen-msgs=1

如不存在未授权订阅结果为

PORT     STATE SERVICE
1883/tcp open  mqtt
|_mqtt-subscribe: Connection rejected: Not Authorized

存在未授权订阅则会显示

PORT     STATE SERVICE
1883/tcp open  xxx version x.x.x
| mqtt-subscribe:  
|   Topics and their most recent payloads:
|    ……
|_ ……

如:

MQTT 匿名访问探测的 Nmap 扫描结果

CONNECT 成功只表示 Broker 接受会话;匿名客户端收到非公开主题的 retained message 或实时 PUBLISH,才说明订阅 ACL 未生效。

凭据与 ACL

认证与 ACL 分开测试。认证阶段比较匿名、错误凭据和有效凭据的 CONNACK;ACL 阶段固定账号,分别测试精确主题、单层通配符 +、多层通配符 # 以及发布权限。

# 精确主题
mosquitto_sub -h <主机> -u '<用户名>' -P '<密码>' \
  -t 'factory/line-1/status' -C 1 -W 5 -d

# 多层通配符
mosquitto_sub -h <主机> -u '<用户名>' -P '<密码>' \
  -t 'factory/#' -C 1 -W 5 -d

# 发布权限
mosquitto_pub -h <主机> -u '<用户名>' -P '<密码>' \
  -t 'factory/line-1/test' -m 'acl-check' -q 1 -d

MQTT 3.1.1 常见拒绝结果为 CONNACK 0x05 Not authorized 或失败的 SUBACK;MQTT 5.0 对应 Reason Code 0x87 Not authorized。Broker 也可能直接断开连接,因此需要结合报文和服务端日志判断。


参考

mqtt-subscribe NSE script
Eclipse Mosquitto command line utilities
MQTT Version 5.0 — OASIS Standard


转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。

文章标题:MQTT 协议安全测试方法

字数:562

本文作者:

发布时间:2025-07-31, 06:22:00

最后更新:2026-08-26, 21:18:00

原始链接:https://cnlnn.pages.dev/posts/mqtt-security-testing/

版权声明: "署名-非商用-相同方式共享 4.0" 转载请保留原文链接及作者。