什么是MQTT?MQTT是一种轻量级的物联网通信协议,基于发布-订阅模式,广泛用于设备与设备之间的实时通信。MQTT Broker是消息的中心枢纽,负责接收、存储和分发消息。
MQTT未授权访问的风险:
-
- 数据泄露
:攻击者可能订阅敏感主题,获取不应公开的信息。 - 消息伪造
:攻击者可能发布虚假消息,干扰设备的正常运行。 - 拒绝服务(DoS)
:攻击者可能发送大量垃圾消息,占用网络带宽或耗尽Broker资源。 - 设备控制
:攻击者可能通过发布控制命令,远程控制设备。
- 数据泄露
from rich import print from rich.panel import Panel from rich.text import Text panel = Panel(Text("大家好,我是丁永博。欢迎关注微信公众号:丁永博的成长日记!", justify="center")) print(panel) import socket import paho.mqtt.client as mqtt from concurrent.futures import ThreadPoolExecutor # 配置参数 PORT = 1883 TIMEOUT = 5 # 超时时间(秒) THREADS = 50 # 并发线程数 def check_mqtt(ip): """检测指定IP是否存在MQTT未授权访问""" try: # 先检查端口是否开放 with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s: s.settimeout(TIMEOUT) if s.connect_ex((ip, PORT)) != 0: return None # 初始化MQTT客户端 client = mqtt.Client() client.connect(ip, PORT, keepalive=TIMEOUT) # 设置回调函数 result = {"status": False} def on_connect(client, userdata, flags, rc): result["status"] = (rc == 0) # 0表示连接成功 client.on_connect = on_connect client.loop_start() client.loop_stop() return ip if result["status"] else None except (mqtt.WebsocketConnectionError, ConnectionRefusedError, TimeoutError): return None except Exception as e: print(f"检测{ip}时发生异常:{str(e)}") return None def main(): # 读取目标IP列表 try: with open("1.txt", "r") as f: ips = [line.strip() for line in f if line.strip()] except FileNotFoundError: print("错误:1.txt文件不存在!") return # 使用线程池并发检测 vulnerable = [] with ThreadPoolExecutor(max_workers=THREADS) as executor: results = executor.map(check_mqtt, ips) for ip, status in zip(ips, results): if status: print(f"[+] 发现漏洞:{ip}") vulnerable.append(ip) else: print(f"[-] 安全:{ip}") # 保存结果 if vulnerable: with open("2.txt", "w") as f: f.write("\n".join(vulnerable)) print(f"发现{len(vulnerable)}个漏洞,结果已保存到2.txt") else: print("未发现MQTT未授权访问漏洞") if __name__ == "__main__": # 检查依赖库 try: import paho.mqtt except ImportError: print("请先安装paho-mqtt:pip install paho-mqtt") exit(1) main()
使用方法:
- 安装依赖:
pip install paho-mqtt
- 安装依赖:pip install rich
- 创建目标文件:
1.txt
(每行一个IP地址) - 运行脚本:
python 3.py
- 查看结果:
2.txt
(保存存在未授权访问的主机)
注意事项:
- 本工具仅限授权测试使用
- 大规模扫描前建议调整
THREADS
参数(推荐50-100) - 企业内网环境可将
TIMEOUT
缩短至2秒 - 敏感环境建议配合代理池使用
原文始发于微信公众号(丁永博的成长日记):MQTT未授权访问及检测工具
免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论