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

最终 flagsknb{l3v3ldb_sn4ppy_c4n7_h1d3_m3}

教学要点

  • 文件格式伪装是常见的隐写技术
  • 掌握多种文件格式的识别方法
  • LevelDB 数据库结构和分析方法

二、Reverse 逆向工程类题目

2.1 GIF-Zipper

加密原理

# 原加密过程
r, g, b = 像素RGB值
encoded_value = r << (g + 16) << (b + 8)

逆向分析步骤

第一步:理解加密算法

  • RGB 像素值被编码为超大整数
  • 使用位运算组合三个颜色通道
  • 原始图像信息被转换为数字序列

第二步:解密过程

  1. 读取数字序列文件
  2. 前两个数字通常是图像的宽度和高度
  3. 逆向位运算恢复原始 RGB 值
  4. 重构图像

第三步:结果分析

  • 最终得到二维码图像
  • 扫描二维码获得 flag

教学要点

  • 图像像素数据的编码解码技术
  • 位运算在数据隐藏中的应用
  • 二维码生成和识别原理

2.2 Fubukkit

题目背景:基于 Minecraft Bukkit 插件的逆向分析

核心逻辑

  1. Flag 被分割成字节数组(长度 ≤ 44)
  2. 每个字节被拆分为两个 4-bit 片段
  3. 每个片段映射到特定的成就名称:chal:<index>_<value>
  4. 必须按正确顺序触发成就

依赖关系分析

v0_7 → v1_* → v2_* → ... → goal

解题步骤

第一步:逆向分析 JAR 文件

  • 使用 jadx 等工具反编译 Java 字节码
  • 分析成就触发逻辑和依赖关系

第二步:重建路径

  • 根据代码中的依赖关系确定正确的成就触发顺序
  • 每个成就名称中的数字代表 4-bit 值

第三步:数据重组

  • 将每两个连续的 4-bit 值组合成一个字节
  • 将所有字节组合成完整的 flag

最终 flagsknb{bukkit_wo_bakkit}

教学要点

  • Java 字节码逆向分析技术
  • 数据分片和重组算法
  • 状态机或依赖关系分析

2.3 風が吹けば桶屋が儲かる

题目特点:多文件逆向工程

解题方法

第一步:文件分析

  • 题目提供大量 class 文件
  • 每个 class 文件包含四个字节的有效数据
  • 组合所有数据后生成 PNG 图片

第二步:批量处理

  • 编写脚本自动化解析所有 class 文件
  • 动态解析每个文件中的位移量和加法偏移量

第三步:图像重构

  • 提取并组合所有字节数据
  • 生成最终的 PNG 图像文件

最终 flagsknb{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

具体攻击场景

  1. 权限检查使用 user=admin(第一个参数)
  2. 业务逻辑使用 user=user(最后一个参数)
  3. 从而绕过权限控制

教学要点

  • 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 培训和网络安全学习的参考资料。

相似文章
相似文章
 全屏