sknbCTF 2025 部分题目wp
字数 2962 2025-11-26 12:20:37
sknbCTF 2025 题目解析与教学文档
一、Misc 杂项类题目
1.1 Welcome
题目描述:简单的欢迎题目,用于熟悉比赛环境。
解题方法:
- 在 Discord 平台搜索指定前缀即可找到相关信息
- 最终 flag:
sknb{https://youtu.be/0RG7iNERF4s}
教学要点:
- CTF 比赛中通常会有简单的欢迎题目帮助选手熟悉平台
- 社交平台(Discord)是CTF比赛重要的信息交流渠道
1.2 PIN Authenticator PIN
漏洞原理:Python 对象身份比较漏洞
技术分析:
- 后端代码错误地使用
is进行 PIN 码比较而非== is操作符检查对象身份(内存地址是否相同),==检查值是否相等SECRET_PIN是模块级变量,存在于 Python 内存中
YAML 反序列化漏洞利用:
username: admin
pin_code: !!python/name:__main__.SECRET_PIN
YAML 标签说明:
!!python/name:标签直接引用 Python 模块中的对象- 解析后得到内存中相同的
SECRET_PIN对象 - 通过
is身份验证检查
教学要点:
- 理解 Python 中
is与==的区别 - 掌握 YAML 反序列化安全风险
- 学习 Python 对象引用机制
1.3 PIN Authenticator revenge
题目特点:前一道题目的进阶版本,但核心漏洞未修复
解题方法:
- 使用相同的 payload:
username: admin
pin_code: !!python/name:__main__.SECRET_PIN
教学要点:
- CTF 中经常出现同一漏洞的变种题目
- 服务端口变化(5000→5050)不一定是漏洞修复标志
- 需要分析核心逻辑是否真正改变
1.4 DB Mirage
文件分析技术:
第一步:文件类型识别
- 使用 010 Editor 等十六进制编辑器分析文件
- 文件头:
53 51 4C 69 74 65 20 66 6F 72 6D 61 74 20 33 00(SQLite format 3) - 但在偏移 0x60(96 字节)处发现 GZIP 魔术头:
1F 8B 08
第二步:数据提取
- 文件实质是 SQLite 外壳内嵌 GZIP 压缩数据
- 删除前 96 字节 SQLite 头,保留 GZIP 数据
- 解压 GZIP 得到 TAR 归档文件
- 再次解压得到 LevelDB 数据库
第三步:LevelDB 数据分析
- 使用专业工具(如火眼)分析 LevelDB
- 数据格式:
_welcome_to_sknbCTF!!!_<char> - 提取每个键值对末尾的字符组合成 flag
最终 flag:sknb{l3v3ldb_sn4ppy_c4n7_h1d3_m3}
教学要点:
- 文件格式伪装是常见的隐写技术
- 掌握多种文件格式的识别方法
- LevelDB 数据库结构和分析方法
二、Reverse 逆向工程类题目
2.1 GIF-Zipper
加密原理:
# 原加密过程
r, g, b = 像素RGB值
encoded_value = r << (g + 16) << (b + 8)
逆向分析步骤:
第一步:理解加密算法
- RGB 像素值被编码为超大整数
- 使用位运算组合三个颜色通道
- 原始图像信息被转换为数字序列
第二步:解密过程
- 读取数字序列文件
- 前两个数字通常是图像的宽度和高度
- 逆向位运算恢复原始 RGB 值
- 重构图像
第三步:结果分析
- 最终得到二维码图像
- 扫描二维码获得 flag
教学要点:
- 图像像素数据的编码解码技术
- 位运算在数据隐藏中的应用
- 二维码生成和识别原理
2.2 Fubukkit
题目背景:基于 Minecraft Bukkit 插件的逆向分析
核心逻辑:
- Flag 被分割成字节数组(长度 ≤ 44)
- 每个字节被拆分为两个 4-bit 片段
- 每个片段映射到特定的成就名称:
chal:<index>_<value> - 必须按正确顺序触发成就
依赖关系分析:
v0_7 → v1_* → v2_* → ... → goal
解题步骤:
第一步:逆向分析 JAR 文件
- 使用 jadx 等工具反编译 Java 字节码
- 分析成就触发逻辑和依赖关系
第二步:重建路径
- 根据代码中的依赖关系确定正确的成就触发顺序
- 每个成就名称中的数字代表 4-bit 值
第三步:数据重组
- 将每两个连续的 4-bit 值组合成一个字节
- 将所有字节组合成完整的 flag
最终 flag:sknb{bukkit_wo_bakkit}
教学要点:
- Java 字节码逆向分析技术
- 数据分片和重组算法
- 状态机或依赖关系分析
2.3 風が吹けば桶屋が儲かる
题目特点:多文件逆向工程
解题方法:
第一步:文件分析
- 题目提供大量 class 文件
- 每个 class 文件包含四个字节的有效数据
- 组合所有数据后生成 PNG 图片
第二步:批量处理
- 编写脚本自动化解析所有 class 文件
- 动态解析每个文件中的位移量和加法偏移量
第三步:图像重构
- 提取并组合所有字节数据
- 生成最终的 PNG 图像文件
最终 flag:sknb{now_you_can_say_bye_bye_bytecode_73c1d0}
教学要点:
- 批量文件处理技术
- 字节码动态分析
- 数据提取和图像重构
2.4 from-one-to-two
非预期解法:文本可视化分析
解题技巧:
- 直接对二进制文件进行文本可视化
- 在可视化的文本模式中发现隐藏的 flag
- 避免复杂的逆向分析过程
教学要点:
- 多种解题思路的重要性
- 文本可视化在逆向分析中的应用
- 非预期解法的创造性思维
三、Web 网络安全类题目
3.1 Parse Parse Parse
漏洞类型:参数污染(Parameter Pollution)
漏洞原理:
- 不同层级的解析器对重复参数的处理不一致
- 服务器可能用第一个参数做权限验证,用最后一个参数执行业务逻辑
利用方法:
?user=admin&user=user
具体攻击场景:
- 权限检查使用
user=admin(第一个参数) - 业务逻辑使用
user=user(最后一个参数) - 从而绕过权限控制
教学要点:
- HTTP 参数污染漏洞原理
- 不同 Web 框架对重复参数的处理差异
- 权限绕过技术
3.2 Auth Delegation
安全机制分析:
WAF 防护:
- 检测到
username === "admin"时重定向到/login?message=admin%20detected - 阻止直接使用 admin 账户登录
认证逻辑:
// Passport 策略只允许特定凭证
if (username === "admin" && password === "admin") {
return done(null, user);
}
权限检查:
// 登录成功后检查
if (req.user.username === "admin") {
// 返回 flag
}
绕过方法:
- 需要找到方法绕过 WAF 同时满足认证逻辑
- 可能涉及请求参数处理或会话管理漏洞
教学要点:
- 多层认证机制的安全分析
- WAF 绕过技术
- 会话管理和身份验证漏洞
四、通用技术总结
4.1 文件格式分析技术
- 十六进制文件头分析
- 多层文件格式识别
- 数据提取和重组技术
4.2 逆向工程技术
- 字节码反编译和分析
- 算法逆向工程
- 数据流跟踪和重建
4.3 Web 安全技术
- 输入验证绕过
- 认证授权漏洞
- 业务逻辑漏洞利用
4.4 解题方法论
- 多种解法尝试(预期解与非预期解)
- 工具链构建和自动化脚本开发
- 系统化的问题分析方法
本教学文档详细分析了 sknbCTF 2025 比赛中的关键技术点和解题方法,涵盖了 Misc、Reverse、Web 等多个领域的网络安全技术,适合作为 CTF 培训和网络安全学习的参考资料。