2026第四届全国数据安全职业技能竞赛暨第四届全国安防行业职业技能竞赛“美亚柏科杯”数据安全管理员职业技能竞赛总决赛第一批18号上午wp

admin 2026-05-04 04:57:39 网络安全文章 来源:ZONE.CI 全球网 0 阅读模式

文章总结: 文档记录了2026年数据安全职业技能竞赛总决赛解题过程,涵盖数据备份逆向分析、数据隐藏提取、数据恢复统计、安全审计及异常事件分析等模块。通过逆向门禁客户端解析加密备份文件发现超级管理员卡号88886689,从视频容器提取隐藏图片密钥,并完成数据分类分级、流量溯源、风险评估等实操任务。展示了数据加解密、元数据分析、SQL查询等综合安全技能。 综合评分: 86 文章分类: 数据安全,实战经验,应急响应,安全工具,漏洞分析


cover_image

2026第四届全国数据安全职业技能竞赛暨第四届全国安防行业职业技能竞赛“美亚柏科杯”数据安全管理员职业技能竞赛总决赛第一批18号上午wp

原创

一把梭安全 一把梭安全

一把梭安全

2026年5月1日 13:40 广东

在小说阅读器读本章

去阅读

数据安全

数据备份(50分)

题目描述:某写字楼使用了一套“SecuAccess-X”门禁系统。管理员在系统升级前,会定期通过客户端导出配置备份文件,用于灾难恢复。你从一台旧电脑中获取到了一份从该系统导出的门禁配置备份文件 backup.acfg,以及一份旧版本的“SecuAccess-X 管理客户端”程序 SecuAccessClient。据说这份备份中包含了一张超级管理员门禁卡的信息,它拥有对所有门区的完全开门权限。 你的任务是通过逆向分析客户端程序以及备份文件格式,从中找到这张超级管理员卡的卡号,并提交该卡号。

题目给了两个文件:

SecuAccessClient backup.acfg

目标是逆向客户端程序,分析 backup.acfg 备份格式,找出拥有所有门区权限的超级管理员卡号。

1. 基本分析

先把 SecuAccessClient 放进 IDA。程序很小,是一个命令行程序,入口逻辑集中在 main,运行参数格式也能从字符串看到:

Usage: %s <backup.acfg>

说明程序会读取并解析备份文件。

在字符串里还能看到:

Record&nbsp;#%d loaded. Level=%s, card_id=%d, Zones=%d, ValidDays=%dSpecial record detected.Record %u CRC16 mismatch. (maybe corrupted)

可以判断备份文件里存的是多条门禁卡记录,每条记录包含 Level、card_id、Zones、有效期等字段。

2. 文件头格式

反编译 main 后,可以看到程序首先读取 0x20 字节文件头:

fread(&header,&nbsp;0x20,&nbsp;1, fp);

并检查:

magic&nbsp;==&nbsp;0x47464341version&nbsp;==&nbsp;0x0102header_size&nbsp;==&nbsp;0x20

0x47464341 小端对应字符串:

ACFG

实际解析 backup.acfg 文件头:

magic&nbsp; &nbsp; &nbsp; &nbsp;= ACFGversion&nbsp; &nbsp; &nbsp;=&nbsp;0x0102header_size&nbsp;=&nbsp;32record_cnt&nbsp; =&nbsp;4

文件总大小为 108 字节,结构正好是:

32&nbsp;字节 header4&nbsp;条记录,每条&nbsp;18&nbsp;字节4&nbsp;字节 global_crc32

每条记录由:

16 字节加密数据2 字节 CRC16

组成。

3. 记录解密逻辑

IDA 中关键代码位于记录读取循环附近:

14bc &nbsp;lea rbx, key_2741...15a0 &nbsp;; 先把&nbsp;16&nbsp;字节记录倒序15c0 &nbsp;; 再与 key 逐字节&nbsp;xor

从程序数据段取出密钥:

13&nbsp;57&nbsp;9B DF&nbsp;24&nbsp;68&nbsp;AC F0&nbsp;11&nbsp;22&nbsp;33&nbsp;44&nbsp;55&nbsp;66&nbsp;77&nbsp;88

因此单条记录解密逻辑为:

plain[i] = encrypted[15&nbsp;- i] ^ key[i]

程序随后对解密后的 16 字节数据做 CRC16 校验,算法为:

poly&nbsp; &nbsp; &nbsp; =&nbsp;0xA001init&nbsp; &nbsp; &nbsp; =&nbsp;0xFFFFfinal&nbsp;xor =&nbsp;0x1234

EXP

import&nbsp;struct
data&nbsp;= open("backup.acfg",&nbsp;"rb").read()
key&nbsp;= bytes.fromhex("13 57 9B DF 24 68 AC F0 11 22 33 44 55 66 77 88")
def&nbsp;crc16(buf):&nbsp; &nbsp;&nbsp;v&nbsp;=&nbsp;0xffff&nbsp; &nbsp;&nbsp;for&nbsp;b in buf:&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;v&nbsp;^= b&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;for&nbsp;_ in range(8):&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp;if&nbsp;v &&nbsp;1:&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp;v&nbsp;= (v >>&nbsp;1) ^&nbsp;0xA001&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp;else:&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp;v&nbsp;>>=&nbsp;1&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp;v&nbsp;&=&nbsp;0xffff&nbsp; &nbsp;&nbsp;return&nbsp;(v ^&nbsp;0x1234) &&nbsp;0xffff
record_count&nbsp;= struct.unpack_from("<I", data,&nbsp;8)[0]
for&nbsp;i in range(record_count):&nbsp; &nbsp;&nbsp;off&nbsp;=&nbsp;32&nbsp;+ i *&nbsp;18&nbsp; &nbsp;&nbsp;enc&nbsp;= data[off:off&nbsp;+&nbsp;16]&nbsp; &nbsp;&nbsp;stored_crc&nbsp;= struct.unpack_from("<H", data,&nbsp;off&nbsp;+&nbsp;16)[0]
&nbsp; &nbsp;&nbsp;plain&nbsp;= bytes(k ^ b for k, b in zip(key, enc[::-1]))&nbsp; &nbsp;&nbsp;calc_crc&nbsp;= crc16(plain)
&nbsp; &nbsp;&nbsp;card_id, level, zones, reserved, start, end = struct.unpack("<IBBHII", plain)
&nbsp; &nbsp;&nbsp;print(i, stored_crc == calc_crc, card_id, level, hex(zones), reserved)

得到 4 条记录:

record&nbsp;0:card_id&nbsp;=&nbsp;10000001level&nbsp; &nbsp;=&nbsp;1zones&nbsp; &nbsp;=&nbsp;0x03
record&nbsp;1:card_id&nbsp;=&nbsp;20000001level&nbsp; &nbsp;=&nbsp;0zones&nbsp; &nbsp;=&nbsp;0x01
record&nbsp;2:card_id&nbsp;=&nbsp;30000001level&nbsp; &nbsp;=&nbsp;2zones&nbsp; &nbsp;=&nbsp;0x0f
record&nbsp;3:card_id&nbsp;=&nbsp;88886689level&nbsp; &nbsp;=&nbsp;3zones&nbsp; &nbsp;=&nbsp;0xff

其中 zones=0xff 表示 8 个门区权限全开,且 level=3 走到了程序里的 special record 分支:

if&nbsp;(level ==&nbsp;3) {&nbsp; &nbsp;&nbsp;if&nbsp;((zones +&nbsp;1) ==&nbsp;0) {&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;Special&nbsp;record detected;&nbsp; &nbsp; }}

也就是 zones == 0xff 时会被识别为特殊记录。

答案 88886689

数据隐藏(40分)

题目描述:某组织内部人员利用视频容器特性,将包含 KEY_PACKET_SIG 信息的机密图片(png格式)嵌入到一段视频中,以逃避内容审查。请从该视频中提取隐藏的图片,并找到图片中的KEY_PACKET_SIG 值作为答案提交。

答案 5589-yrq3vcf-43215

数据分析

数据恢复加工

【考题1】数据恢复 某公司职员在处理公司业务信息的时候,不小心误删除了一些关键的数据,但好在可以通过技术手段恢复出来。请通过分析硬盘文件,恢复出误删除的数据,并提交提交序号为5的表格中第239行第5列的内容。 【答案标准】 若序号为5的表格中第239行第5列的内容为555,则最终提交答案为:555

答案 31579.32

【考题2】数据统计 公司运维人员发现大部分员工的用户名存在重复的情况,不便于工作上的沟通。请通过技术手段,统计出所有表格中重复次数最高的用户名及其数量,用“/”拼接后提交。 【答案标准】 若所有表格中,重复次数最多的用户名为aaa,重复次数为50次,则最终提交答案为:aaa/50

把所有文件的用户名都放在一个表里面

答案 coolbird/23

【考题3】分类分级 请依据公司数据分类分级标准,对恢复出来的数据进行分类分级处理(数据分类分级标准.pdf),并统计其中级别为 L4的数据数量,将L4级别的数据数量作为答案提交。 【答案标准】 若L4级别的数据有10000条,则最终提交答案为:10000

答案 4500

数据审计

【题目1】时间核验 监控摄像头会自动保存视频,并生成时间戳文件(timestamps.csv)。请选手根据题目提供的视频文件及对应的时间戳文件,对视频数据进行时间一致性分析。需要判断视频内容所反映的时间信息是否与其自动保存的时间戳匹配,找出存在时间不一致的视频文件,对其首字母按ASCII表排序后,使用””_””进行拼接后,作为答案提交。 【答案标准】 若时间不一致的视频文件为9zasDS.mp4,Easq12.mp4,eaWQ1.mp4,则答案提交为9zasDS.mp4_Easq12.mp4_eaWQ1.mp4

这一题思路很简单写python脚本根据视频文件的创建时间或者修改时间判断是否匹配

答案 BsqrC.mp4_IGXFg.mp4_heFCP.mp4_xDD0m.mp4

【题目2】指纹提取 系统在视频文件的元数据中记录了视频拍摄设备的摄像头型号信息。请选手对提供的视频文件进行分析,提取其中的摄像机型号,并统计每种型号对应的视频数量,并作为答案提交。 注:型号共四种(SentinelCam-IPC200、SafeLens-2204F、VigilEye-Pro4K、IronView-2CD110) 【答案标准】 若SentinelCam-IPC200型号的视频有1个,SafeLens-2204F型号的视频有2个,VigilEye-Pro4K型号的视频有3个,IronView-2CD110型号的视频有4个。答案提交为1_2_3_4

答案 105_97_112_106

溯源分析

【考题1】流量溯源 某公司运维部门在进行日常审查时,发现今天公司的内部视频资源共享系统产生了异常的访问行为,在初步研判后发现是被黑客入侵了。运维部门立刻保存了可疑时间段的流量信息,请你分析流量包,找出黑客获取到的管理员账号密码并作为答案提交。 【答案标准】 若管理员账号为123,密码为123,则最终提交的答案为:123/123

答案 admin/Adm1n@2024#Secure!Pass

#

【考题2】数据采集 运维团队进入系统后,发现该系统中存在着员工信息。为了排查是否为内部人员作案,请你提取出手机号为18339633138的员工的工号信息并作为答案提交。 【答案标准】 若手机号为18339633138的员工工号为EMP0001,则最终提交答案为:EMP0001

这道题很简单用bp爆破页面然后把所有页面都保存下来 搜索手机号就能找到EMP0758

答案 EMP0758

异常事件分析

【题目1】风险评估 恒盾科技将某个区域定义为””高风险摄像头区域””,当且仅当该区域同时满足以下两个条件: 1. 该区域内存在至少 1 台老旧摄像头,其中老旧摄像头定义为:install\_year ≤ 2020(即2020年及之前安装的摄像头); 2. 在附件所给时间范围内,该区域内所有告警记录中(通过告警日志表中的 camera\_id 关联摄像头表获取区域信息),有效告警率(is\_valid = 1 的告警数量 / 该区域告警总数)≥ 50%(包含等于50%的情况)。 请你基于附件中的摄像头信息表与告警日志表,判断: – 哪些区域属于“高风险摄像头区域”? 要求: – 以区域编号为单位(如:A01、A02 等); – 将所有满足条件的区域按字典序升序排序; – 使用英文半角逗号,拼接为一个字符串,作为本题最终答案。 【答案标准】 若最终判定 A01、A05、A09 为高风险摄像头区域,则提交:A01,A05,A09

这道题需要两个文件cameras.csv 和 alarms.csv

SELECT&nbsp;*FROM&nbsp;`联表-alarms-副本`WHERE&nbsp;alarm_id&nbsp;/&nbsp;2&nbsp;<=&nbsp;is_valid;

答案 A01,A03,A05,A07,A09

【题目2】事件识别 公司将某些告警记录定义为””可疑人员事件””,当且仅当该告警满足以下全部条件: 1. 该告警的 alarm\_type = ""可疑人员""; 2. 以该告警的 alarm\_time 为中心,在其前后 3 分钟时间窗口内(包含边界),在 同一区域(即通过告警日志表中的 camera\_id 关联摄像头表,获取该摄像头所在的区域 area)的门禁记录表中,存在至少一条 result = ""未通过"" 的门禁记录。 请你基于附件中的告警日志表、摄像头信息表以及门禁记录表,找出: – 所有符合””可疑人员事件””定义的告警记录 alarm\_id。 要求: – 将alarm\_id 按照字典序升序排序; – 使用英文半角逗号,拼接为一个字符串,作为本题最终答案。 【答案标准】 若最终识别出 A005 和 A017 为可疑人员事件,则提交:A005,A017

答案 A005,A017,A023,A045,A067,A089

【题目3】区域研判 恒盾科技将在以下条件全部同时满足的区域定义为””重点安防区域””: 1. 该区域属于 【题目1】 中识别出的””高风险摄像头区域””; 2. 在该区域内,至少存在一条 【题目2】 中识别出的””可疑人员事件””对应的告警记录(通过告警日志表中的 camera\_id 关联摄像头表获取区域信息); 3. 在该区域内,高严重性告警占比 ≥ 30%(包含等于30%的情况),其中高严重性告警占比 = (该区域内 severity = 3 的告警数量 / 该区域内所有告警记录总数)× 100%; 4. 在该区域内,门禁异常率 ≥ 15%(包含等于15%的情况),其中门禁异常率 = (该区域内 result = ""未通过"" 的门禁记录数量 / 该区域内所有门禁记录总数)× 100%。 请你基于附件中的摄像头信息表、告警日志表以及门禁记录表,结合前两题的分析结果,给出: – 所有””重点安防区域””的区域编号。 要求: – 将区域编号按照字典序升序排序; – 使用英文半角逗号,拼接为一个字符串,作为本题最终答案。 【答案标准】 若最终只有 A03 满足条件,则提交:A03 若最终 A02、A07 同时满足条件,则提交:A02,A07

答案&nbsp;A01,A05


免责声明:

本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。

任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。

本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我

本文转载自:一把梭安全 一把梭安全 一把梭安全《2026第四届全国数据安全职业技能竞赛暨第四届全国安防行业职业技能竞赛“美亚柏科杯”数据安全管理员职业技能竞赛总决赛第一批18号上午wp》

评论:0   参与:  0