MQTT
MQTT 代表 MQ 遥测传输。它是物联网 (IoT) 的 OASIS 标准消息传递协议。按照设计,它是一种极其轻量级的发布/订阅消息传输。这一特性使其成为连接具有小代码足迹和最小网络带宽的远程设备的理想选择。
该协议是一组定义物联网设备如何通过互联网进行通信的规则。它是一个事件驱动的协议,将设备与发布者/订阅者模型连接起来。
话题
主题是一个 UTF-8 字符串,代理使用它来过滤每个连接的客户端的消息。主题由多个主题级别组成,由正斜杠/表示主题的深度分隔。
发布者和订阅者通过这些主题进行通信,并且两者也相互分离。
以美元符号 $ 开头的主题具有特殊含义。因此,这些是为经纪人的内部统计保留的。
经纪人
MQTT 代理处理发布者和订阅者之间的连接。它过滤所有传入的消息并将它们正确地分发给订阅者。
测试 MQTT
我们将遍历多个实验室以获得更好的理解。
注意:这些实验室需要有效的 Pentester Academy 订阅
经纪人侦察和指纹识别
在这个挑战中,我们将进行基本的 MQTT 服务器侦察。MQTT 服务运行的默认端口是 1883,它的安全版本在端口 8883 上运行。
实验室环境有如下拓扑
我们需要枚举目标以读取主题值并回答问题。
运行实验室,您将获得启动实验室的专用环境。导航到该链接会为您提供一个具有 root 权限的 Kali 实例。
- MQTT 是否在服务器上运行?如果是,MQTT over TLS 的端口是什么?
目标 IP 是 192.158.97.3,所以我们将在其上运行 nmap,如下所示
没有找到开放端口,因此没有 MQTT。这是因为 nmap 默认会查找前 1000 个端口,而 MQTT 端口 1883 不在前 1000 个中。所以我们需要扫描所有端口或在 nmap 扫描命令中显式指定端口 1883/8883,如下所示
很明显,MQTT 服务已启动并在不安全 (1883) 和安全 (8883) 端口上运行。
- MQTT 服务器的名称和版本是什么?
为了进一步列举,我们检查 mosquitto(MQTT 的代理)的版本,如下所示
MQTT 与代理 mosquitto 版本 1.4.15 一起运行。
使用 NMAP 脚本可以使用什么命令来枚举 MQTT 服务器?
现在我们使用 nmap 默认脚本进行枚举,如下所示
具有最新有效负载的主题已经在 nmap 扫描的输出中。有许多保留(以 $ 开头)以及带有一些有趣有效负载的自定义主题。
为主题“工业”设置的欢迎信息是什么?
我们可以使用多种工具来读取主题值。在 nmap 输出中,我们可以看到主题(工业)有效载荷,如下所示
但是我们将使用一个工具 mosquitto_sub。它的用途是订阅一个主题并实时监听主题的有效载荷。我们可以阅读该主题的欢迎信息,如下所示
- -t 标志指定我们要订阅的主题
- -h 标志指定目标主机
传感器正在使用哪个主题来发布其更新?
我们不能确定要订阅哪个主题才能获得主题名称。我们有一个由哈希符号 # 表示的多级通配符,基本上如果订阅,它会接收发送到 MQTT 代理的所有消息。因此,它为我们提供了所有主题及其有效负载。所以我们找到sensor使用的topic如下图
使用的主题是传感器
会话密钥会定期在主题上发布。两个连续会话密钥出现之间的大约时间段是多少?
会话密钥发布时间不可用。但是,我们可以注意到同一主题的连续发布之间的时间延迟。从输出中可以清楚地看到,主题每 30 秒更新一次。因此,两个连续会话密钥出现之间的大约时间间隔也是 30 秒。
将文件 /etc/passwd 的内容发布到主题“机密”的命令是什么?
因为 mosquitto_sub 的用途是订阅一个主题。同样,mosquitto_pub 的用法是将有效负载发布到主题。我们可以向主题发布任何有效负载值。所以我们将文件内容发布到新主题机密如下图
为了更好地查看发布的实时结果,我们可以订阅多级通配符来监听发送到 MQTT 代理的所有消息。所以先订阅#然后运行上面的命令进行发布,我们就能看到实时发布如下图
本文由 华域联盟 原创撰写:华域联盟 » 渗透物联网协议 MQTT
转载请保留出处和原文链接:https://www.cnhackhy.com/157360.htm