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题目的核心解法和关键技术点,适合有一定基础的二进制安全学习者参考使用。

相似文章
相似文章
 全屏