2025盘古石决赛
检材容器密码: ENj5MWKOu7tN80uDnRbzb2C409gWpdI#@zLutPdqGGtt-XRt$_$%7i=)5xlbFzF* 容器 MD5: e4ad1b21e6e818529998869ec352134b
难程序之剖析兮,服务器未竟全功。
心力摧而神疲兮,辗转煎熬意难通。
硬件局促难堪兮,唯双虚机次第启封。
步履迟而卡顿兮,帧如幻灯片影朦胧。
博彩站点初成兮,双机倾颓顷刻崩。
意倦倦欲停求索兮,暂且收束罢此征程。
忆彼 ESXi 之规兮,一十六吉内存为宗。
嗟吾身之匮乏兮,仅携三二吉数相从。
竭极限之殚力支撑兮,三台孤悬勉自持穷。
更忧 VSAN 高悬兮,如山重压惊破心胸。
困算力之桎梏兮,叹实操之路千折万重。
心期扩容纾艰危兮,价翻倍望而意冷成空。

HarmonyOS 手机
- 打网球定的日期是?
3月3日

- 哪个浏览器搜索过鸿蒙开发教程?
UC浏览器

- 记录服务器信息的笔记软件名称是?




不认识笔记软件导致的,喂给ai

思源笔记
4. 接上题, 笔记软件记录的 ip 地址一共几个?
5


- 接上题, DC 服务器用户名 administrator 的密码是?
接上题,看到DC服务器对应ip后,正则搜administrator,看到对应记录

3w.panguite
iOS 手机
- 手机的型号?
iPhone 13 Pro

- 手机的 iOS 系统版本是?
16.3.1

- 手机的 IMEI 是?
352507504392612, 352507504954650

- 曾经接收过一快递, 收件地址是?
中新市人民路1119号1栋3单元2502

- 接上题, 联系电话是?
同上
15922223333 - 分析苹果手机检材, 找出嫌疑人参加内部会议系统的地址?
192.168.10.104:5003/meeting/meeting
没啥线索翻翻手机相册:

或许有用

翻到了 - 接上题, 找出参加会议的时间?
2025年5月20日

跳转到源文件查看最后修改时间:
- 截止到 2025 年 4 月, 该团队虚拟币投资总收入是多少?
32959790278.00

- 截止到 2025 年 4 月, 该团队虚拟币投资总支出是多少?
10885644613
同上 - 该团队雇佣钟无声的佣金是多少?
思路是找到软件的数据库分析
首先跳转源文件
得到包名com.fabian.hasse.haushaltsbuch

在application.plist里面搜索包名,看到下一行是数据目录

在data文件夹里发现数据库:分析:


借鉴了wiki佬的思路
Windows 计算机

1.操作系统安装时间(UTC+8)?
2025-05-16 15:16:50 
2. 登陆次数最多的用户?
admin

3. 最后一次弹出的移动设备制造商是?
SanDisk

4. 访问次数最多的网页名称是?

看到主要是这两个浏览器,点到源文件看到是sqlite数据库
加个.sqlite后缀才能放软件分析


会议管理系统
6. 记录鸿蒙备份密码的文件格式是?


Pgs-2025!123js
7. 鸿蒙备份密码中的数字是(按照从左到右)?
2025123
8. 桌面 txt 文档隐藏的密码是?


3w.pgs.cup
9. 安装的邮件客户端是?
claws mail


10. 碎片图片重构后 ESXi2 的登陆密码是?
root/P@88w0rd
学习了wiki佬的思路用gaps来重组,看到图片都是228X171

由于gaps只支持正方形的,所以需要先将图片拉成正方形(228X228)
脚本如下:```
import os from PIL import Image input_folder = "./VM_Config" output_image = "combined_square.jpg" target_size = 228 grid_size = 25 image_files = [f for f in os.listdir(input_folder) if f.lower().endswith('.jpg')] canvas_size = (grid_size * target_size, grid_size * target_size) canvas = Image.new('RGB', canvas_size) for idx, img_file in enumerate(image_files[:625]): img_path = os.path.join(input_folder, img_file) with Image.open(img_path) as img: img_resized = img.resize(target_size, target_size) row = idx // grid_size col = idx % grid_size position = (col * target_size, row * target_size) canvas.paste(img_resized, position) canvas.save(output_image, quality=95)
得到下图,再用gaps处理


montage 输入文件路径 -tile 长宽数量 -geometry 拼图间隙 输出路径
gaps run combined_square.jpg solution.jpg --size=228 --generations=20 --population=20(配置调到了最小,内存多的话可以调大点)

12. xshell 连接记录共有几条?
4


wiki大佬思路
13. 控制程序监听的端口号是
4782
控制端里面找配置文件
14. 控制端在什么时间控制过其他电脑?
5.19

控制端里面找log文件
HarmonyOS 程序分析
-
该软件应用名称是?
-
软件的包名是?
-
软件图标md5的后六位是?
-
软件代码保存的文件名称是?
-
软件的入口类是?
-
软件的入口密码是?
-
软件存储笔记的数据库名称是?
-
数据库的打开密码是?
-
数据库中笔记内容采用什么加密算法?
-
数据库中笔记内容加密秘钥是?
服务器集群取证
导出vcsa虚拟机文件夹,注意是分区7下面的这个
而不是这里这个
这个文件夹打开虚拟机会报错
一开始以为是检材坏了,后来发现导错地方
进来可以看到

首先调整了一下核数为4
打开后用之前拼图给的账号密码登录:

### 1. 隔离虚拟机网络(取证关键)
为了防止目标服务器意外联网或触发外部通信导致证据污染,**切勿将该虚拟机的网卡设置为“桥接模式(Bridged)”或“NAT”**。
- 请在虚拟机设置中,将其网络适配器改为 **“仅主机模式 (Host-Only)”**(如果您使用的是 VMware Workstation)或将其放入一个独立的内部网络/LAN 区段。
### 2. 配置取证机(宿主机)的网络
截图中显示该 vCenter 服务器配置了静态 IP:`192.168.10.100`。
您需要将取证工作机上对应的虚拟网卡(例如 Workstation 的 VMnet1)配置在同一个网段下:
- **IP 地址**: `192.168.10.x` (例如 `192.168.10.10`)
- **子网掩码**: `255.255.255.0`
- 网关和 DNS 留空即可。
### 3. 配置本地 Hosts 文件解析
vCenter Server 极其依赖其内部配置的 FQDN(完全限定域名)。截图中显示的地址为 `vcsa.pgs.cup`。如果只通过 IP 访问可能会出现重定向失败或证书错误。
请在您的 Windows 取证机上修改 hosts 文件:
1. 以管理员身份运行记事本,打开 [hosts](vscode-file://vscode-app/d:/Programs/Microsoft%20VS%20Code/ce099c1ed2/resources/app/out/vs/code/electron-browser/workbench/workbench.html)
2. 在文件末尾添加以下映射:
192.168.10.100 vcsa.pgs.cup
3. 保存文件。
### 4. 获取信息与取证接入方式
网络连通后,您可以通过以下几种方式介入该系统进行取证调查:
- **系统管理后台 (VAMI)**:
在浏览器中访问:`https://vcsa.pgs.cup:5480`。此界面主要用于系统级管理、服务状态检查和系统日志导出。您也可以直接通过截图提示的地址 `https://vcsa.pgs.cup:443/appliance/support-bundle` 导出包含了大量系统及服务日志的支持包(Support Bundle),这对取证非常有价值。
- **vSphere 管理中心**:
在浏览器中访问:`https://vcsa.pgs.cup`。这里是管理集群和虚拟机的核心界面。需要 vCenter 账户密码(通常是类似于 `administrator@vsphere.local` 格式的域账号)。
- **直接进入底层操作系统调试**:
在您当前截图中按下 `<F2>` (Customize System),如果已知该系统的 `root` 密码,可以登入控制台。在控制台的 Troubleshooting Options 中可以开启 **SSH 服务** 或 **Bash Shell**,从而使用 SSH 客户端直连底层 Linux 以提取数据库(vPostgres)或底层日志。
完成了以上修改就可以访问管理端口:https://vcsa.pgs.cup:5480


后台用root,或者administrator@pgs.cup都可以成功进
但似乎这里没啥信息
来看看集群管理界面:https://vcsa.pgs.cup
用administrator@pgs.cup进来

第一次见,学习下VMware vSphere 架构 集中式服务器虚拟化环境
1. **“大管家”(vCenter Server)**:就是您现在截图里看到的这个系统。它是整个集群的**指挥中心**(控制面),负责统筹管理下面所有的物理机和虚拟机。
2. **“宿主机”(ESXi 物理服务器)**:这是真正在机房里消耗电力的**硬件服务器**(数据面),它们接受 vCenter 的统一调度,提供 CPU、内存和存储资源。
3. **“业务机”(子级虚拟机)**:这就是跑在各个 ESXi 物理机上的具体业务系统(如网站服务器、数据库、OA办公系统等)。
**这里有一个取证中非常经典且有趣的“套娃现象”需要您注意:**
虽然 vCenter 是管理所有 ESXi 物理机的“最高长官”,但 vCenter 它自己(即截图中这个系统),**本质上也是一台虚拟机**,它通常也运行在受它管理的某一台 ESXi 物理机之上。
**针对您作为取证人员的视角,这个层级对应着不同的调查方向:**
- **如果您要查“内鬼/黑客是如何批量破坏或窃取大量服务器的”**:查 **vCenter**(您手头的这个系统),因为所有跨主机的迁移、克隆、快照、删除等高权限操作日志都在这里。
- **如果您要查“某台具体物理服务器怎么断网了,或谁插了随身碟”**:查具体的 **ESXi 物理机**的底层日志。
- **如果您要查“网站怎么被黑的、数据库被谁拖库了”**:查那台特定的**子级虚拟机**的操作系统(Windows/Linux)内部日志。
-
找出集群服务器内的集群名?
Cluster_Pguscup

-
找出集群中共有多少台虚拟机?
7

-
找出集群中 vMotion 所用的网段?
-
找出集群磁盘组内共存储了多少个 iSO 镜像?
-
找出集群内"市场 PC"虚拟机在磁盘组中存储的名称?
-
找出管理此集群的服务器 vcsa 的主机名?
-
找出 vcsa 的版本号?
8.0.3.00500


-
找出 vcsa 中设置的时间服务器?

ntp.aliyun.com -
找出 vcsa 每天几点进行备份?
22:59

-
找出 vcsa 管理页面的端口号?
5480

-
找出 vcsa 服务器 web client 登录的账户名?
在 VMware vCenter 环境中,确实有两个容易混淆的 Web 界面:
1. **vCenter Server 管理页面 (VAMI - vCenter Server Appliance Management Interface)**
- **端口:** 通常是 `5480`。
- **用途:** 用于管理 vCenter Appliance 虚拟机本身的底层设置。例如:网络配置(IP地址、DNS)、系统时间、更新打补丁、系统服务监控、备份和还原 vCenter 数据库等。
- **登录信息:** 默认用户名通常是 `root`,密码是安装 vCenter 时设置的 OS 密码。
2. **vSphere Web Client (现在的 vSphere Client)**
- **端口:** 通常是 `443` (HTTPS)。
- **用途:** 这是日常管理虚拟基础架构的主要界面。用于管理虚拟机(创建、删除、开机、关机)、主机(ESXi)、集群、存储、网络等资源。
- **登录信息:** 默认管理员账号通常是 `administrator@vsphere.local` (如果使用默认域),密码是安装时设置的 SSO 密码。
**总结区分:**
- **找 "5480" 端口:** 如果题目或流量中出现 `5480` 端口,或者路径类似于 `/appliance`,那通常指的是 **vCenter Server 的管理页面 (VAMI)**。
- **找 "443" 端口:** 如果是 `443` 端口,且路径类似于 `/ui` 或者是登录到类似 `/websso/SAML2/...` 的 SSO 认证流程,那通常指的是 **vSphere Web Client**。
administrator@pgs.cup
7. 找出 vcsa 管理的服务器主机的系统版本号?
4.0.0
学习西电wiki的思路:

在 vCenter Server 管理页面的"连接"选项卡中编辑访问设置, 激活 Bash Shell
接着使用 ssh 连接 vCenter Server:
ssh -l "administrator@pgs.cup" 192.168.10.100

根据提示启动shell
我想方便点看文件于是用finalshell

但发现直接看不到,问问ai

输入以下命令后重新连接:
chsh -s /bin/bash root

在 /etc/lsb-release 或 /etc/os-release 或 /etc/photon-release 文件中保存着服务器主机的发行版信息:


不过这些都只能精确到 4.0, 无法精确到答案格式中要求的 4.0.x. 查了一些资料, 看到说如果版本号为 4.0 Rev X 则代表版本为 4.0.X 否则版本号就是 4.0.0.
8. 分析 vcsa 管理的服务器主机的文件系统类型?
vmfs
首先ESXi 本地磁盘默认必须是 VMFS
也可命令查看:
lsblk


没太看出来
另一思路到esxi里面看文件系统,由于vcsa是用来运维和管理集群的,是个普通的系统+运维的软件,这里的vcsa管理着那个集群,集群的文件系统是vmfs,所以答案是vmfs

### 到底什么是 VMFS(虚拟机文件系统)?
**专业定义**:VMFS (Virtual Machine File System) 是 VMware 公司专门为存储“虚拟机”而研发的专利级**集群文件系统**。
**通俗理解**:
您用的 U 盘通常是 FAT32 或 exFAT 格式,Windows 电脑硬盘通常是 NTFS 格式。这些文件系统都有一个致命特征:**同一时间只能有一台电脑去读写它,否则数据就全乱套了**。
但是在企业机房里,多台物理服务器(ESXi)往往连接着同一个存满虚拟机的巨型共享存储柜(SAN)。
**VMFS 的超能力就是它可以让几十台物理服务器,在同一瞬间,同时往同一块硬盘里写入数据,彼此完全互不干扰。**
**核心界限(取证极其关键!请牢记):**
- **VCSA 内部(你的截图)**:也就是系统里面,用来存系统自己的日志和数据库的,一般是 Linux 的文件系统(如 **ext4** 或 **xfs**)包裹在 LVM 里面。
- **ESXi 物理机外部**:用来存放几十上百个业务虚拟机(比如包含这个 VCSA 自身的虚拟硬盘文件 `.vmdk`)的那个巨大的底层硬盘,它的文件格式才是 **VMFS**。
**总结一下 WP 的问题:**
那份 WP 说“每个 lvm 卷内均为 vmfs 文件系统”,如果是对着这张 VCSA 的截图说的,那**大概率是写错了或者是概念串位了**。VCSA 的这些 `/storage/...` 目录里面绝对是 ext4/ext3,不可能是 VMFS。VMFS 只存在于 ESXi 宿主的底层硬盘里。
您以后在取证遇到这种情况,只要脑子里有一条线:**管系统的内部配置看 LVM/ext4,揪底层的虚拟硬盘看 VMFS**,思路就彻底通了。这是一个非常好的问题!作为取证人员,彻底搞懂底层存储结构的“界限”,比单纯背命令重要得多。
- 找出 vSAN 服务所对应的端口组名称?

10. 接上题, 该端口组上行端口数量?
4

有四个上行链路,对应四个上行端口
11. 找出 vSAN 集群许可密钥的前 5 位?
MG292

注意是集群的许可
12. 找出 vSAN 集群类型?
HCL/延伸集群


存疑一下,问了下ai,感觉更像延伸集群

虚拟机取证
做这里的题需要将整个集群重建起来. 集群使用 vSAN 集群硬盘组, 3 台 ESXi 服务器 + 1 台 vCenter Server 全部搭建起来才能读取硬盘数据. vSAN 搭建起来之后才能访问这部分及之后题目中的几台虚拟机.
需要超级内存,理论大于64g,试试。


这是因为宿主机打开了VBS,我是win11,系统默认打开VBS(基于虚拟的安全性)
可以win+R输入msinfo32 打开系统信息面版查看

学习了西电wiki的方法一和方法二,由于我的是win11家庭版,似乎没有这个选项:"计算机配置—管理模板—系统—Device Guard“
于是用方法二,脚本从底层关闭:
该方案需要在 BIOS 设置中关闭安全启动(secure boot)
运行以下批处理脚本:
@echo off dism /Online /Disable-Feature:microsoft-hyper-v-all /NoRestart dism /Online /Disable-Feature:IsolatedUserMode /NoRestart dism /Online /Disable-Feature:Microsoft-Hyper-V-Hypervisor /NoRestart dism /Online /Disable-Feature:Microsoft-Hyper-V-Online /NoRestart dism /Online /Disable-Feature:HypervisorPlatform /NoRestart mountvol X: /s copy %WINDIR%\System32\SecConfig.efi X:\EFI\Microsoft\Boot\SecConfig.efi /Y bcdedit /create {0cb3b571-2f2e-4343-a879-d86a476d7215} /d "DebugTool" /application osloader bcdedit /set {0cb3b571-2f2e-4343-a879-d86a476d7215} path "\EFI\Microsoft\Boot\SecConfig.efi" bcdedit /set {bootmgr} bootsequence {0cb3b571-2f2e-4343-a879-d86a476d7215} bcdedit /set {0cb3b571-2f2e-4343-a879-d86a476d7215} loadoptions DISABLE-LSA-ISO,DISABLE-VBS bcdedit /set {0cb3b571-2f2e-4343-a879-d86a476d7215} device partition=X: mountvol X: /d bcdedit /set hypervisorlaunchtype off pause > nul
命名为.bat文件以管理员身份运行后重启
这个时候会看到是否关闭虚拟化安全的提示,均选择是
再开机即可。

但是初始的4g运存是不够的,会一直卡在某个服务的加载一直没变化,我们把内存加到8g:



访问管理后台,用之前得到的密码P@88w0rd登陆
-
找出该组织域名?
pgs.cup

-
找出 DNS 服务器系统 Build 版本?
首先找到dns服务器:
在企业 IT 架构中,名为 `AD` 的服务器通常代表 Active Directory(活动目录)域控制器,而它几乎必然同时承担内网 DNS 服务器的角色。主要原因如下:
1. **AD 的绝对依赖性**:Active Directory 域服务高度依赖 DNS。域内的计算机必须通过 DNS 的 SRV 记录才能定位到域控制器(DC)来进行身份验证和登录。没有 DNS,AD 就无法运行。
2. **微软的默认架构**:在 Windows Server 上部署 AD 域服务时,系统会默认并强烈推荐将 DNS 服务器角色与 AD 安装在同一台机器上,并使用“AD 集成区域”来同步 DNS 数据。
3. **环境特征**:从你的截图中可以看到,vCenter 和 ESXi 主机都使用了 `.pgs.cup` 这样的完整域名(如 `esxi2.pgs.cup`)。这说明你的环境中有统一的内部域名管理,而这台 `AD` 虚拟机大概率就是解析 `.pgs.cup` 域名的核心 DNS 服务器。
因此,在运维常识中,看到名为 `AD` 的机器,基本默认它就是这套环境的主 DNS 服务器。涵盖了这两个核心功能。

可以看到我的ad近来还是掉的,推测需要把esxi1和3一起启动才能连上

全部启动然后连接exsi2,能看到build号:

24674464
2. 找出 DNS 服务器系统初始安装时间?
-
找出 DNS 服务器 IP?
192.168.10.99

任意一台esxi进入后F2进Configure Management Network -
找出 DNS 服务器内自建了多少条 DNS 记录?
一直连不上虚拟机,找一下问题:

“物理网络适配器未连接到 Distributed Switch”,发现是没配网卡的原因

把三个esxi都接上另外两个网络适配器






真放弃了,加上了数据盘以后每个esxi没有16g内存起不起网络拓扑(我的理解是)
诶但你先别急,当绝望的准备关掉关掉全部都关掉的时候,发现似乎关掉一台,另外两台的机器连上了,有四台虚拟机可以用了,原来确实是内存的问题,试着继续做吧:

这是我的配置
目前只有bocai能直接进

另外两个显示没有支持的主机

root/3w.panguite.com进入 -
找出 DNS 服务器内,主机 ftp 对应的IP地址?
-
找出 FTP 服务器内 2025-05-19 12:25:25 上传的文件名?
-
找出 FTP 服务器限制访问的 IP 地址?
-
找出市场 PC 的磁盘大小?
-
找出市场 PC 的系统 build 版本号?
-
找出市场 PC 网卡 MAC 地址?
-
找出市场 PC 内话术文件,给出 SHA256 的前六位?
-
找出市场 PC 内用户 SID 的后 4 位?
-
找出财务 PC 系统初始安装时间?
-
找出财务 PC 的 IP 地址?
-
找出财务 PC 电脑内共保存了几个月的员工工资表?
-
找出员工"何燕" 2025 年 2 月的实发工资?
-
找出该组织 2025 年 5 月所有人力成本?
会议服务器
-
找出系统内核版本号?
-
找出会议服务器的 IP 地址?
-
找出服务器内设置的 DNS 地址?
-
找出老会议系统所用数据库对外映射的端口号?
-
找出老会议系统所用数据库 root 密码?
-
找出老会议系统用户密码加密方式?
-
找出老会议系统用户 admin 密码加密的盐值?
-
找出老会议系统中共开过几次会议?
-
找出新会议系统包含几个容器?
-
找出新会议系统对外映射的 http 端口?
-
找出新会议系统用于设置强密码的脚本名?
-
找出新会议系统会议协调服务密码的前6位?
-
找出郝虎友的电话号码?
-
找出该组织总公司位于那个国家?
-
找出该组织中国公司财务部门负责人?
网站服务器
-
服务器使用的 php 版本时多少?
8.3.6

-
执行自动备份数据库的时间是?
5:00 am
grep -rE 'backup|bak|dump|sql' /etc/cron* /var/spool/cron/ /var/spool/cron/crontabs/ 2>/dev/null

-
数据库备份脚本中"2027 年 6 月"的备份密钥是多少?

来分析这个脚本,发现有混淆加密
解密脚本:
<?php
// 复制你的 $encoded_chunks 数组到这里
$encoded_chunks = [
'LzBDejhNZldHdzBhVWlyZ2EvOW9STzVMbW1FSm5MdGNsWUdqZzMvelpSdjlEcGprQWlMRXZ6eFNsQWFmd0pqaHM2M2M3NHZiMnAvcm1vcnFNTDIyMnd2Nlh3SUdQcFpkWkxZY0tiK29GRVhicitvdWd1MTRUOXg4T2svSTBKTFovMXA3bjdJZ0QxNUc5clY3OVBRNTlpbDdya20vSzhvVUk0M3Z2cU5ja2ZHeGpPSWRoKzh3WGdjQjZ0TmlUU3JhVUpkeE1QbVZFb2QzYVpvS2lFcSs2V3EvZjFNOEZpOS9qRC9WbWdHUE14ZmJoYk9ETmYyWE5Ed0QzdXBseStiNE5xaHNuSVJYWTd2N2dvaTVBL2gvTnMvTElnWm1HZmhCam0yMzhYVUZSYU0ybW40VTNOZWF0cTcxMTZFSUhCTDZ3eWJRRTcvMGJjZHpZYmFyMHEwOTEvOHVhS0g3OGVta1RmQWhuN2Jwenh1M1R1NkVBODdvN3ZvR1BHS2tuMW5adXVrSHp0TDFqRU1KWGtGTFRNTmp0dE5TbFBNRWNlbjE2WTdaZ0JMY2VZU3F2aW0xNklRdVBLL1VLc3Q5Q3c3T3BCdGtxalBTV2kycFV0SjZMdTVMVFBmaUlJdTJZSk9XdGRxQlZ6UGdhYnMyL2pKLzN5VWIrQ25MS3ovYUs5ekI1emVvdXNtajYyZVM2Zm1PcFFsRGY2S1ZhZUtuaGRPZ0J3WW5rM1lSVEFLVC9oaDhPNVBTQkdaNmxoTDNJYlFqaG92NnhkV0dkM3FZZzVJcmpOZmx2dzhvQTJmbERBM2hucGNxM2pRWkswZTlLMmk5TzltU1lzNDFnN2hrcVRybENocTJVTmFBZlo4TlJXV0NPaU5QWTNSY2ZOcThMbDNXdlBVV1FwWEpqMGNsV0ErazRHZmphdnMwallNOTY1N3JOOW53clpZQjJPNFRQcHZYcWN5SzEweU9MY3lES2ZDL2JlUjNPNGYxd0NzL2NCbU5tUGwyNC9FYUZEVWR5b3VPOHRGZnJuTzREZzZtRHhTRWtZUFdDd3lQTlBEVWZIcFM4OEhrRS9hMUlmOEM1blpEQXBwV2x0aHVONFJzL3hCRVdBblJQNHB1QURrbEV6WGp1M2ZSczYzZHZNNFBoVE4vcnE5cC9ZZUNoVEFraTFISG9POWVlbmhuaVJwanRrMTBJeFpWQ0Y1NnRaL1QrVzlaV0pWUkltTmpoWFU2Zlo2MVBPNUdwQUd3VzhwRHlNR2ZEQXhwUGh1UzhFNXhvWWZNUGFacVNucURrcVF4cEoveEVrRFNHa3gxOEgvNk40MklxUis2N0hkcmRXZFpIUlBIK1JqS3hhbUVQVytYendtb2t5RTJuN2dnOUJYdWgvSkRxWmp6cmlRSzRVeXNUQjF6T2VKSDA0U25oWEZERGZZL29ZVW13bmlTUDlhM04zc0xyV0lxb0plRjFIbXlkZVpibGFLeUhqMUNiQjZid1R4MkZIRlVuUlBoUGNOamppNUNJTkFGV3NYMzVjTFA0MFZvcGIyQi82aW9CbXlXcUpERnNuTFV4OFVLREVLeS9wYXNGR1MvZ2lDdkc1TTk2ZU11aFBVaXpGR0lJZzRad2twRkFxVjl3aDIzdG9mdWFOMnBjQzM1bE5lSjJ0ZlVBSGJ4VnZUZXlYcjFTdGJtbGZEQmJqNzVxQzlEMElmSnRTaXdJeFU1Z3ptaU8vSkM0OS9HK0hTdHNTdUE1ZWJSa291TVJJZi9aSDR0ZmhWTEdoUEFENWdNbENqV2M0VU5FRzkyYlBlS0VQdE5aWCtXUmw5V05aUUp3SkJscDlXMUZ4WURESkk5bkVWZmFrYjNtRkZPMWV5QWFvWWJXVkFsclZlL1BzbDN4VVo4LzlMSkJFeHlnWjM0YVM1MXY1U2dsV3paVjZBOTUwUEF0d0lnZndIUDlWNkw2Z01CbGVsdkNJSVgxKzlPaytaVHVpTlVTdk5iTWNGOXk0d2VIbUNjZUMvVnRHc0JSSDk4cEtEYVZqWG10aTVaU0lKUVpIT29acHRj',
'THJCWTcvVlpGTm9xQ3p1cElGdmJweVR1aUJTdmN2aUZwMUs3dHNIVHpMWVNEc3FFZlpNRFoxNHhkZHA3Q2Z6eko5VG44em95eSttM29vaHFTZ2dhYVkzSTIzQ1VLVlE4dHV6b3dPcGZCY1JkeFpYcWE3TktGTGVXVkxYYk5wSXl5OHlLTFF0WjVVYzdHSXU4R25nQTl1VStZaklZT3FXMFRrMWlwampCd1NPQkd5VklNRFVOS3BLTTFvVXliMkoyeEMzdXpWdE4yaVhzb2pYa2RVbWR3NmN1bDhWOEdmMmFYTWdaR3J1ZGR6TGNRU3Z2ZjNTNEY0Y09CWnFIZWdqQ1hrbFNBd083ekhtZDNobkk2VDNHR3ovK0FBcStkUENycmZzRzJWdUZ5am56anNmUFV3NmtyTkJYWVl2Rm4wa3M5R0h5OEpHNHpGQjlsK0lEYy9yNlZ4Y3lMQlhDUkx0YnJLdk9YOS9XZzFaeC9BQ2xLTWFBaDlHMmg5V3h2RGp0VWxCVXNYYWRVN1pZelNvYVZodTdtRmw4aUVjK2R2SDR0Vk1jNWtaYnNrMGxZeGFGbDBITEhKYUQ4bzhwNGJoMUU4dmRLQUx0VzQ3RE4wT3VXdVdkdzZQTEh5N0FTdjM5U3JjdzhxVDN5U1FucDJMMERQWWdPSXhZYkcrbjNlY2w3NGdMSyt1TXZHenRDdGVkK3Q3dDY4dERYMDBZS2ZlalY4eDJXUGh2MHRLNFh2OFl1RGEwWStSVVl0akMyL29PWjNibDZjQ3BydlRnUkdvSmdNVi9UZEJZR0swNWh5aFlPeUE3ajdUcXpDUmFVUHc1ekxWa09RMTlJSGc2M1JGdDd3Znh0L3V6bFdDWUw1blZCMmJRQUxidldQVGZrdWlWTzZkdjB4UHl5NWR4WTRSS2FBaGFuby9uSDd6aUNTRjMvcm1ZcnVxL2MyeVVFaS9GT0cra0t1cHM5MUkzcTFxczdvZEs5ZnpDaWp6ck1TRGpUaWQ2Zm9RMXNyM0xuQW5tZWZwZ0hLS3pVdlVLaUNzUUI4dGw4K2NUcGRtYkFySWlEK20rd1ZJaVNyc3NtcnhWTG4vZ25yNGdLb1lKTVd2N1QzK2h4aUdhZnNtUWloMnBvbzcxMTRacXA1UWlmbFMwanNibEE1ZWY5SGVWVExmenF5RHlVcjk1bWlLUW9ockhPb3B1Z0JXbWZ3VjlsSkY0NmVZSzYrUEg3aDdyNmdpUWFnbTU4eVltellVT3JIN2N5NVNVbXQ5S1hlYUZuRDdpZGloNmYxOTBFWDY3bk5hWWNxOG5SZ2hvM1p6Zk1leUdRYnlTU3l4WEVseFZWR0JITnlUU255dmdvbmx0U2NBYVRSOG4zUm9Xa3dWb3lGb1NqOEM0MzRhU1RnOW9vcUl3',
];
// 拼接
$_obfuscated_data = implode('', $encoded_chunks);
// 解密过程
$_decode_layer_A = base64_decode($_obfuscated_data);
$_decode_layer_B = str_rot13($_decode_layer_A);
$_decode_layer_C = strrev($_decode_layer_B);
$_decode_layer_D = base64_decode($_decode_layer_C);
$_original_php_code = gzinflate($_decode_layer_D);
// 输出原始PHP代码
echo $_original_php_code;
?>
得到:
php decode.php
/**
* MySQL加密备份脚本(Docker 容器兼容版)
* 用途:每周三凌晨5点备份MySQL数据库并使用AES-256-CBC加密
* 配置为定时任务执行
*/
// 数据库配置(根据实际环境修改)
$db_config = [
'container' => 'www-db-1', // 容器名
'username' => 'skm2332',
'password' => 'skm2332',
'database' => 'skm2332',
];
// 备份设置
$backup_dir = dirname(__FILE__) . '/data/db_backups/'; // 备份目录
$date_format = 'Y-m-d_H-i-s';
$backup_file = $backup_dir . 'db_backup_' . date($date_format) . '.sql';
$encrypted_file = $backup_file . '.enc';
$log_file = $backup_dir . 'backup_log.txt';
// 创建备份目录(如果不存在)
if (!file_exists($backup_dir)) {
mkdir($backup_dir, 0755, true);
// 创建.htaccess文件禁止Web访问
file_put_contents($backup_dir . '.htaccess', "Order allow,deny\nDeny from all");
}
// 记录开始时间
logMessage("开始备份数据库: {$db_config['database']}");
// 设置内存限制
ini_set('memory_limit', '512M');
// 获取加密密钥(按月生成)
function getEncryptionKey() {
$base_key = 'cmf_backup_key_' . date('Ym');
return hash('sha256', $base_key, true);
}
// 写入日志函数
function logMessage($message) {
global $log_file;
file_put_contents($log_file, "[" . date('Y-m-d H:i:s') . "] $message\n", FILE_APPEND);
}
// 执行备份(通过 docker exec 运行 mysqldump)
function backupDatabase($config, $output_file) {
$cmd = sprintf(
'docker exec %s sh -c "mysqldump -u%s -p%s --opt --skip-lock-tables --no-tablespaces --default-character-set=utf8mb4 %s" > %s',
escapeshellarg($config['container']),
escapeshellarg($config['username']),
escapeshellarg($config['password']),
escapeshellarg($config['database']),
escapeshellarg($output_file)
);
logMessage("执行命令: $cmd");
exec($cmd, $output, $return_var);
return $return_var === 0;
}
// 分块加密文件(避免内存溢出)
function encryptFile($input_file, $output_file, $key, $log_file) {
if (!file_exists($input_file)) {
logMessage("错误: 备份文件 '$input_file' 不存在");
return false;
}
$iv = openssl_random_pseudo_bytes(openssl_cipher_iv_length('AES-256-CBC'));
$input_handle = fopen($input_file, 'rb');
$output_handle = fopen($output_file, 'wb');
if (!$input_handle || !$output_handle) {
logMessage("无法打开文件进行加密");
return false;
}
fwrite($output_handle, base64_encode($iv)); // 先写入 IV
while (!feof($input_handle)) {
$plaintext = fread($input_handle, 8192); // 每次读取 8KB
$ciphertext = openssl_encrypt($plaintext, 'AES-256-CBC', $key, OPENSSL_RAW_DATA, $iv);
fwrite($output_handle, base64_encode($ciphertext));
$iv = substr($ciphertext, 0, 16); // CBC 模式下,IV 更新为上一块的前16字节
}
fclose($input_handle);
fclose($output_handle);
logMessage("备份文件已加密: " . basename($input_file) . " -> " . basename($output_file));
return true;
}
// 清理旧备份(保留30天内的)
function cleanOldBackups($dir, $days_to_keep = 30) {
$files = glob($dir . '*.sql.enc');
$now = time();
foreach ($files as $file) {
if (is_file($file) && ($now - filemtime($file)) > $days_to_keep * 86400) {
if (unlink($file)) {
logMessage("已删除过期备份文件: " . basename($file));
}
}
}
}
// 主流程
try {
if (!backupDatabase($db_config, $backup_file)) {
throw new Exception("数据库备份失败");
}
logMessage("数据库备份成功: " . basename($backup_file));
$key = getEncryptionKey();
if (!encryptFile($backup_file, $encrypted_file, $key, $log_file)) {
throw new Exception("加密失败");
}
unlink($backup_file);
logMessage("已删除未加密的备份文件: " . basename($backup_file));
cleanOldBackups($backup_dir, 30);
logMessage("备份完成");
echo "✅ 数据库备份和加密已完成。\n";
} catch (Exception $e) {
logMessage("❌ 错误: " . $e->getMessage());
echo "❌ 错误: " . $e->getMessage() . "\n";
}
可看到生成密钥逻辑:// 获取加密密钥(按月生成)
function getEncryptionKey() {
$base_key = 'cmf_backup_key_' . date('Ym');
return hash('sha256', $base_key, true);
}
让ai写个脚本:
<?php
$base_key = 'cmf_backup_key_202706';
echo hash('sha256', $base_key);
?>
输出:
6863bd7f968ad31a7f389843845688bf2bca0832ff4460df41736465aa619dbf
- 备份数据库中"充值 0.41640026BTC"的用户 id 是什么?
根据刚才解密出来的备份脚本内容,数据库备份文件的保存位置如下:
<?php
$backup_dir = dirname(__FILE__) . '/data/db_backups/'; // 备份目录
$date_format = 'Y-m-d_H-i-s';
$backup_file = $backup_dir . 'db_backup_' . date($date_format) . '.sql';
$encrypted_file = $backup_file . '.enc';
于是到/opt/www/data/db_backups/目录下

可看到这个备份大小是0,一看日志备份失败
得到三个信息:
数据库名称:skm2332
数据库用户名/密码:skm2332 / skm2332
数据库运行在 Docker 容器:容器名为 www-db-1

随手翻了下日志似乎看到博彩网站的后台和登录账密...
根据之前的脚本,密钥派生规则是:
$key = hash('sha256', 'cmf_backup_key_' . date('Ym'), true)
算出SHA-256的32字节原始密钥(hex为abe74a67558cdc535e1127cf9d1c4177b064ca107a9794c01d29f281ae23173d)
解密代码:
import base64
from Crypto.Cipher import AES
def decrypt_full_file(enc_file, out_file, key_hex):
# 读取整个加密文件
with open(enc_file, 'rb') as f:
enc_data = f.read()
# 前24字节是base64(IV)
iv = base64.b64decode(enc_data[:24])
# 后面全是base64(ciphertext)
ciphertext = base64.b64decode(enc_data[24:])
key = bytes.fromhex(key_hex)
cipher = AES.new(key, AES.MODE_CBC, iv)
plaintext = cipher.decrypt(ciphertext)
# 去除PKCS7填充
pad_len = plaintext[-1]
if pad_len > 0 and pad_len <= 16:
plaintext = plaintext[:-pad_len]
with open(out_file, 'wb') as f:
f.write(plaintext)
print('解密完成,输出文件:', out_file)
if __name__ == '__main__':
enc_file = 'db_backup_2025-05-16_11-33-41.sql.enc'
out_file = 'db_backup_2025-05-16_11-33-41.sql'
key_hex = 'abe74a67558cdc535e1127cf9d1c4177b064ca107a9794c01d29f281ae23173d'
decrypt_full_file(enc_file, out_file, key_hex)



前后的数据比对一下格式就会发现id是:
47332
- 备份数据库中网站支付方式有几种?
3
忙猜一下支付宝,看到pay_type然后得到3种

您感觉非常敏锐!这确实是 VCSA(vCenter Server Appliance)的一个经典限制问题,您找对方向了。
问题的原因在于:VCSA 系统出于安全考虑,默认给 root 用户分配的是一个受限的“设备 Shell”(Appliance Shell),而不是标准的 Linux Bash Shell。 虽然您在上面的命令行里输入了 `shell` 命令,成功切换到了标准的 Bash 模式(也就是您看到的 `root@vcsa [ ~ ]#`),但这**仅仅改变了当前的这个命令行窗口**。
FinalShell 下方的“文件目录”实际上是在后台通过 SFTP 协议建立的另一个连接。因为 root 用户的**默认** Shell 依然是那个受限的设备 Shell,导致这个后台的 SFTP 连接被拒绝或无法解析路径,所以无论你怎么刷新,下方都是空白的。
要解决这个问题,我们需要修改 root 用户的**默认 Shell**。
### 解决步骤
请在您现在的命令行窗口(`root@vcsa [ ~ ]#` 这个状态下)执行以下操作:
**第一步:更改默认 Shell 为 Bash** 输入以下命令并按回车:
Bash
chsh -s /bin/bash root
_(这个命令的意思是:Change Shell,将 root 用户的默认登录环境永久修改为标准的 /bin/bash)_
**第二步:断开并重新连接**
1. 关闭当前在 FinalShell 中的这个 VCSA 会话标签页。
2. 在 FinalShell 的连接管理器中,双击您的 VCSA 服务器**重新连接**。
重新连接后,您不仅登录时会直接进入 `root@vcsa [ ~ ]#` 状态(不需要再手动输入 `shell`),而且下方的文件目录应该也能瞬间加载出 Linux 的系统文件夹了。
vcsa集群管理节点无法查看目录解决方法如上)
6. 网站上有一个自毁程序, 请问自毁程序的运行密钥是多少?
这里本来想在finalshell里吧网站目录考下来扫一下,卡死了两次换个思路把虚拟机考下来分析



在vcsa的client端能下载,但是很慢,想想从文件系统解决的办法:
暂时无,个人的理解是esxi12挂起来形成的vsandatastore目录,无法直接文件系统层次分析。
注意到网站目录下有个1.sh,看起来很可疑,其记载的时间刚好在备份后,分析下这段内容是典型的OpenSSL加密输出(以U2FsdGVkX1开头),通常是用openssl enc命令加密后的结果,但是没有找到解密逻辑和密钥

(# vscode如何让文本超出屏幕自动换行)

7. 容器启动过程中运行的第一个程序是什么?
docker-entrypoint.sh

/var/lib/docker/containers/目录下找到对应容器的文件夹看config.v2.json

可以在文件中的 "Path" 字段和 "Entrypoint" 字段看到:
- "Path": "docker-entrypoint.sh"
- "Entrypoint": ["docker-entrypoint.sh"]
这就是容器启动的第一个程序
也可以直接在网站目录下看dockerfile
- 管理员登陆密码的加密方法是什么?
"###"+md5(22GtFeAKH41xK7NS9h+md5("password"))
/var/www/html/app/admin/controller/PublicController.php
这个路径很常见于国产PHP框架(如ThinkPHP、ThinkCMF等)项目中
- /app/admin/controller/:通常存放后台管理相关的控制器代码。
- PublicController.php:经常包含登录、注册、验证码等“公开”接口的逻辑。
docker cp 50fff335f0cc:/var/www/html/app/admin/controller/PublicController.php /root/PublicController.php
从容器中把文件拷到虚拟机里,在考到windows上
刷新一下就能看到


其实直搜更快,还找到了容器文件夹
去查找 cmf_compare_password 或 cmf_password 这两个函数的定义和实现位置。
在容器里面执行grep语句
grep -rn "cmf_compare_password" /var/www/html
最后看到
/var/www/html/simplewind/cmf/common.php:217:function cmf_compare_password($password, $passwordInDb)
说明是全局函数,去common.php中查看

在火眼里面路径不太一样搜一下能找到

cmf_compare_password 会根据 user_pass 的前缀判断用新旧哪种加密方式("###"为新版,否则为旧版),并调用 cmf_password 或 cmf_password_old 进行加密比对。

是新版:
新版加密逻辑(即 cmf_password)如下:
- 获取加密用的 authCode(如果未传入,则取 config/database.php 里的 authcode 配置)。
- 对明文密码 $pw 先做一次 md5。
- 用 authCode 拼接上一步的 md5,再做一次 md5。
- 最终结果前加 "###" 前缀。

即"###" . \text{md5}(\text{authCode} . \text{md5}(\text{明文密码}))
-
管理员登陆密码的盐值是多少?
22GtFeAKH41xK7NS9h
如上题 -
后台管理登陆目录?
admin/public/loginnaknvajvnlassanjx
见第四题 -
分析网站源码, 理解其多级分佣算法, 并计算在一笔 100 元交易中, 一个 5 级推荐链最多能获得多少佣金?
尝试仿真网站,把mysql启起来,看到mysql是另外一个容器,但是启动时报错,在指定位置找不到sql文件
把之前得到的备份数据库导入,再修改docker-compose.yml

改成导进来的备份数据库的名字,docker-compose up -d重启服务(在docker-compose.yml所在目录下)

重启以后
密码在之前的yml文件里能看到:
root
发现服务器起来了(http):
但是用之前看到的mng+123123进不去,改一下密码:###ac74b822c0ec74b7cc99a59b6f8c1e01(123456)

就可以进来了
11. 签到奖励是多少?
同样改一下user密码,进来点签到,获得0.01USDT
-
签到间隔时间是多久?
1h
再次点击会显示“下一个小时再来” -
得到签到奖励的用户共有多少?
9
在备份的数据库筛选去重 -
提现成功的用户有几个?
1

浙公网安备 33010602011771号