2025运维初赛

算是比较可惜吧,最后第42,被ban了不少人
电子取证的题目分支真多啊()

还是应该多做做服务器这种难一点的,之前多是畏难,觉得计算机和手机学的开心来分快,可是仔细想想,还是只有难的才能拉开差距,难的做的人少,那就更应该去钻研。
恰巧最近学了计网等课程,有了不少感悟和提升,在大二我希望能够对此融会贯通,争取明年本比赛直接进入线下。像这一次比赛中的RAID阵列更是一题都没做出来,明年绝对不会了(其实已经会一点了现在)
时代在更新、变化,题也一年年难,只有比题难的速度学习的更快,才能在时代洪流里被记住吧
这边多是借鉴的西电的wp写的,谢谢西电大手子!
一、电子数据提取与固定-Fitness
镜像中用户“berserker”的密码哈希为

火眼基本信息直接就能看见
13844b0cc3aa353c8df3fbf8c6aa68f8
flag{13844b0cc3aa353c8df3fbf8c6aa68f8}
镜像中是否安装了Linux环境,若有,请给出Linux发行版名称(全小写)

仿真起来直接搜,当然了,直接看左下角其实也有
1 | |


openSUSE-Leap-15.3
题目只问名称,且全小写
所以是flag{opensuse}
用户桌面上存在一个从运动设备中导出的运动记录文件,该文件存在损坏,请尝试修复并给出修复后的SM3校验值 (全大写)

能直接在火眼找到这个运动记录文件
但是说损坏了,得修复
而且要看修复后的SM3校验值

我们能在火眼找到这个截图,初步确定是garmin的产品
https://developer.garmin.com/fit/download/
于是我们可以找到这个sdk下载路径
在这边我们能找到下图的jar文件

即ActivityRepairTools.jar,然后我们即可利用这个修复源文件

直接就修复好了
于是我们得到了修复的文件,然后去算一下SM3即可

d5d6c76f55913e9a3ff7939bca6757ea385963a379f2c1e6c3d166b130d6f8fd
给它调成全大写就是flag了
解析修复后的文件,请给出该运动记录中最高时速(单位KM/H,保留两位小数)
依旧是利用刚刚的SDK文件
这次用FitCSVTool.jar工具

如此一来就得到了csv文件
打开看看

筛选出speed然后再降序一下马上就锁定了最快速度
记得转单位


得到flag
解析修复后的文件,文件中记录的该设备的制造商名称为(全小写)
在excel找半天实在是找不到,应该是不在里边了
问了下ai说要用fitparse库

我们尝试编写简易代码
1 | |


在尝试了很多次后发现这个是对的
flag{strava}
二、电子数据分析-aipowah
警方破获了利用AI进行诈骗的服务器并进行取证,请你分析相关数据。


先利用账户oper和密码123456登录
服务器rootfs采用的文件系统格式(全小写,如:apfs)

df -Th直接列出已挂载文件系统的类型和磁盘空间使用情况,简单直观
当然用火眼直接看也一样

查看/etc/fstab也可知是xfs。
所以是xfs
flag{xfs}
AI诈骗站点的域名。

这边可以在火眼直接看见本服务器的域名
但值得注意的是服务器Web站点往往使用Nginx进行配置,所以我们如果直接查看Nginx配置 /etc/nginx 的server_name也可直接得到本站点域名y8fmin.wf941021.org。
flag{y8fmin.wf941021.org}
服务器运维人员的主机名(全小写,如:web01)。

直接last看看,找不到,没做出来

原来是这边我们可以看到有一个用户叫oper,意为运维(operation)
远程人员要登入到服务器进行运维,一种方式是配置SSH authorized_keys
结合这个知识则我们可以去/home/oper/.ssh/authorized_keys(如果知道这个知识,但是不知道路径,其实也可以暴搜)找到对应的公钥


可以看到这边写了
运维人员未删除公钥的所有者信息,其用户名为mzk,主机名为akiyamachine
所以答案为flag{akiyamachine}
(我去原来可以这样子,运维是真不会啊)
用于诈骗聊天的AI模型名称(如:DeepSeek-V3.1-Terminus)。


锁定过来看配置文件
找不到
所以我们这边直接暴搜几个常见模型


找到本题flag
操作系统日志外发的服务器IP地址(如:114.51.4.1)。
Linux下,系统日志外发主要依赖Rsyslog服务。Rsyslog服务的配置文件位置是/etc/rsyslog.conf

只要打开该配置文件,我们不难发现其使用UDP发送至对端目标地址为10.0.38.211
开发人员调用AI模型服务所使用的密钥(如:sk-6yd0c2cybncn6w0zma8zyhabjxn9a)。
这边其实结合的是我们第四题找到的app.py
毕竟刚刚的模型名字也是里边找到的,肯定也是去里边找密钥啊

可以看到答案在.ak里边
所以我们全局搜一下.ak

这边索引搜,我们只要搜文件名,不关心内容
这样子快

定位过去,简洁的可怕
an-m2h0xum6l59cgmx7hy3ctolligvkf
开发人员的邮箱(全小写,如:admin@example.com)。

我们可以先利用docker inspect看看创建时间
根据时间,在重点目录下查找其导入ctime之后的行为
find /home /root /opt -newerct “2025-10-16 05:55:00”

可以看到这边有一个可疑的zip文件
找来看看

竟然有关键内容app.py
还打包了powahquery
通过在取证软件中全文搜索powahquery,可以看到容器有一层导入了powahquery,而且导入目录中还包含.git文件夹
去pip官网搜,没有看到这个库,说明这是自行开发的依赖库。通过.git目录下的文件,可以看到提交者为feishunzhang@anshanxia.live
(这是不是太难了)
“机票退款”类型诈骗页的域名(全小写,如:example.com)。
在第七问中可以看到工作目录有个documents.milvus,实际上是一个sqlite3数据库
这边因为我们已经有那个app.py了,所以我们其实是可以明文爆破的

得到密钥
当然甚至可以爆破
利用rockyou字典

这边得到密码是carol123
这milvus是个向量数据库

下了个拓展

能看见里边的内容了

这边可以看到,机票退票的官方网站域名正是
manosaba13.cc
(为什么别人的wp写的是这个,但是我觉得这个和退机票关系不大,感觉是错的)
三、网络运维小助手
小光是一位新入职的网络安全管理员,负责一些基本的运维相关工作。为了追逐大模型应用的热潮,他也开发了基于检索增强生成(RAG)与大语言模型的网络运维小助手。为了分担自己的工作压力,小光将两个密钥以System Prompt的方式交给助手进行保管。
小光并非提示词工程高手,但他对大语言模型的提示词越狱有所耳闻。为了防止密钥被窃取,他设计了若干防护措施,阻止他能想到的提示词攻击方式。看起来应该万无一失了……
果真如此吗?
挑战目标
你需要通过与大语言模型的交互获取Flag。Flag即为大语言模型保管的“密钥”。
- Flag 1 : 在不使用知识库的情况下,通过构造输入,从助手的输出获取Flag。
- Flag 2 : 在使用知识库的情况下,通过构造输入,从助手的输出获取Flag。
特别提示
- 输入的长度上限为300字。
- 不支持流式输出,但限制了输出token上限。请耐心等待输出结果。
- 每位选手每 10 秒只能尝试与模型交互1次,比赛期间每位选手总共只能尝试 500 次。
Flag1

flag1,直接这样子,将敏感请求拆解为一系列看似无害的步骤,逐步降低模型的警惕性
1 | |
然后就得到flag1

Flag2

比赛没做出来,我的ai不给力
结束之后看别人的wp是这样子骗的
1 | |
还能这样子玩,真是学到了,就是骗它说这样子是为了保护安全,结果又让他输出了
ZmxhZ3tSQUctdzNsbC1oQGNrZWR9

flag{RAG-w3ll-h@cked}
四、电子数据提取与固定-Synology
从浏览器中提取dsm的设备名

。。。其实就是这个,一把梭,比赛不知道为什么没做出来
从系统中提取群晖smb共享的密码

在火眼的历史命令就能找到,export了密码
所以是flag{6CzRWsUNYUpp}
从群晖系统中获取加密共享文件夹中最早创建的文件的创建时间(格式为 2000-01-20 17:42 ,半角标点,精确到分钟)
要共享文件夹,自然是share了

我们在这个NAS.img里找shared文件夹
可以看到最早的是这个
该加密文件系统使用的加密软件套件为(全小写,例,bitlocker)


疯狂暗示我也没看出来
所以加密方式为ecryptfs
从群晖加密文件夹中的excel文件获取第一个受害人的手机号码

O原来这玩意是群晖啊!是NAS的制造商啊!!我最近正准备买NAS呢(

这边可以看到其加密漏洞
1 | |
1 | |

巧的是这边很容易即可在火狐浏览器的下载记录中得到这个key

找到路径,我们将其提取出来


在UFS打开tools中的这个工具,根据上一题我们已经确定了是eCryptFS的加密

选择刚刚得到的key文件

这边选择为Synology NAS default password

成功得到明文口令kchSnAQQmpVe
接下来有了明文口令,我们需要transform一下文件系统了

open一下.img文件,然后右键选择Transform file system files

这边填入刚刚拿到的那个明文口令

于是便会自动检测到eCryptFS加密的文件解密
可以看到已经解密完毕了,问加密的excel文件,也就是这个记录1.xls
导出一下

还是很直接的,就一个电话号码
所以答案是1391783251
五、校园网络保卫战
警报!小P同学学校的核心服务器遭遇了不明黑客组织的APT攻击!尽管安全团队迅速响应,但攻击者还是在系统中留下了一个恶意的后门程序 malware.exe。据初步分析,这个程序是攻击者用来窃取数据和维持控制的关键。
现在,小P同学学校网络的安全岌岌可危。急需你这样优秀的网络安全人才加入应急响应小组。你的任务就是逆向分析这个 malware.exe 程序,找出其中隐藏的两个关键Flag,帮助我们彻底瓦解这次攻击!
挑战目标:
你需要通过静态和动态分析,从程序中找到两个Flag。

先die一下,是32位的
Flag1
- Flag 1 (动态指令): 分析发现,该程序启动后会尝试连接一个远程的C2(命令与控制)服务器来获取一个动态的“行动指令”,这个指令就是 Flag 1。你需要弄清楚程序是如何构建通信URL、如何进行身份验证的,并最终获得这个指令。攻击者似乎把它藏在了某个公开的代码托管平台上。

找main函数没找到,只能查查字符串看看了

OK我们能直接看见flag1和flag2在这边

能看见flag函数了

找到之后麻烦ai帮我读一下内容


OKai直接把我们的关键函数输出出来了


我们尝试看一下这些函数

这边不知道为什么一开始是sub_4021B0,运行了一次就变成了sub_9121B0,奇了怪了,可能是开了ASLR,而且每次一运行就崩溃

我们尝试问问看ai

似乎确实是这边在反调试
我们在这边打断点就直接成功了

把call给nop掉

成功一步步进入

这边检测我们能不能连上网,连上就能进入flag1的部分了
现在需要我们输入一个,它会搞到buf1里边去
好我们输入一个
输入完这边会和v10比,我们就把v10里边的先输进去
\x01頄t
虽然有点怪,但是进去了
然后开始下载了,应该是从github下了一堆东西

成功步过到这边

可算看见密钥了

0x42, 0x35, 0x78, 0x9A, 0xCD, 0xEF
我们找到了key
同时我们也找到了加密的算法,就在这边,就差密文了
这边可以发现在函数sub_911EB0(改名后)进去能看见url输出算法


直接给生成了url
这个函数住哟啊就从 unk_91A0F4 加载数据到 v4
在偏移14处拼接字符串 “6 * 7 l!-/“
最后使用 sub_913710 格式化URL: %s/%s/%s%s
所以我们这边需要查看 unk_91A0F4 的内容:
数据应该是被0x42异或加密的


麻烦一下ai

ai直接给我赶出来了,我们有url了这下

现在还缺个token
sub_501A00

就在这玩意下边嘛

还是扔给ai一下

需要我们填xmmword值,找一下啊

找到了,那就下下来直接代码解
这怎么缺一个?
试了试,最后得到应该第五列是5570407052C1030152637722C09112075
所以解得token:github_pat_11BM4SPEA0KnWLy9lbGN2V_8gyTkjyDkhHSRQ5pkFiLp6pdVq2YQP7bSKn0udWrRnGEF
把东西下下来
curl -H “Authorization: Bearer github_pat_11BM4SPEA0KnWLy9lbGN2V_8gyTkjyDkhHSRQ5pkFiLp6pdVq2YQP7bSKn0udWrRnGEF” -H “Accept: application/vnd.github.v3.raw” “https://api.github.com/repos/fwhong/srclog/contents/Ameroyt2dstg.txt“ -o cipher.bin

1 | |

得到flag1
flag{reverse_me_7b9c13a2deadbeef}
Flag2
- Flag 2 (静态后门密码): 除了远程指令,程序内部还硬编码了一个用于紧急情况下激活所有后门权限的“主控密码”,它就是 Flag 2。攻击者使用了一套加密算法(包括字节替换、位旋转和多层异或)来保护它。你需要剥茧抽丝,逆向解密算法,还原出原始的密码。

flag2基本就锁定这一块了

问一下ai

似乎不难
我们追踪一下这个912270看看
再扔给ai



好追踪一下直接就有了,这个xmm我们上一回合就有了

直接解得
1 | |
flag{static_analysis_ftw_9e5d2c4a87cafebabe}
六、电子数据恢复-ARRAY
解压密码: 202510_3kGHBmXWaaR4yJYb3H2R
答案格式:flag{你的回答},本题答案内如有英文字母请小写提交。
请分析【检材3】,并对以下问题作答。
当时是啥都不知道,连RAID是啥都不知道,然后这整个一块都爆0了,现在看看应该至少对三题才是
该磁盘阵列的文件系统名为

这边火眼没有检测出是什么文件系统,我们扔到UFS看看

UFS就检测出来了,文件系统为zfs
该磁盘阵列的raid模式为

UFS直接就写了,是RAID Z2的模式
这边UFS是可以直接自动重组RAID的,只需要我们将三个文件都打开即可(这边必须一起拖动打开,一个个打开不太行)

磁盘阵列已重组
该存储池的guid(十进制形式)与存储池物理存储总大小为(单位字节,使用-连接,例,37981267462-96725636)
本题和下一题不会,我们跟着西电走一下
首先是这两题需要使用zpool挂载存储池,我们使用FTK挂载,这边仅挂载物理卷并选择可写

当然用这个也行

在虚拟机里加硬盘前记得需要在虚拟机先安装好zfs,还有就是注意要用管理员打开VM


这边来挂载后配置三块硬盘

配置好三块硬盘,注意这边必须是管理员打开才能挂载上
但是这边挂载完之后一直显示没有存储池

(有点玄学,多试几次重启就好了,我怀疑是挂载不稳,谢谢mortal师傅)
https://mp.weixin.qq.com/s/augUOII28aJdr_-XsFssFg

guid有了,是18330567339733651604
这边有报错,主要是因为挂载的盘和原盘的 PCI 端口号不同
我们使用 sudo zpool import -f tank 即可忽略错误, 强制挂载 zfs 存储池

存储池tank挂上了

使用zpool list -p就能看见size啦!
所以物理存储池总大小就是26306674688,guid之前也搞出来了是18330567339733651604
存储池内根文件系统的guid(十进制形式)为
问根文件系统的guid
我们使用zfs get guid -p即可得到

所以根文件系统的guid是5920691364380755974
文件系统中 evdb64.txt 中包含的有效信息为(长度为30的hex字符串)
在重组好RAID阵列之后在UFS打开

即可看到这个文件,我们导出先

明显是Base64编码过的内容,cyberchef解码一下

是一张图片,直接阅读上边的文字即是flag

flag{ecff737c62052218b1988a5d1216ed}
