点击"仙网攻城狮”关注我们哦~
不当想研发的渗透人不是好运维
让我们每天进步一点点
简介
MQTT是基于消息实现了发布者-订阅者模式的协议,其通过Borker其实也就是我们理解的Server来达到一个代理中转的作用,将消息接收并派发给订阅者。
目前物联网发展速度十分迅速,而MQTT在物联网设备的应用场景十分之广
智能家居
温度湿度传感器
健身器材
血压测量仪
位置服务
医疗设备
......
实战
1.工具与渗透环境
MQTT.fx客户端:MQTT.fx 是目前主流的 MQTT 桌面客户端,它支持 Windows、 Mac、Linux 操作系统,可以快速验证是否可与 IoT Cloud 进行连接,并发布或订阅消息。
http://mqttfx.jensd.de/index.php/download
MQTT-PWN:MQTT-PWN打算成为IoT Broker渗透测试和安全评估操作的一站式商店,因为它结合了枚举,支持功能和开发模块,同时将所有这些都打包在命令行界面中。
https://mqtt-pwn.readthedocs.io/en/latest/intro.html#
WEB端口在线连接工具:web端中的mqtt一般通过websockets进行连接,使用mqtt-pwn是无法连接成功的。这里可以通过websockets的客户端进行连接。将发现的mqtt内容填写到工具中即可进行连接。连接成功后可以发布和订阅内容,订阅的topic一般也写在代码中。
http://tools.emqx.io/
2.MQTT服务发现
1、web应用中直接捕获
在浏览目标时我一般会打开Chrome浏览器的开发者调试工具,
通过查看请求信息或者直接搜索mqtt的字样来确定是否使用MQTT的javascript文件。
另外一个就是可以查看websockets请求看是否有进行mqtt的连接操作等。
2、 通过.map文件获取源代码来获取
在实际的过程中可能会遇到只有一个登录页面,
登录页面只有引用mqtt库的js文件,并没有发起请求。
爬虫也无法访问到页面时怎么办呢?
目前的许多网站喜欢使用webpack打包javascript文件,
其中包括了vue开发的站点。在这种情况时,可以试试是否存在.map文件,
一旦在实战中探测到这类文件,那么就可以下载目标网站的javascript的源代码文件。
这里我比较喜欢使用source detecotor来实现。
https://bacde.me/post/unpack-webpack-via-sourcemap/
3、 爆破js文件,从js文件中获取
在上述方法都失效的情况下,还可以通过爆破js文件的路径来尝试获取信息。
观察目标的js存放路径,结合常见的js文件路径生成字典进行探测。
这里列举几个常见js文件名:
mqtt.js、config.js、main.js、mqtt.class.js、app.js、env.js、default.js、index.js、url.js
4、 android应用各种获取配置信息
除web端之外,移动端可以通过反编译apk源代码搜索mqtt等关键字、
查看xml配置文件来发现。除此之外,在研究中发现一些车企的移动端也使用了MQTT,但是他们将内容放在了so文件中,
由于时间关系,本次还没来得及对其进行深入的分析。
以下这个例子就是反编译app源码后,发现嵌入了一些页面文件,其中可以看到mqtt的配置信息。
5、 一些关键字
paho-mqtt/1.0.1/mqttws31.min.js
paho-mqtt.js
mqtt.aliyuncs.com
mqtt.js
iotdevicegateway
TCP 端口:1883
Websocket 端口:8083
TCP/TLS 端口:8883
Websocket/TLS 端口:8084
管理平台端口:18083
3.匿名登录/任意用户密码登录漏洞利用
未配置安全认证的情况下所有设备都可以匿名登录或者使用任意用户密码登录MQTT服务器。
使用MQTT.fx客户端配置目标、生成随机clientID即可匿名登录。
4.未授权消息订阅漏洞利用
当MQTT配置没有配置认证和鉴权等会造成未授权订阅所有节点信息。
连接成功后--输入# 点击subscribe添加一个订阅即可获得所有订阅信息,如用户手机号码、昵称、以及管理员与用户对话内容
5.暴力破解
如果密码较弱可以使用MQTT-PWN中的暴力破解模块直接获取用户密码
git clone https://github.com/akamai-threat-research/mqtt-pwn.gitcd mqtt-pwd //下载
cd mqtt_pwn //进入工具目录
docker-compose up --build --detach //启用容器
docker-compose run cli //启动工具
bruteforce --host 1.1.1.1 --port 1883 //开始暴力破解
6.注意事项
如果mqtt是Websocket类型则需要使用在线工具连接,tcp端口则直接使用MQTT.fx或者MQTT-PWN就行
往期内容
更多资讯长按二维码 关注我们
觉得不错点个“赞”呗