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

王维   ·   发表于 2024-01-31 20:04:07   ·   CTF&WP专版

简介

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语法

  1. 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[只能读取有限行]:

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

参考资料

打赏我,让我更有动力~

1 Reply   |  Until 2个月前 | 389 View

小瑟斯
发表于 2个月前

评论列表

  • 加载数据中...

编写评论内容
LoginCan Publish Content
返回顶部 投诉反馈

© 2016 - 2024 掌控者 All Rights Reserved.