2025-强网杯主赛道-WriteUp
字数 3162 2025-11-11 12:34:26

CTF竞赛WriteUp教学文档:强网杯主赛道解题思路与技巧

密码学(CRYPTO)篇

1. check-little ezran

解题思路

  1. 问题分析:该题目基于NTRU密码系统,观察到多项式\(x^n+1\)含有因子\(x+1\)
  2. 关键发现:在模\(x+1\)下,由于\(x \equiv -1\),多项式可简化为系数正负交替相加。
  3. LLL算法应用
    • \(\frac{Z_q[x]}{x+1}\)环中,\(f\)\(g_i\)\(x+1\)后为小量。
    • 使用LLL(Lenstra-Lenstra-Lovász)格基约减算法区分这些量。
  4. 后续步骤
    • 获得coin后,使用Mersenne Twister(MT)预测密钥。

技术要点

  • NTRU特性利用:利用多项式环的特殊结构简化问题。
  • 格基约减:LLL算法在密码分析中的典型应用场景。

2. sk

解题思路

  1. 加密形式分析:加密公式为\(\Sigma_i P_i \cdot (u \cdot pt^i \pmod{p})\),是公钥相关的整数环上线性组合。
  2. 规模差异利用:公钥与模数\(p\)规模差异显著,适合LLL直接求解。
  3. 概率性处理:由于成功率非100%,需多次运行算法。
  4. 私钥伪造:获知明文后,构造有效私钥解密(无额外检查机制)。

技术要点

  • 线性代数攻击:利用公钥规模特性转化为线性求解问题。
  • LLL的适用条件:模数与系数规模差异大时的典型处理方法。

杂项(MISC)篇

1. Personal Vault

  • 方法:直接暴力搜索字符串"flag{"。

2. 谍影重重6.0

流量分析阶段

  1. 协议识别:UDP流量中包含RTP语音数据。
  2. 数据提取
    • Wireshark中启用RTP_UDP协议分析。
    • 通过"电话 → RTP → RTP流"定位数据流。
    • 导出音频流(Play Streams → 选择流 → Export from Cursor)。

音频处理阶段

  1. 音量增强:原始音频音量过小,需使用音频工具(如Audacity)进行增幅。
  2. 批量转换:编写脚本将pcap批量转为WAV格式并自动增益。

信息提取阶段

  1. AI语音转文字:使用语音识别工具转换音频内容。
  2. 关键数据发现
    • 发现数字串:651466314514271616614214660701456661601411451426071146666014214371656514214470
    • 观察特征:仅含0-7数字,判断为八进制编码。
  3. 解码过程
    • 八进制转十六进制:5f3eb916bf08e610aeb09f60bc955bd8
    • 解密7z压缩包获得音频和文本文件。

情报分析

  • 地点:双鲤湖西岸南山茶铺
  • 日期:24日(廿四)
  • 时间:辰时正过三刻(8点45分)
  • 历史关联:结合真实事件确定为1949年10月24日8时45分
  • 最终Flag:2a97dec80254cdb5c526376d0c683bdd

3. BlackPearl

数据识别

  • 文件类型:1200000_fc.raw为原始PCM数据
  • 采样率:1,200,000 Hz(与无线电信标相关)

GNU Radio处理

  1. 配置参数:Variable值设置为1,200,000
  2. 格式转换:RAW转WAV观察频谱特征

摩斯密码解码

  1. 频谱分析:在频谱图中识别摩斯电码模式
  2. 手动解码:对照摩斯电码表翻译信号
  3. Base32转换:解码后得到RAR文件

密码破解

  1. 视觉识别:在频谱图右上角发现隐藏数字
  2. 掩码爆破:对不清晰数字位进行爆破(模式:1d3c8c??82d?)
  3. 最终密码:1d3c8c7582dd
  4. Flag获取:flag{fa61cde1c174b-79a8-5cb9-3ea464e3dbca}

逆向工程(REVERSE)篇

1. tradre

反调试机制

  • Fork监控:父进程通过SIGALRM限制执行时间(60秒)
  • 断点检测:收到SIGCHLD时检查是否为int3指令
  • 控制流混淆:基于基本块状态转移函数动态决定执行路径

基本块结构分析

struct BasicBlock {
    void* branch_ptr;      // 分支指针
    int (*transfer_func)(); // 状态转移函数
    // 返回值含义:
    // 0/1 - jcc真假分支
    // 2 - 自定义ret指令
    // 3 - 兼容性call(库函数)
    // 4 - 自定义call指令
    // 5 - switch语句
}

恢复控制流

  1. 结构体转储:通过switch语句实现转储所有基本块关系
  2. 拓扑排序:以ret为叶子节点,忽略call目标分支
  3. 指令修补
    • 替换int3为原指令
    • 添加jmp指令修复非连续基本块
    • 重定位RIP寻址和跳转指令

加密算法识别

  • 伪随机数:srand(0x10000)生成掩码
  • AES实现:标准AES加密,密钥通过伪随机数生成
  • 密文恢复:异或伪随机数得到原始密文

2. butterfly

加密流程分析

  1. 分块处理:64比特数据块分割
  2. 加密步骤
    • 与64比特密钥逐字节XOR
    • 交换奇偶字节位置
    • 循环左移1位
    • 与密钥字节相加

实现技术

  • SIMD指令:pxor、psllq、psrlq、por、paddb等
  • MMX编码:密钥存储格式

漏洞利用(PWN)篇

1. flag-market

漏洞利用链

  1. 初始状态:flag读取后存放于堆地址
  2. 输入漏洞:输入255时scanf溢出到BSS段
  3. 利用步骤
    • 覆盖printf参数为格式化字符串
    • 泄露堆地址定位flag
    • 通过%s直接泄露flag内容

2. bph

漏洞分析

  1. 初始泄露:%s格式化字符串泄露地址信息
  2. 任意写漏洞:malloc失败时在size指向位置写0字节
  3. 利用技术:参考R3CTF2024类似题型

利用过程

  1. IO结构体攻击
    • 覆盖stdin的IO_buf_base末字节
    • 控制0x64字节写入范围(stdin到stdout)
    • 保留fgets触发的任意写能力
  2. 内存恢复:gdb dump原始内存数据并恢复
  3. 栈地址泄露:通过stdout泄露environ获取栈地址
  4. ROP链构造:openat-read-writeROP链获取flag

Web安全篇

1. yamcs

白盒测试发现

  • 项目性质:监控系统项目
  • 代码执行点:Text字段包含可执行Java代码

黑盒测试过程

  1. 功能分析:正常输出float类型监控值
  2. 命令执行尝试
    • 本地文件创建成功
    • 远程反弹shell失败(不出网)
  3. 回显带出:修改payload通过正常输出通道回显数据

2. 日志系统

漏洞链分析

  1. 参数解析不一致
    • 检查使用$_SERVER['QUERY_STRING']
    • 拼接使用$_GET数组
  2. 数组键名混淆:timestamp[day]与timestamp[day]$解析差异
  3. 文件上传绕过:上传00.php实现RCE

权限提升

  1. 服务发现:ps aux显示jboss 4.2.3(端口4446)
  2. 漏洞利用:参考y4er文章复现CVE漏洞
  3. payload构造:CCK1反序列化payload
  4. 代理设置:suo5建立HTTP代理
  5. 文件查找:find命令搜索flag文件

3. bbjv

漏洞识别

  • SpEL注入:存在Spring表达式语言注入漏洞
  • 目录遍历:读取System.getProperty("user.home")目录

利用方法

  • 属性修改:将user.home指向/tmp目录
  • Flag读取:直接读取目标文件

4. SecretVault

鉴权机制分析

  1. 权限要求:uid为0时获取flag
  2. 鉴权方式:基于X-User头(默认值0)
  3. 漏洞点:Connection头中的HTTP请求头不会被代理转发

利用方法

  • 头注入:Connection头中写入HTTP请求头
  • 默认值利用:使X-User保持默认值0通过鉴权

文档说明:本文档详细记录了强网杯主赛道各题目的解题思路、技术要点和实现方法,涵盖密码学、杂项、逆向工程、漏洞利用和Web安全等多个领域的关键技术点。

CTF竞赛WriteUp教学文档:强网杯主赛道解题思路与技巧 密码学(CRYPTO)篇 1. check-little ezran 解题思路 问题分析 :该题目基于NTRU密码系统,观察到多项式$x^n+1$含有因子$x+1$。 关键发现 :在模$x+1$下,由于$x \equiv -1$,多项式可简化为系数正负交替相加。 LLL算法应用 : 在$\frac{Z_ q[ x]}{x+1}$环中,$f$和$g_ i$模$x+1$后为小量。 使用LLL(Lenstra-Lenstra-Lovász)格基约减算法区分这些量。 后续步骤 : 获得coin后,使用Mersenne Twister(MT)预测密钥。 技术要点 NTRU特性利用 :利用多项式环的特殊结构简化问题。 格基约减 :LLL算法在密码分析中的典型应用场景。 2. sk 解题思路 加密形式分析 :加密公式为$\Sigma_ i P_ i \cdot (u \cdot pt^i \pmod{p})$,是公钥相关的整数环上线性组合。 规模差异利用 :公钥与模数$p$规模差异显著,适合LLL直接求解。 概率性处理 :由于成功率非100%,需多次运行算法。 私钥伪造 :获知明文后,构造有效私钥解密(无额外检查机制)。 技术要点 线性代数攻击 :利用公钥规模特性转化为线性求解问题。 LLL的适用条件 :模数与系数规模差异大时的典型处理方法。 杂项(MISC)篇 1. Personal Vault 方法 :直接暴力搜索字符串"flag{"。 2. 谍影重重6.0 流量分析阶段 协议识别 :UDP流量中包含RTP语音数据。 数据提取 : Wireshark中启用RTP_ UDP协议分析。 通过"电话 → RTP → RTP流"定位数据流。 导出音频流(Play Streams → 选择流 → Export from Cursor)。 音频处理阶段 音量增强 :原始音频音量过小,需使用音频工具(如Audacity)进行增幅。 批量转换 :编写脚本将pcap批量转为WAV格式并自动增益。 信息提取阶段 AI语音转文字 :使用语音识别工具转换音频内容。 关键数据发现 : 发现数字串:651466314514271616614214660701456661601411451426071146666014214371656514214470 观察特征:仅含0-7数字,判断为八进制编码。 解码过程 : 八进制转十六进制:5f3eb916bf08e610aeb09f60bc955bd8 解密7z压缩包获得音频和文本文件。 情报分析 地点 :双鲤湖西岸南山茶铺 日期 :24日(廿四) 时间 :辰时正过三刻(8点45分) 历史关联 :结合真实事件确定为1949年10月24日8时45分 最终Flag :2a97dec80254cdb5c526376d0c683bdd 3. BlackPearl 数据识别 文件类型 :1200000_ fc.raw为原始PCM数据 采样率 :1,200,000 Hz(与无线电信标相关) GNU Radio处理 配置参数 :Variable值设置为1,200,000 格式转换 :RAW转WAV观察频谱特征 摩斯密码解码 频谱分析 :在频谱图中识别摩斯电码模式 手动解码 :对照摩斯电码表翻译信号 Base32转换 :解码后得到RAR文件 密码破解 视觉识别 :在频谱图右上角发现隐藏数字 掩码爆破 :对不清晰数字位进行爆破(模式:1d3c8c??82d?) 最终密码 :1d3c8c7582dd Flag获取 :flag{fa61cde1c174b-79a8-5cb9-3ea464e3dbca} 逆向工程(REVERSE)篇 1. tradre 反调试机制 Fork监控 :父进程通过SIGALRM限制执行时间(60秒) 断点检测 :收到SIGCHLD时检查是否为int3指令 控制流混淆 :基于基本块状态转移函数动态决定执行路径 基本块结构分析 恢复控制流 结构体转储 :通过switch语句实现转储所有基本块关系 拓扑排序 :以ret为叶子节点,忽略call目标分支 指令修补 : 替换int3为原指令 添加jmp指令修复非连续基本块 重定位RIP寻址和跳转指令 加密算法识别 伪随机数 :srand(0x10000)生成掩码 AES实现 :标准AES加密,密钥通过伪随机数生成 密文恢复 :异或伪随机数得到原始密文 2. butterfly 加密流程分析 分块处理 :64比特数据块分割 加密步骤 : 与64比特密钥逐字节XOR 交换奇偶字节位置 循环左移1位 与密钥字节相加 实现技术 SIMD指令 :pxor、psllq、psrlq、por、paddb等 MMX编码 :密钥存储格式 漏洞利用(PWN)篇 1. flag-market 漏洞利用链 初始状态 :flag读取后存放于堆地址 输入漏洞 :输入255时scanf溢出到BSS段 利用步骤 : 覆盖printf参数为格式化字符串 泄露堆地址定位flag 通过%s直接泄露flag内容 2. bph 漏洞分析 初始泄露 :%s格式化字符串泄露地址信息 任意写漏洞 :malloc失败时在size指向位置写0字节 利用技术 :参考R3CTF2024类似题型 利用过程 IO结构体攻击 : 覆盖stdin的IO_ buf_ base末字节 控制0x64字节写入范围(stdin到stdout) 保留fgets触发的任意写能力 内存恢复 :gdb dump原始内存数据并恢复 栈地址泄露 :通过stdout泄露environ获取栈地址 ROP链构造 :openat-read-writeROP链获取flag Web安全篇 1. yamcs 白盒测试发现 项目性质 :监控系统项目 代码执行点 :Text字段包含可执行Java代码 黑盒测试过程 功能分析 :正常输出float类型监控值 命令执行尝试 : 本地文件创建成功 远程反弹shell失败(不出网) 回显带出 :修改payload通过正常输出通道回显数据 2. 日志系统 漏洞链分析 参数解析不一致 : 检查使用$_ SERVER[ 'QUERY_ STRING' ] 拼接使用$_ GET数组 数组键名混淆 :timestamp[ day]与timestamp[ day ]$解析差异 文件上传绕过 :上传00.php实现RCE 权限提升 服务发现 :ps aux显示jboss 4.2.3(端口4446) 漏洞利用 :参考y4er文章复现CVE漏洞 payload构造 :CCK1反序列化payload 代理设置 :suo5建立HTTP代理 文件查找 :find命令搜索flag文件 3. bbjv 漏洞识别 SpEL注入 :存在Spring表达式语言注入漏洞 目录遍历 :读取System.getProperty("user.home")目录 利用方法 属性修改 :将user.home指向/tmp目录 Flag读取 :直接读取目标文件 4. SecretVault 鉴权机制分析 权限要求 :uid为0时获取flag 鉴权方式 :基于X-User头(默认值0) 漏洞点 :Connection头中的HTTP请求头不会被代理转发 利用方法 头注入 :Connection头中写入HTTP请求头 默认值利用 :使X-User保持默认值0通过鉴权 文档说明 :本文档详细记录了强网杯主赛道各题目的解题思路、技术要点和实现方法,涵盖密码学、杂项、逆向工程、漏洞利用和Web安全等多个领域的关键技术点。