ISCTF2025-PWN全解
字数 2134 2025-12-16 12:07:21

ISCTF 2025 PWN题型全面解析

ONE: ez_fmt

题目概述

  • 存在无限空间的格式化字符串漏洞
  • 需要泄露地址并通过溢出实现控制流劫持

漏洞分析

  1. 格式化字符串漏洞:可以任意泄露内存数据
  2. 栈溢出漏洞:通过溢出覆盖返回地址

解题步骤

  1. 利用格式化字符串漏洞泄露关键地址(如libc基址、程序基址等)
  2. 构造ROP链或直接返回到后门函数
  3. 题目环境配置存在问题(ld链接器错误),但不影响解题

技术要点

  • 符号表被剔除,但不影响关键地址泄露
  • 只需泄露必要的几个地址即可完成利用

TWO: ret2rop

题目特点

  • 包含随机数校验和异或操作的保护机制
  • 需要绕过多种检查才能实现ROP

漏洞分析

  1. 栈溢出漏洞:在特定条件下可触发溢出
  2. 随机数绕过:需要将随机数固定为已知值
  3. 异或保护:数据经过异或处理,需要逆向逻辑

关键函数分析

snprintf(stack_steps_buf[1], 0x80u, "0x%016lx ; 0x%016lx (immediate value)", immediate, immediate);

保护绕过技术

  1. 随机数固定:通过溢出修改随机数生成结果为0
  2. 异或逻辑绕过:顺着异或逻辑操作而非硬抗
  3. 栈迁移技术:由于控制空间有限,需要栈迁移扩大利用空间

调试技巧

  • 注意io.interactive()的使用,避免缓冲区冲突
  • 关注偏移0x10处的数据控制
  • 需要正确处理栈对齐(0x20对齐)

THREE: ez2048

题目背景

  • 改编自2023年的Go语言题目
  • 需要逆向游戏算法实现自动化通关

解题要点

  1. 逆向分析:理解游戏逻辑和计分规则
  2. 自动化脚本:需要编写脚本实现10万分的通关要求
  3. 后门函数:题目中存在可直接利用的后门

关键函数

  • strchr函数应用:返回buf中第一个\n的下标

FOUR: heap_

漏洞类型

  • 任意地址写漏洞:可修改任意内存地址
  • Canary泄露:需要通过特定方式泄露canary值

利用技巧

  1. printf漏洞:题目中隐藏的printf功能可用于信息泄露
  2. 双重漏洞利用:结合任意地址写和信息泄露实现完整利用

FIVE: tcache

环境特性

  • 基于glibc 2.29的tcache机制
  • 新增key值检测防止double free

漏洞利用

  1. 限制条件:没有edit功能,只有UAF(Use-After-Free)漏洞
  2. 堆风水:通过精心布局堆块实现利用
  3. 利用方案
    • Fastbin攻击绕过保护
    • House of Botcake技术
    • 通过特定大小分配(0x400)控制堆块进入unsorted bin

技术要点

  • tcache在2.29版本增加了安全检测机制
  • 需要了解tcache源码级别的实现细节

SIX: 金丝雀的诱惑

题目特色

  • 引入线程相关技术
  • 基于glibc 2.35的漏洞利用

利用技术

  1. BSS段利用:通过BSS段进行攻击
  2. ret2all技术:综合运用多种返回导向编程技术
  3. 信息泄露:题目提供了泄露漏洞,可获取关键地址

技术价值

  • 展示了glibc 2.35环境下gadget利用的进阶技巧

SEVEN: myvm

题目复杂度

  • 自定义虚拟机逆向,难度较高
  • 需要理解虚拟机指令集和解释器逻辑

逆向分析

  1. 指令集解析:5字节4字节一组的指令结构
  2. 结构体重建:还原虚拟机操作码和数据结构
  3. 栈溢出利用:虚拟机栈存在溢出漏洞

利用步骤

  1. BSS段利用:利用BSS段上的残留值
  2. Canary泄露:通过栈操作泄露canary值
  3. PIE和libc泄露:结合信息泄露绕过ASLR
  4. ROP链构造:最终实现system执行

技术难点

  • 寄存器控制受限
  • 需要精确计算偏移和地址
  • 栈帧管理复杂,容易出错

解决方案

  • 利用bss段上的固定值(如数值1)作为计算基数
  • 采用位移运算优化操作
  • 注意数值类型转换和内存对齐

EIGHT: stack

题目特点

  • 出题人自定义的栈结构
  • 需要结合信息泄露和ORW(Open-Read-Write)技术

利用方案

  1. PIE绕过:泄露程序基址
  2. 栈地址泄露:获取栈空间布局
  3. ORW链构造:实现flag读取和输出

NINE: box

题目类型

  • 一次性格式化字符串漏洞利用
  • 盲盒形式,需要动态分析

解题步骤

  1. 信息泄露:通过格式化字符串泄露内存布局
  2. 符号定位:找到exit@plt和exit@got位置
  3. GOT劫持:将exit@got覆盖为后门函数地址

具体计算

  • exit@plt = main地址 + 偏移量(如0x401275 + 0xfffffffffffffe8b = 0x401100)
  • 后门函数地址:/bin/sh字符串所在位置

利用脚本

需要编写自动化脚本实现地址计算和漏洞利用。


通用技术总结

调试技巧

  1. 环境配置:注意ld版本和库文件匹配
  2. 断点设置:合理使用调试器断点
  3. 管道处理:注意输入输出缓冲区的处理

漏洞利用通用模式

  1. 信息泄露(地址、canary、PIE等)
  2. 保护绕过(ASLR、PIE、Stack Canary等)
  3. 控制流劫持(ROP、后门函数、shellcode等)
  4. 权限提升和flag获取

注意事项

  • 栈对齐要求(x64架构需要0x10/0x20对齐)
  • 地址随机化对抗
  • 防护机制绕过技巧
  • 脚本稳定性和兼容性

本教学文档涵盖了ISCTF 2029中PWN题目的核心解法和关键技术点,适合有一定基础的二进制安全学习者参考使用。

ISCTF 2025 PWN题型全面解析 ONE: ez_ fmt 题目概述 存在无限空间的格式化字符串漏洞 需要泄露地址并通过溢出实现控制流劫持 漏洞分析 格式化字符串漏洞 :可以任意泄露内存数据 栈溢出漏洞 :通过溢出覆盖返回地址 解题步骤 利用格式化字符串漏洞泄露关键地址(如libc基址、程序基址等) 构造ROP链或直接返回到后门函数 题目环境配置存在问题(ld链接器错误),但不影响解题 技术要点 符号表被剔除,但不影响关键地址泄露 只需泄露必要的几个地址即可完成利用 TWO: ret2rop 题目特点 包含随机数校验和异或操作的保护机制 需要绕过多种检查才能实现ROP 漏洞分析 栈溢出漏洞 :在特定条件下可触发溢出 随机数绕过 :需要将随机数固定为已知值 异或保护 :数据经过异或处理,需要逆向逻辑 关键函数分析 保护绕过技术 随机数固定 :通过溢出修改随机数生成结果为0 异或逻辑绕过 :顺着异或逻辑操作而非硬抗 栈迁移技术 :由于控制空间有限,需要栈迁移扩大利用空间 调试技巧 注意 io.interactive() 的使用,避免缓冲区冲突 关注偏移0x10处的数据控制 需要正确处理栈对齐(0x20对齐) THREE: ez2048 题目背景 改编自2023年的Go语言题目 需要逆向游戏算法实现自动化通关 解题要点 逆向分析 :理解游戏逻辑和计分规则 自动化脚本 :需要编写脚本实现10万分的通关要求 后门函数 :题目中存在可直接利用的后门 关键函数 strchr 函数应用:返回buf中第一个 \n 的下标 FOUR: heap_ 漏洞类型 任意地址写漏洞 :可修改任意内存地址 Canary泄露 :需要通过特定方式泄露canary值 利用技巧 printf漏洞 :题目中隐藏的printf功能可用于信息泄露 双重漏洞利用 :结合任意地址写和信息泄露实现完整利用 FIVE: tcache 环境特性 基于glibc 2.29的tcache机制 新增key值检测防止double free 漏洞利用 限制条件 :没有edit功能,只有UAF(Use-After-Free)漏洞 堆风水 :通过精心布局堆块实现利用 利用方案 : Fastbin攻击绕过保护 House of Botcake技术 通过特定大小分配(0x400)控制堆块进入unsorted bin 技术要点 tcache在2.29版本增加了安全检测机制 需要了解tcache源码级别的实现细节 SIX: 金丝雀的诱惑 题目特色 引入线程相关技术 基于glibc 2.35的漏洞利用 利用技术 BSS段利用 :通过BSS段进行攻击 ret2all技术 :综合运用多种返回导向编程技术 信息泄露 :题目提供了泄露漏洞,可获取关键地址 技术价值 展示了glibc 2.35环境下gadget利用的进阶技巧 SEVEN: myvm 题目复杂度 自定义虚拟机逆向,难度较高 需要理解虚拟机指令集和解释器逻辑 逆向分析 指令集解析 :5字节4字节一组的指令结构 结构体重建 :还原虚拟机操作码和数据结构 栈溢出利用 :虚拟机栈存在溢出漏洞 利用步骤 BSS段利用 :利用BSS段上的残留值 Canary泄露 :通过栈操作泄露canary值 PIE和libc泄露 :结合信息泄露绕过ASLR ROP链构造 :最终实现system执行 技术难点 寄存器控制受限 需要精确计算偏移和地址 栈帧管理复杂,容易出错 解决方案 利用bss段上的固定值(如数值1)作为计算基数 采用位移运算优化操作 注意数值类型转换和内存对齐 EIGHT: stack 题目特点 出题人自定义的栈结构 需要结合信息泄露和ORW(Open-Read-Write)技术 利用方案 PIE绕过 :泄露程序基址 栈地址泄露 :获取栈空间布局 ORW链构造 :实现flag读取和输出 NINE: box 题目类型 一次性格式化字符串漏洞利用 盲盒形式,需要动态分析 解题步骤 信息泄露 :通过格式化字符串泄露内存布局 符号定位 :找到exit@plt和exit@got位置 GOT劫持 :将exit@got覆盖为后门函数地址 具体计算 exit@plt = main地址 + 偏移量(如0x401275 + 0xfffffffffffffe8b = 0x401100) 后门函数地址: /bin/sh 字符串所在位置 利用脚本 需要编写自动化脚本实现地址计算和漏洞利用。 通用技术总结 调试技巧 环境配置 :注意ld版本和库文件匹配 断点设置 :合理使用调试器断点 管道处理 :注意输入输出缓冲区的处理 漏洞利用通用模式 信息泄露(地址、canary、PIE等) 保护绕过(ASLR、PIE、Stack Canary等) 控制流劫持(ROP、后门函数、shellcode等) 权限提升和flag获取 注意事项 栈对齐要求(x64架构需要0x10/0x20对齐) 地址随机化对抗 防护机制绕过技巧 脚本稳定性和兼容性 本教学文档涵盖了ISCTF 2029中PWN题目的核心解法和关键技术点,适合有一定基础的二进制安全学习者参考使用。