欢迎转发,请勿抄袭
上一期说到EMQX后台插件命令执行,但是这个命令执行结果是无法回显示,那么如何通过暴露的mqtt服务进行利用呢?命令执行容易,后利用很难(出网情况就不用折腾了)。
mqtt是一种轻量级的消息协议,专门用于在低带宽、不可靠网络或双方之间需要进行简单通信的场景下传输消息。用于物联网设备之间通讯。采用发布主题和订阅主题方式通讯。
利用方式一:
使用mqtt协议将命令执行结果通过发布主题形式回显。使用python编写一个mqtt程序,采集执行的结果发布。同时订阅收到的命令执行。编译好的可执行文件,通过插件的方式上传并执行。将执行文件放到my_emqx_plugin/src
并添加以下命令在命令执行处添加执行的命令。
回到emqx后台管理,将刚编译好的插件上传执行,多数会提示失败(因为执行到rce那一步,会卡住下面的执行)但是目标程序已经运行。
执行完后,在主页看到上线情况。
可通过mqttx客户端进行连接对客户端进行操控利用。
rce执行程序发布一个tx/test主题,订阅rx/test主题。mqttx则要相反,订阅tx/test主题,发布rx/test主题。
到这一步已经实现了通过mqtt协议将命令执行结果回显。如果卸载不了插件,使用mqtt里面的命令执行起一个rce,再关掉插件起的rce,就可以卸载插件了。
利用方式二:
使用mqtt协议特性通过发布主题形式传输数据,达到内网穿透。我这里使用一个http代理去修改,因为http也是一个请求返回一个响应。服务端httpserver->httpserver-mqtt,客户端httpclient->httpclient-mqtt。流程图
编译好可执行文件,将httpserver和httpserver-mqtt通过插件方式上传到目标机器。
使用利用方式一中的命令执行功能,将可执行文件执行。
此时还没运行可以看到只有两个连接,添加一个1.sh的文件。目的是为了两个可执行文件同时执行。
执行1.sh后,会将server和servertomqtt的两个个可执行文件执行。通过面板发现已经成功运行。
使用连接客户端进行连接访问隧道。
成功通过隧道代理访问里面内部资源,默认172.17.0.1为宿主机器ip。
mqtt数据流
文章声明:该工具、教程仅供学习参考,请勿非法使用。否则与作者无关!
原文始发于微信公众号(sec0nd安全):EMQX命令执行后渗透
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论