DawgCTF 2026 writeup
字数 14845
更新时间 2026-04-18 12:17:19
DawgCTF 2026 Writeup 与知识解析教学文档
概述
本文档基于DawgCTF 2026比赛的Writeup内容,系统性地总结和解析了其中涉及的各类安全技术、解题思路与关键知识,旨在为CTF学习者和安全研究人员提供详尽的技术参考。
目录
- MISC (杂项)
- OSINT (开源情报)
- Protocol Analysis (协议分析)
- Cryptography (密码学)
- Pwn (二进制漏洞利用)
- Reverse (逆向工程)
- Fwn (取证与网络)
- 附录:关键思路与工具
1. MISC (杂项)
1.1 Discord Challenge
- Flag:
DawgCTF{3nj0y_th3_c0mp3t1t10n!}
1.2 Frequency 3000
- 核心文件:
Space Pilot 3000 Transcript.txt和flag.txt - 解题思路:
- 数据解析:
flag.txt中的内容是一串十六进制字节。将其解码为ASCII,会得到格式为DawgCTF{ 390 1002 580 ... }的字符串,其中花括号内是一系列数字。 - 关键提示:题目名
Frequency 3000和描述暗示了需要做“频率统计”。 - 数据预处理:
- 删除
Space Pilot 3000 Transcript.txt末尾的假Flag行:{Fake_Flag_For_Reasons}},以防止统计污染。 - 将文本内容转换为小写。
- 删除
- 核心操作:
- 统计转录文本(
Space Pilot 3000 Transcript.txt)中每个字符(包括空格、标点)的出现次数。 - 建立“出现次数 -> 对应字符”的映射。
- 将
flag.txt解码后得到的数字序列,通过此映射反查出对应的字符,并按顺序拼接。
- 统计转录文本(
- 数据解析:
- 技术要点:十六进制解码、字符频率分析、脚本自动化处理。
- Flag:
DawgCTF{whyn0tzo!db3rg?}
1.3 Hiding in Plain Sight
- 解题思路:图片经过缩小、模糊化处理后,会显现出一张人脸的图案,此人为前美国总统。
- 核心知识点:隐写术中的“低频信息合成图像”或“视觉隐写”。
- Flag:
DawgCTF{Barack_Obama}
1.4 Hiding in Plain Sight 2
- 解题思路:提取图片每个像素RGB通道的最低有效位(LSB)。
- 操作步骤:
- 使用工具(如
stegsolve、zsteg或编写Python脚本)提取RGB三个通道的最低有效位平面。 - 组合这些位平面,可能会生成一张新的隐藏图片。
- 使用工具(如
- 隐藏信息:提取出的图片显示一位戴着绿色“U C ME”帽子、做招牌手势的著名摔跤手。
- Flag:
DawgCTF{John_Cena}
1.5 crazy? i was crazy once! they locked me in a
- 解题思路:
- 附件
crazy.txt是一个不断重复crazy? i was crazy once... it drove me ... crazy!的单行长文本。 - 仔细观察,每轮重复的结尾,都会多出一个不完整的字符碎片(如
}pl,eh_,dne)。 - 关键步骤:
- 收集这些碎片。
- 从文件的末尾开始,向前读取这些碎片。
- 将每个碎片反转。
- 拼接所有反转后的碎片,得到一个有意义的字符串。文件末尾的
waD反转后是Daw,提示了Flag前缀。
- 附件
- 核心知识点:模式识别、字符串操作(反转、拼接)。
- Flag: 由文档信息推断,应为类似
DawgCTF{...}的格式,具体内容需执行上述步骤得出。
1.6 HAZMAT Series
本系列题目考察危险品运输标识知识。
-
HAZMAT 1:
- 识别:图片中的危险品牌号为 UN1049。
- 查证:查阅Airgas的安全数据表(SDS)或相关运输资料,UN1049的正式运输名称为“HYDROGEN, COMPRESSED”,同义词包括 Hydrogen, Dihydrogen, Molecular hydrogen, H₂。
- Flag:
DawgCTF{COMPRESSED_HYDROGEN}
-
HAZMAT 2:
- 关键:题目询问的是
type of storage container(储存容器类型)。 - 陷阱:需注意不是具体型号(UX-30)或结构角色(overpack),而是标签上明确标注的包装类别。
- 答案:标签上写有 Type B(U) package。
- Flag:
DawgCTF{TYPE_BU_PACKAGE}
- 关键:题目询问的是
-
HAZMAT 3:
- 识别:图片中为UCARTHERM导热液。道琼斯(Dow)产品页面说明其主要成分为乙二醇(Ethylene glycol),并被染成荧光黄色。
- 查证:查阅UCARTHERM的SDS,在DOT运输信息部分找到:UN 3082, Class 9, Environmentally hazardous substance, liquid, n.o.s. (Ethylene glycol)。
- Flag:
DawgCTF{3082}
1.7 ZAP!
- 背景:题目涉及盘形悬式绝缘子型号识别。
- 解题步骤:
- 特征分析:根据图片中绝缘子的尺寸(10英寸)、伞裙数量、裙边长度、金具(帽)样式进行判断。
- 标准对照:参考NIA (National Insulator Association) 的分类标准。ST编号系统依据直径、伞裙数量和裙边长度划分。
- 细节匹配:
- 瓷体压印文字类似“LOCKE / 10000 TEST / 20000 M&E”。
- 金具上文字类似“1840… / GE / USA”。
- 确定型号:综合特征,在LOCKE的产品线中,符合“10英寸、现代压缩帽(compression-cap)”且瓷体压印为上述描述的型号是 ST-4626F。网上资料也显示存在“1840-K3”的类似型号作为旁证。
- Flag:
DawgCTF{ST-4626F}
2. OSINT (开源情报)
2.1 Gateway to the Turnpike
- 图片信息:图中可见“S Breezewood Rd”路牌和I-70 East/West指示牌。
- 地理位置:此布局是宾夕法尼亚州(Pennsylvania) Breezewood地区的典型特征,即以地面道路连接I-70和Pennsylvania Turnpike的“Gateway to the Turnpike”。
- 目标信息:该地区的邮政编码(ZIP code)。
- 答案:15533。
- 参考链接:
https://www.paturnpike.com/news/details/2024/09/24/pa-turnpike-to-redesign-breezewood-interchange-with-a-connection-to-interstate-70 - Flag:
DawgCTF{15533}
2.2 The Temple of Doom
- 建筑特征:阶梯金字塔(Ziggurat)风格的大型建筑。
- 地点搜索:此建筑是加州Laguna Niguel的 Chet Holifield Federal Building。
- 俗称:该建筑常被当地人及资料称为“the Ziggurat”或“the Ziggurat Building”。
- 参考链接:美国总务管理局(GSA)官网关于该建筑的处置新闻稿。
- Flag:
DawgCTF{The_Ziggurat_Building}
2.3 Дмитрий-шесть
- 题目线索:“Дмитрий-шесть” 是俄语“Dmitriy-shest‘”,暗示 D-6。
- 图片内容:隧道、列车、防爆门等地下设施照片。
- 情报来源:多份网络资料指出,这些照片属于莫斯科的秘密地铁网络,代号为 D-6,也被非正式地称为 Metro-2。
- 更详细信息:解密文件显示,该系统官方项目代号为 ЧЗ-1090 (ChZ-1090)。
- 答案约束:题目要求6个字符、全大写。在相关名称中,METRO2 符合要求,且与D-6线索呼应。
- 参考链接:相关博客和维基百科页面。
- Flag:
DawgCTF{METRO2}
2.4 Better Call AT&T!
- 场景识别:图片为美剧《风骚律师》(Better Call Saul) 中的停车场镜头,背景有AT&T标志。
- 定位方法:
- 确认剧集主要在Albuquerque拍摄。
- 搜索“Better Call Saul parking garage AT&T Albuquerque”等关键词。
- 结合外部城市风貌和AT&T标志,定位到 Albuquerque Convention Center Parking Garage (阿尔伯克基会议中心停车场)。
- 信息获取:查找该停车场的公开联系电话。
- 答案:电话号码 (505) 768-4575。
- Flag:
DawgCTF{5057684575}
2.5 Locksmith
- 锁具识别:图片为SIMPLEX 900系列机械按钮锁。特征:泪滴形面板、5个圆形按钮、标有罗马数字、旋钮带SIMPLEX字样。
- 尺寸查询:查阅官方技术规格表(如dormakaba官网或分销商PDF),外侧锁体高度为 3¾ 英寸 (95 mm)。
- 答案格式:型号_尺寸。
- Flag:
DawgCTF{SIMPLEX900_95MM}
2.6 Computer Repair II
- 笔记本型号识别:根据图片特征(两侧矩形转轴、右上圆形电源键、带小键盘的键盘布局、厚边框、Dell标志)判断为 Dell Latitude E6540。
- 屏幕尺寸查询:查阅Dell官方规格文档,E6540的显示屏对角线尺寸为 15.60 inches。
- Flag:
DawgCTF{15.6IN}
2.7 Computer Repair III
- Dock型号识别:根据描述(6个大写字母/数字),对应Dell的雷电扩展坞型号 WD19TB。
- 验证:Dell官方支持页面名称为“Dell Thunderbolt Dock - WD19TB”。
- Flag:
DawgCTF{WD19TB}
2.8 Plane Spotting Pt. 1
- 图片线索:加油车上印有“USAirports”。
- 信息查询:USAirports官网声明其位于 Frederick Douglass–Greater Rochester International Airport (ROC),并为该机场提供服务。
- 验证:ROC机场官网的航司列表中包含西南航空(Southwest),与图片信息相符。
- 答案:机场三字码 ROC。
- Flag:
DawgCTF{ROC}(文档未明确给出,但根据上下文推断)
2.9 The Lookout's Legend
- 地点识别:山上有Sheetz广告牌,而Sheetz总部在Altoona, PA。这座山是 Wopsononock Mountain。
- 关键信息:资料记载,从山上的观景塔(The Lookout)天气好时可以眺望六个县(six counties),与题目描述“offers a view that spans six counties”完全吻合。
- 昵称:当地资料将该山的昵称写为 “Wopsy”。
- Flag:
DawgCTF{Wopsy}(文档未明确给出,但根据上下文推断)
2.10 Plane Spotting Pt. 2
- 解题方式:题目提示第三题的密码是第二题的Flag。由于第二题Flag未知,但格式固定(
DawgCTF{...}),可采用暴力破解的方式尝试。 - Flag:
DawgCTF{NAS}(文档示例结果)
3. Protocol Analysis (协议分析)
本系列挑战基于一个统一的通信协议手册。核心思路是理解协议设计漏洞,并伪造或操纵消息流。
3.1 Challenge 1: Can You Hear Me?
- 漏洞:Bob不进行任何身份验证或加密。只要收到格式正确的消息
"Hello", B, "this is", A, "give me the flag",就会回复Flag。 - 攻击:直接伪装成Alice向Bob发送此消息。
- Flag:
DawgCTF{PR0T0C0LS_R_3ZPZ}
3.2 Challenge 2: Liar
- 漏洞:Bob在接收消息时,检查消息体中的发送者名字字段是否为
charlie,而不验证实际发送者身份。 - 攻击:直接向Bob发送消息
"Hello", B, "this is", charlie, "give me the flag"。 - Flag:
DawgCTF{CH4NG3_0F_PL4N5}
3.3 Challenge 3: Missing
- 漏洞:Alice角色缺席,但Bob的脚本仍然有效。Bob在启动后会等待接收一条符合格式的消息,收到后即发送Flag。
- 攻击:直接向Bob发送消息
"Hello", B, "this is", A, "give me the flag"。 - Flag:
DawgCTF{N0_0N3_3LS3_H0M3}
3.4 Challenge 4: Real Security!
- 协议:Alice请求Bob用指定的对称密钥(k)和nonce(d)加密Flag并返回。Bob接收请求格式为
"Hello", B, "this is", A, "encrypt the flag with this symetric key and nonce", k, d。 - 漏洞:Bob会使用攻击者提供的
k和d进行加密。攻击者已知k和d,因此可以解密返回的密文。 - 利用链:
- 生成自己的对称密钥
k和nonced。 - 向Bob发送伪造的Alice请求,携带自选的
k和d。 - Bob返回加密后的Flag。
- 使用已知的
k和d,调用/util/sym_decrypt解密得到Flag。
- 生成自己的对称密钥
- Flag:
DawgCTF{N0T_S0_S3CR3T_K3Y}
3.5 Challenge 5: Is This Real?
- 协议:Alice请求Bob用其公钥(pubA)加密Flag。Bob接收请求格式为
"Hello", B, "this is", A, "send the flag encrypted with this asymmetric key", pubX。 - 漏洞:Bob不验证
pubX是否属于Alice,仅对消息中携带的公钥进行加密。 - 利用链:
- 生成自己的非对称密钥对(
pubX,privX)。 - 向Bob发送伪造的Alice请求,但将公钥字段替换为自己的
pubX。 - Bob返回用
pubX加密的Flag。 - 使用自己的私钥
privX,调用/util/asym_decrypt解密得到Flag。
- 生成自己的非对称密钥对(
- Flag:
DawgCTF{C3RT1F13D_1NS3CUR3}
3.6 Challenge 6: Sneedham-Chucker
- 协议:涉及三方(Alice, Bob, 攻击者)。最终Bob发送的密文格式为
{[FLAG]}h(nA+nB),其中h是哈希函数。攻击者获得了nA,nB,h(nA+nB)以及bob2字段。 - 关键:
bob2字段格式为d:...,其长度为84个十六进制字符,推测为24字节nonce + 60字节ciphertext的组合。 - 解密:
- 计算共享密钥
key = h(nA+nB)。 - 从
bob2中分割出前24个十六进制字符作为nonce,剩余部分作为ciphertext。 - 使用
key,nonce,ciphertext调用/util/sym_decrypt。
- 计算共享密钥
- Flag:
DawgCTF{FORM3RLY_S3CUR3}
3.7 Challenge 7: Mediation
- 场景:Alice不直接与Bob通信。攻击者作为中间人(X)进行转接和伪造。
- 利用链:
- 从
/alice获取pubA, alice, certA, nA。 - 将这条消息转发给
/bob。 - Bob回复
pubB, bob, certB, nB, sigB。 - 攻击者生成自己的密钥对
(pubX, privX)并为X申请证书certX。 - 用
privX对(X, nB, nA)进行签名,得到sigX。 - 向Alice发送:
pubX, X, certX, nB, {X, nB, nA}privX。这里用Bob的nB冒充nX。 - Alice验证后,回复
{alice, nB, nA}privA。 - 将此消息转发给Bob,Bob验证签名后即发送Flag。
- 从
- Flag:
DawgCTF{F33L1NG_1NS3CUR3}
3.8 Challenge 8: Reflection
- 场景:攻击者可以同时与Alice和Bob交互,并尝试“反射”消息。
- 关键理解:Bob最后一步验证签名时,验证的文本是
(bob, nA2, nB),而不是(alice, nA2, nB)。需要诱导Alice对包含bob的文本进行签名。 - 利用链:
- 从Alice处获取
nA1。 - 向Bob发送
pubA, alice, certA, nA1,获取Bob的nB。 - 向Alice发送
pubB, bob, certB, nB(使用Bob的身份),Alice会回复{bob, nA2, nB}privA。 - 将此签名发送给Bob,Bob验证通过后发送Flag。
- 从Alice处获取
- Flag:
DawgCTF{4SK_4ND_U_SH4LL_R3C31V3}
3.9 Challenge 9: Oracle
- 漏洞:Alice可以被当作一个解密/重加密预言机(Oracle)。她会对任何格式为
pubX, X, certX, {{m}pubA, X}pubA, alice的消息,执行以下操作:用私钥解外层,再用私钥解内层得到m,然后将m用pubX加密后发送。 - 利用链:
- 从Bob处获取初始密文:
pubB, bob, certB, {{FLAG}pubA, bob}pubA, alice。 - 将Bob的密文(外层)直接发送给Alice。Alice会解开外层,得到内层密文
{FLAG}pubA,但此时内层密文是用Alice公钥加密的,Alice会尝试用pubX(攻击者提供的公钥)重新加密它。为了得到明文,需要让Alice解开内层。 - 生成自己的密钥对(
pubX,privX)和证书certX。 - 构造消息
pubX, X, certX, {{FLAG}pubA, X}pubA, alice发送给Alice。这里的内层密文{FLAG}pubA来自上一步。Alice会解开两层加密,得到FLAG明文,然后用pubX加密后返回。 - 攻击者用
privX解密返回的密文,得到Flag。
- 从Bob处获取初始密文:
- Flag:
DawgCTF{ST4R3_1NTO_TH3_VO1D}
4. Cryptography (密码学)
4.1 Artemis Gordon
- 密码类型:Lunar Alphabet(月相字母表)。由艺术家Leandro Katz创造,用不同的月相图片代表字母。
- 解题步骤:
- 对照标准的Lunar Alphabet表(可在MoMA或dCode等网站找到)。
- 将题目中的7张月相图从左到右与字母表比对。
- 解码结果:
MOONMAN - Flag:
DawgCTF{MOONMAN}
4.2 I Hate Physics!
- 隐藏信息方式:在文本文件
STUDYME.txt的每一行中,提取首字符和尾字符,并按顺序拼接。 - 结果:拼接出的字符串为
DawgCTF{therm0dyn4mic5sucks!}Thisisn0tpartoftheflag!,真正的Flag是第一个}之前的部分。 - Flag:
DawgCTF{therm0dyn4mic5sucks!}
4.3 Vault Breaker
- 密码类型:Pigpen密码及其变体(Dada Urka)。结合了迪士尼(唐老鸭、史高治)背景。
- 符号特征:由方框/开口框的线条以及0、1、2个点组成。
- 解密方法:
- 将每个符号对照Pigpen/Dada Urka密码表进行翻译。框线形状决定字母组,点的数量决定组内具体字母。
- 将翻译出的字母依次拼接。
- 明文:
EXTREMELYLONGPASSWORD - 格式化:根据Flag格式,将长密码用下划线连接。
- Flag:
DawgCTF{EXTREMELY_LONG_PASSWORD}
4.4 Six Seven
- 加密方式:
- 随机生成1字节的起始值
start。 - 密钥
key[0] = start。 - 后续密钥字节由前一个字节通过
gen()函数递推生成:key[i] = gen(key[i-1])。 - 密文
ct = key xor flag。
- 随机生成1字节的起始值
- 已知条件:已知Flag格式前缀为
DawgCTF{。 - 攻击方法:暴力破解
start(0-255)。- 遍历所有可能的
start值。 - 根据
gen()函数生成完整的key流。 - 用生成的
key与已知密文进行异或,得到可能的明文。 - 筛选出以
DawgCTF{开头的明文,即为Flag。
- 遍历所有可能的
- Flag:
DawgCTF{please_use_secrets_in_your_stream_ciphers_69bfe194af43f0cd}
5. Pwn (二进制漏洞利用)
5.1 Stacking Flags
- 漏洞类型:栈缓冲区溢出。
- 漏洞函数:
vulnerable_function()中使用不安全的gets(buffer)读取输入到char buffer[64]中。 - 保护机制:编译参数包含
-fno-stack-protector -no-pie,无栈保护和无地址随机化。 - 利用目标:
win()函数,它会打开并打印flag.txt。 - 利用步骤:
- 计算偏移:
buffer大小为64字节,加上保存的RBP(8字节),返回地址位于64 + 8 = 72字节之后。 - 构造Payload:
72字节填充 + win函数地址。 - 发送Payload,劫持控制流跳转到
win()。
- 计算偏移:
- Flag:
DawgCTF{$taching_br1cks}
5.2 Just Print It
- 漏洞类型:格式化字符串漏洞。
- 漏洞点:
printf(buffer)直接打印用户输入。 - 利用目标:将
puts@GOT的地址修改为win()函数的地址,使得后续调用puts("\nGoodbye!")时实际执行win()。 - 利用步骤:
- 确定偏移:通过泄露栈内容确定用户输入的字符串在格式化字符串参数中的位置(例如,第6个参数)。
- 获取地址:获取
puts@GOT地址和win()函数地址。 - 构造Payload:使用
%n等格式化字符串写原语,分批次(通常分两字节)将win()的地址写入puts@GOT指向的内存。
- Flag:
DawgCTF{s3v7er_PWNed!}(Writeup中为s3v3r_PWNed!,以文档为准)
6. Reverse (逆向工程)
6.1 Cheater Cheater...
- 游戏逻辑:
- 游戏胜利条件固定为
score >= 6942069。 - 胜利后,程序以
score为参数,计算key = ((10*score)+1)^4,并用此key和固定的IV通过AES解密一段Base64密文,得到Flag。
- 游戏胜利条件固定为
- 高分栏:游戏中直接显示了目标高分
Highscore: 6942069。 - 解法:无需进行游戏,直接取
score = 6942069,运行游戏的解密逻辑即可。 - Flag:
DawgCTF{ch3at3R_ch34t3r_pumk1n_34t3r!}
6.2 Dust to Dust
- 编码规则 (
encoder.c):- 将二值图(0为黑,1为白)按2x3的块切割,每个块6个比特。
- 将6比特二进制数转换为十进制(0-63)。
- 将该十进制数加上
0x20(32),使其落在可打印ASCII字符范围内。 - 输出字符,每行末尾用
}分隔,文件末尾用~结束。
- 解码步骤:
- 读取
output.txt,按}分割行,忽略最后的~。 - 对每个字符,将其ASCII码减去32,得到原始数值(0-63)。
- 将数值转换为6位二进制。
- 将这6位分别填入结果图像的两行中:前3位为上一行,后3位为下一行。
- 重构出完整的二值图像。
- 读取
- Flag:
DawgCTF{Th1s_w4s_1nspIr3d_By_UND3RT4L3!}
6.3 Data Needs Splitting
- 数据来源:数据被隐藏在DNS服务器的TXT记录中。
- 提取步骤:
- 查询根域的TXT记录,得到一系列以两位数字编号开头的base64编码片段(00..16)。
- 按编号顺序排序这些片段。
- 拼接所有片段(去除编号前缀),得到一个完整的base64字符串。
- 对base64字符串解码,得到一个JAR(ZIP格式)文件。
- 分析JAR:
Loader.class和Main.class。assets/file.dat可能包含加密数据。
- 逆向核心逻辑:
validate()函数对输入字符串进行逐字符异或操作,并将结果整数拼接成字符串,与一个目标字符串比较。 - 解法:逆向
validate()函数的逻辑,从目标字符串反推出正确的输入。 - Flag:
DawgCTF{J@v@_My_B3l0v3d}
7. Fwn (取证与网络)
7.1 Gen-Z Found My Registry
- 文件:Windows注册表导出文件
chal.reg。 - 异常点:存在名为
+7和-6的恶意服务,其参数包含提示evens和odds。 - 核心数据:注册表中存在一系列键值,键名为数字1-26,键值为单个字符。
- 步骤:
- 按键名顺序(1到26)拼接所有字符值,得到一串编码文本。
- 根据服务名提示进行变换:
- 偶数位(第2,4,6...位)的字符 ASCII码 + 7。
- 奇数位(第1,3,5...位)的字符 ASCII码 - 6。
- 将变换后的ASCII码转换回字符,得到Flag。
- Flag:
DawgCTF{qu33n_0f_th3_h1v3}
7.2 I Love Bacon!
- 文件:网络抓包文件
*.pcap。 - 主要流量:DNS隧道流量(随机子域名查询,TXT记录响应)。
- 异常流量:筛选出TTL值为
1337的DNS数据包(请求和响应)。 - 关键响应包:包号534, 910, 1824的TXT记录响应。
- 数据提取:这些TXT记录的内容看起来像Base32编码字符串。
- 解码:对这三个TXT记录进行Base32解码,得到三段明文:
DawgCTF{s1zzlin_succul3nt_c2_b4con}
- 拼接:得到完整Flag。
- Flag:
DawgCTF{s1zzlin_succul3nt_c2_b4con}
7.3 The Step After the PCAP
- 流量特征:指向同一目的IP和端口
45.76.123.45:443,且具有相同的JA3指纹d2b4c6a8f0e1d3c5b7a9f2e4d6c8b0a1的TLS流量。 - 数据形式:每条流中传输着5个字符的数据分片。
- 解题步骤:
- 在Wireshark或使用
tshark筛选出所有符合上述特征的流。 - 按数据包的时间戳升序排列。
- 提取每条流中的应用层数据(可能是TLS记录中的明文分片)。
- 将所有分片按顺序拼接起来。
- 在Wireshark或使用
- Flag:
DawgCTF{HBRPO_IG8F1_CBFNO_6B9M8_0O2RA_K1VRJ_NVGFY_GWWQC_38HYF_9SXME_COSFO_GYR3X_KXWNR_EK8PK_3YR9O_UDOCU_ZRENU_N5Z3J_QIP98_Q1ZXO_I65FD_HJK1E_YY37Q_9AH8R_VHS1K_3AQ6L_6GT6M_JXK87_AU5BH_XTPDP_FF5E8_II49K_Q71N8_MTZX2_72HPO_EVB9O_OAEDO_ECVE6_PR5N8_I4P40_MGG1W1}(文档中为长字符串,此处为示例格式)
7.4 Modem Metamorphosis
- 文件:
morph.pcap,包含HTTP流量。 - 分析:
- 主要访问
192.168.1.1:80(路由器后台)。 - 认证信息:
Authorization: Basic OmFkbWlu(base64解码为:admin,即用户名为空,密码为admin)。 - HTTP响应头:
WWW-Authenticate: Basic realm="WRT610N",揭示了设备型号。 - 管理页面信息:
- 固件版本:
Firmware Version: 1.00.00 B18 - 备份文件:链接指向
WRT610NV1_v1.00.00.cfg,确认型号为WRT610NV1。
- 固件版本:
- 固件升级:一个POST请求上传了新固件文件
openwrt-24.10.0-bcm47xx-generic-linksys_wrt610n-v1-squashfs.bin。
- 主要访问
- 信息提取:
- 设备厂家和型号:
Linksys WRT610NV1 - 原固件版本:
1.00.00B18(去除空格) - 新固件名称:
OpenWrt - 新固件版本:
24.10.0
- 设备厂家和型号:
- Flag格式:
DawgCTF{厂家_型号_原固件版本_新固件名称_新固件版本} - Flag:
DawgCTF{Linksys_WRT610NV1_1.00.00B18_OpenWrt_24.10.0}
7.5 Let's Avoid Doing Math
- 文件:
threat_depth_analysis.log,包含120条记录,每条有Known Threat Depth(真实值)和Detected Threat Depth(预测值)。 - 分类:
minor,medium,major。 - 任务:按重要性从低到高的顺序(
minor->medium->major),为每个分类计算一对多的二分类指标:- 准确率 (Accuracy)
- 假阳性率 (False Positive Rate, FPR)
- 假阴性率 (False Negative Rate, FNR)
- 混淆矩阵(基于文档数据):
- True Minor (40): Pred as Minor=38, Med=0, Maj=2
- True Medium (40): Pred as Minor=3, Med=30, Maj=7
- True Major (40): Pred as Minor=1, Med=8, Maj=31
- 计算:
- 以Minor为正类:
- TP=38, FN=2, FP=3+1=4, TN=30+7+31=68? (需复核: TN = 非minor样本中预测为非minor的 = 40(medium真实)-3+40(major真实)-1? 文档计算为76,可能包含更多True Negative样本)
- 根据文档结果:
Accuracy=0.95, FPR=0.05, FNR=0.05
- 以Medium为正类:
- TP=30, FN=3+7=10, FP=0+8=8, TN=38+2+31=71? 文档计算为
Accuracy=0.85, FPR=0.1, FNR=0.25
- TP=30, FN=3+7=10, FP=0+8=8, TN=38+2+31=71? 文档计算为
- 以Major为正类:
- TP=31, FN=1+8=9, FP=2+7=9, TN=38+0+30=68? 文档计算为
Accuracy=0.85, FPR=0.1125, FNR=0.225
- TP=31, FN=1+8=9, FP=2+7=9, TN=38+0+30=68? 文档计算为
- 以Minor为正类:
- 最终输出:9个用逗号分隔的数字。
- Flag:
DawgCTF{0.95,0.05,0.05,0.85,0.1,0.25,0.85,0.1125,0.225}
7.6 Stomach Bug
- 现象:访问目标地址,服务端持续输出十六进制数据。
- 分析:
- 数据以
89504e470d0a1a0a(PNG文件头) 开始,以49454e44ae426082(PNG文件尾 IEND) 结束,表明在不断重复输出同一张PNG图片的十六进制形式。 - 每行数据有编号(如
|000|,|001|...)。
- 数据以
- 重组步骤:
- 取从
|000|到|161|的数据块(第一张完整PNG)。 - 移除每行开头的
|编号|。 - 将所有十六进制字符串拼接。
- 将拼接后的十六进制字符串转换为二进制文件,保存为PNG。
- 取从
- 后续步骤:得到的PNG是一个二维码,扫描后得到另一张PNG图片(第二个二维码)。扫描第二个二维码,得到一段Base64编码字符串。解码该Base64字符串即可得到Flag。
- Flag: 解码后得到,格式为
DawgCTF{...}。
8. 附录:关键思路与工具总结
| 类别 | 核心思路 | 常用工具/技能 |
|---|---|---|
| MISC | 信息提取、编码转换、频率分析、视觉隐写、知识检索 | Python (collections.Counter, PIL), Stegsolve, zsteg, 搜索引擎 |
| OSINT | 地理定位、图片识别、公开信息关联、文档查询 | Google地图/街景, 维基百科, 厂商官网, 政府/机构网站 |
| 协议分析 | 理解协议状态机、识别逻辑漏洞、中间人攻击、密码学应用 | 网络调试工具(如netcat, pwntools), 自定义脚本 |
| Crypto | 识别古典密码、理解流密码弱点、编码分析 | dCode, CyberChef, Python (base64, codecs) |
| Pwn | 识别漏洞类型、计算偏移、构造ROP链、格式化字符串利用 | pwntools, gdb, checksec, ROPgadget |
| Reverse | 静态/动态分析、理解程序逻辑、逆向算法 | IDA Pro/Ghidra, x64dbg/x32dbg, JD-GUI (for Java) |
| Forensics | 文件格式分析、数据提取、流量分析、注册表分析 | Wireshark/tshark, binwalk, foremost, Registry Explorer, Python |
通用建议:
- 仔细审题:题目名、描述、附件名、文件内容都可能包含关键提示。
- 自动化脚本:对于重复性操作(如频率统计、暴力破解、协议交互),编写Python脚本是高效解题的关键。
- 信息关联:将不同来源的信息(如图片、文本、网络数据)进行关联思考。
- 利用外部知识:许多题目(如HAZMAT, OSINT)需要结合公开的标准、文档或地理知识。
- 分步验证:在复杂挑战(如协议分析)中,逐步验证每一步的输入输出,确保理解协议状态。
相似文章
相似文章