人在旅游ing,就只是整理一下比赛时候做出来的题目,懒得再复现其他题目了。场景分析题其他如果有大佬做出来的,欢迎分享解题思路Orz。
数据安全
像素密语
题目描述:某公司安全部门在审查离职员工Alex的交接材料时,发现了一张看似普通的抽象图案图片。这张图片是Alex在离职前一天上传到公司文件服务器的,但Alex的工作内容并不涉及设计或图形相关的事务。安全分析师怀疑这张图片中可能隐藏了机密信息,但用肉眼和常规图片查看工具看不出任何异常。请你帮助安全团队分析这张图片,找出其中隐藏的秘密。

拖进随波逐流一把梭了
答案:flag{LSB_St3g4n0_1s_Lnv1s1bl3}
日志猎手
题目描述:某电商企业的 Web 服务器在 2024 年 11 月 15 日遭到攻击。安全团队从 WAF(Web 应用防火墙)日志中导出了当天的访问记录,发现服务器确实被入侵了,但尚不清楚攻击者的身份和具体窃取了哪些数据。安全团队需要你协助完成以下分析:
定位攻击者:找出发起攻击的源 IP 地址。 追踪攻击路径:攻击者首先尝试了目录遍历攻击,其中有一次成功读取到了服务器上的某个配置文件,它是什么? 评估数据泄露:攻击者随后转向了 SQL 注入攻击,通过 UNION SELECT 成功从数据库中拖出了一个表。该表的名称是什么? 答案提交:将上述三个答案用下划线 _ 连接,放入 flag 格式中: flag{攻击者IP_配置文件_数据库表名},示例(非真实答案):flag{10.0.0.1_secret_sessions}

题目描述中已经提示存在sql注入,首先定位关键词找到进行注入的ip,这个肯定就是攻击者ip
with open("access.log","r") as f1, open("123.txt", "w") as f2:
lines = []
for line in f1:
if "192.168.1.107" in line:
f2.write(line)
lines.append(line)
这里写个脚本提取只有攻击者ip的日志部分

这里看到明显的路径遍历的痕迹,并且根据回显长度可知读出来的配置文件就是setting.ini

找表名也是一样,注意到这里的长度很大,所以表名是credentials
答案:flag{192.168.1.107_setting.ini_credentials}
混淆迷雾
题目描述:安全运维团队在一台被入侵的服务器上发现了一段可疑的 Python 脚本 suspicious.py。这段脚本看起来并不长,但代码经过了多层混淆处理,变量名全部被替换为无意义的标识符,无法直接读懂。安全分析师怀疑这段脚本是攻击者留下的后门或数据窃取工具。你需要对这段代码进行逆向分析,逐层剥离混淆,还原其真实功能,并找出其中隐藏的 flag。注意:请在安全的环境(如虚拟机或沙箱)中分析此脚本,不要直接在主机上执行。
import base64 as _b
import codecs as _cd
_0x0f3c = "aW1wb3J0IGJhc2U2NCBhcyBfYjYKXzB4MWEgPSAi"
_0x0f4d = "S1NrblkyVjRaU2NnTENjK1oyNXBjblJ6UENjZ0xD"
_0x0f5e = "a3diMDlmS0dWa2IyTmxaRFEyWWk0ME5tSmZLR1Zz"
_0x0f6f = "YVhCdGIyTW9iR0YyWlFvaVBXdFRXR1JXYWsxNGQw"
_0x0f80 = "Tk9lRVZFVEhoVlJFd3lSVlJOYzFWVVRYaDNhVTB4"
_0x0f91 = "ZDNsT00zZFRUalYzUTAxNFJVUk1ORkZFVERWUlJF"
_0x0fa2 = "d3lSVlJOYzBsVVRuTnJWRTl6VFZST2MyTlVUWGgz"
_0x0fb3 = "YVUxM1JVUk1OR3RFVERSUlJFeDRWVVJNTkZsRVRI"
_0x0fc4 = "cEpWRTF6VFVSTmVIZDVUalYzUTA5M1JVUk1lVUZV"
_0x0fd5 = "VFdKQ2FXSndRbmxaWjBrelltMUNVMHRxYUdsamIw"
_0x0fe6 = "NHlWMjgwVjJGMmNHMU1ibU5EU1RsQmVWUjNPREpZ"
_0x0ff7 = "SWlBOUlEQnZUMThLTkRaaVh5QnpZU0EwTm1WellX"
_0x1008 = "SWdkSEp2Y0cxcCIKZXhlYyhfYjYuYjY0ZGVjb2Rl"
_0x1019 = "KF8weDFhKS5kZWNvZGUoKVs6Oi0xXSk="
_0x00ff = _0x0f3c + _0x0f4d + _0x0f5e + _0x0f6f + _0x0f80 + _0x0f91 + _0x0fa2 + _0x0fb3 + _0x0fc4 + _0x0fd5 + _0x0fe6 + _0x0ff7 + _0x1008 + _0x1019
print('[+] Payload deployed. Cleaning traces...')
print('[*] Done. No artifacts left.')
_0x0001 = _b.b64decode(_0x00ff)
_0x0002 = _cd.decode(_0x0001, 'utf-8'ifTrueelse'ascii')
exec(_0x0002)
这里我们重点关注_0x00ff这个参数,因为其对应的是base64的密文
_0x0f3c = "aW1wb3J0IGJhc2U2NCBhcyBfYjYKXzB4MWEgPSAi"
_0x0f4d = "S1NrblkyVjRaU2NnTENjK1oyNXBjblJ6UENjZ0xD"
_0x0f5e = "a3diMDlmS0dWa2IyTmxaRFEyWWk0ME5tSmZLR1Zz"
_0x0f6f = "YVhCdGIyTW9iR0YyWlFvaVBXdFRXR1JXYWsxNGQw"
_0x0f80 = "Tk9lRVZFVEhoVlJFd3lSVlJOYzFWVVRYaDNhVTB4"
_0x0f91 = "ZDNsT00zZFRUalYzUTAxNFJVUk1ORkZFVERWUlJF"
_0x0fa2 = "d3lSVlJOYzBsVVRuTnJWRTl6VFZST2MyTlVUWGgz"
_0x0fb3 = "YVUxM1JVUk1OR3RFVERSUlJFeDRWVVJNTkZsRVRI"
_0x0fc4 = "cEpWRTF6VFVSTmVIZDVUalYzUTA5M1JVUk1lVUZV"
_0x0fd5 = "VFdKQ2FXSndRbmxaWjBrelltMUNVMHRxYUdsamIw"
_0x0fe6 = "NHlWMjgwVjJGMmNHMU1ibU5EU1RsQmVWUjNPREpZ"
_0x0ff7 = "SWlBOUlEQnZUMThLTkRaaVh5QnpZU0EwTm1WellX"
_0x1008 = "SWdkSEp2Y0cxcCIKZXhlYyhfYjYuYjY0ZGVjb2Rl"
_0x1019 = "KF8weDFhKS5kZWNvZGUoKVs6Oi0xXSk="
_0x00ff = _0x0f3c + _0x0f4d + _0x0f5e + _0x0f6f + _0x0f80 + _0x0f91 + _0x0fa2 + _0x0fb3 + _0x0fc4 + _0x0fd5 + _0x0fe6 + _0x0ff7 + _0x1008 + _0x1019
print(_0x00ff)

拼接一下得到完整的base64密文,然后解码

这里的_0x1a参数也是base64密文,但是首先要先反转一下:
import base64 as _b6
_0x1a = "KSknY2V4ZScgLCc+Z25pcnRzPCcgLCkwb09fKGVkb2NlZDQ2Yi40NmJfKGVsaXBtb2MobGF2ZQoiPWtTWGRWak14d0NOeEVETHhVREwyRVRNc1VUTXh3aU0xd3lOM3dTTjV3Q014RURMNFFETDVRREwyRVRNc0lUTnNrVE9zTVROc2NUTXh3aU13RURMNGtETDRRREx4VURMNFlETHpJVE1zTURNeHd5TjV3Q093RURMeUFUTWJCaWJwQnlZZ0kzYm1CU0tqaGljb04yV280V2F2cG1MbmNDSTlBeVR3ODJYIiA9IDBvT18KNDZiXyBzYSA0NmVzYWIgdHJvcG1p"
print(_b6.b64decode(_0x1a).decode()[::-1])

_Oo0参数也是base64密文,提取该密文然后进行解码

发现关键内容,直接运行打印_o0O参数就得到flag
_0o0 = ''.join([chr(c) for c in [102,108,97,103,123,68,51,48,98,102,117,53,99,52,116,49,48,110,95,77,52,115,116,51,114,125]])
print(_0o0)
#flag{D30bfu5c4t10n_M4st3r}
答案:flag{D30bfu5c4t10n_M4st3r}
破镜重圆
题目描述:取证人员在对嫌疑人的 U 盘进行镜像分析时,发现了两个可疑文件。初步检查显示,这两个文件都经过了不同程度的伪装和破坏处理,其中可能隐藏着被窃取的数据碎片。嫌疑人似乎将一个完整的秘密信息分成了两部分,分别藏在两个文件中,并使用了不同的隐藏技术来增加发现难度。请分析这两个文件,还原其中隐藏的秘密信息。注意:直接使用strings工具打印出的答案存在误差,请使用图片标准工具解答。
png文件:

jpg文件:

两段直接拼接即可
答案:flag{F1l3_H34d3r_R3p41r_M4st3r}
快乐考试周
题目描述:小明把秘密隐藏在了一个Excel文件里,据说秘密分散在文件的各个角落。来做一道题吧。请下载附件中的Excel文件,仔细查找所有隐藏信息,拼接后得到完整FLAG。

excel表中一个一个图片翻过去,找到第一部分:Flag{h4Ppy_

La5t_,这是查看图片元数据,在作者这一栏找到last的黑客黑话

9u1z^-^},这个也是在图片里找到的,但是好像是假的,没鸟用

卡了一会,然后想到背景加黑,看到两段信息

第一段是密文,直接base64解码:_meM0ry}
这一串数字不明所以,猜测是数字对应的英文字母,然后每个数字加96直接算ascii字符
num = [5,24,1,13,9,14,1,20,9,15,14]
res = ''
for i in num:
res += chr(96+i)
print(res)
#examination
Flag{h4Ppy_La5t_examination_meM0ry},这里把F改为小写,被阴了一下,浪费了好一会
答案:flag{h4Ppy_La5t_examination_meM0ry}
量子信使
题目描述:情报部门截获了一份通过自定义加密引擎 "Quantum Messenger v2.1" 加密的通信数据,以及一份从发送方服务器提取的通信元数据日志。分析显示,该加密引擎使用了 4 层嵌套加密,每层使用不同的密码算法。你需要逐层逆向还原,最终获取被加密的秘密信息。
看都没看😂
幽灵协议
题目描述:安全团队在一台被入侵的服务器上发现了一个可疑的 Python 通信模块 client.py,以及该服务器与外部 C2 服务器之间的通信流量包 traffic.pcap。分析显示,恶意软件使用了一套自定义二进制协议与 C2 服务器通信,通信内容经过加密处理。你需要:1. 逆向分析 client.py,还原协议格式和加密算法 2. 从 traffic.pcap 中提取使用该协议的通信数据包 3. 解密数据包载荷,还原被窃取的秘密信息
据说很简单,但是被拼图害惨了,没看😂
综合场景
场景一:数据采集
合规采集
在数据采集与⽹络爬⾍应⽤过程中,⽹站通常通过 robots.txt ⽂件声明允许或禁⽌爬⾍访问的资 源范围。请根据提供的 robots.txt ⽂件以及⽹站地图(sitemap)⽂件,对⽹站中 PHP ⻚⾯资源 进⾏分析,统计其中被 robots.txt 规则禁⽌爬⾍访问的 PHP ⻚⾯数量,请提交最终统计结果。
【答案标准】若⽹站地图中有100个php⽂件,其中50个被robots.txt,则最终提交答案为50。
# robots.txt for the data compliance exercise
User-agent: *
Disallow: /admin/
Disallow: /account/private/
Disallow: /reports/drafts/
Disallow: /beta/internal/
Disallow: /tmp/
Disallow: /api/private/
Sitemap: https://data-compliance.example.org/sitemap.xml
这是robots.txt的文件内容,可以看到所有禁止爬取的目录名称
这是部分内容:
<url>
<loc>https://data-compliance.example.org/admin/user_001.php</loc>
<lastmod>2026-07-01</lastmod>
</url>
<url>
<loc>https://data-compliance.example.org/admin/user_002.php</loc>
<lastmod>2026-07-01</lastmod>
</url>
<url>
<loc>https://data-compliance.example.org/admin/user_003.php</loc>
<lastmod>2026-07-01</lastmod>
</url>
<url>
<loc>https://data-compliance.example.org/admin/user_004.php</loc>
<lastmod>2026-07-01</lastmod>
</url>
import os
with open("123.txt", "r") as f1
lines = []
for line in f1:
if"https://"in line and".php"in line:
if"/admin/"in line or"/account/private/"in line or"/reports/drafts/"in line or"/beta/internal/"in line or"/tmp/"in line or"/api/private/"in line
lines.append(line)
print(*lines)
print(len(lines))
直接写个python脚本定位robots.txt里的关键词即可

答案:67
场景二:数据存储
需要web环境,比赛的时候没有写出来,也复现不了
场景三:数据使用
⼝令排查
某单位客⼾信息核验平台近期监测到异常登录⾏为,经安全分析研判,怀疑系统内部存在账号⼝令泄 露⻛险。为避免客⼾敏感信息进⼀步泄露,现对系统进⾏安全排查。请对提供的系统环境进⾏分析,定位泄露的账号凭证信息,并将发现的账号密码组合作为最终答案提交。
【答案标准】若泄漏的账号密码为test/test,则最终答案为:test/test。

没什么好说的,看源码直接找到账号密码
答案:guest/Guest@HRB2026
接⼝排查
近期监测发现,攻击者利⽤客⼾信息核验平台的低权限普通账号,绕过访问控制,⾮法调取了银⾏重 点客⼾的敏感档案。分析表明,系统某数据接⼝存在鉴权逻辑缺陷或⽔平越权漏洞。请对平台接⼝进⾏安全排查,定位该越权⻛险点

用找到的账号登进去,发现一堆api接口,直接放到bp里面爆破,按回显长度排序,发现两个关键接口
关键接口一:/api/v1/core/customer-sensitive-info,回显显示需要需要参数id和uuid

关键接口二:/api/v1/system/users/snapshot暴露admin信息

{"admin_user":{"department":"总行数字风控中心","employee_no":"HRB-A-0001","last_customer_id":"CUST-100001","real_name":"沈明远","role":"admin","title":"系统管理员","username":"admin","uuid":"6f61c1a4-7f38-4d1e-9d8f-2f510bb9a26a"},"current_user":{"department":"南京分行客户运营部","employee_no":"HRB-G-0427","last_customer_id":"100","real_name":"林亦安","role":"guest","title":"客户复核岗","username":"guest","uuid":"a9c0c42b-47a0-4e31-9348-f94d92bc40be"},"review_context":{"branch":"南京分行客户运营部","memo":"客户复核台账使用 id 字段同步,仅供内部系统联调使用。","recent_id":"100"},"source":"legacy_user_cache"}
这里直接得到admin的uuid。访问/api/v1/core/customer-sensitive-info接口,添加参数,id输入100,uuid使用admin的uuid,回显中的id_card就是flag值

脱敏安全
没做出来😭
场景四:数据恢复
⽂件恢复
某银⾏业务部⻔在⽇常档案管理过程中,由于⼯作⼈员操作失误,导致⼀份重要业务⽂件被误删除并 发⽣⽂件损坏。该⽂件包含客⼾业务办理过程中的关键信息,对后续业务审核及⻛险管理具有重要作 ⽤。现提供⽂件销毁后的残留数据⽂件(附件名:⽂件恢复.zip),请以电⼦取证⼈员⾝份对数据碎⽚进⾏分析,恢复原始⽂件内容,并提取其中包含的关键信息。【答案标准】若借款⽅为:你好有限公司,担保⽅为:他好有限公司,年利率为:3.33,借款⾦额为:300000,档案核验码为:ABC-1FA83,则最终提交答案为:你好有限公司-他好有限公司-3.33-300000-ABC-1FA83
最意难平的一集😭。最后一个半小时全在拼拼图,只剩一个担保方没拼出来,搞的我其他好几个题目看都没看

贴一张一个半小时的努力成果吧
场景五:数据销毁
⻛险账⼾销毁
不会写捏
总结:我是彩笔😭😭😭