2024 WMCTF-PWN(BlindVM babysigin evm magicpp)
字数 1888 2025-08-20 18:18:11
WMCTF 2024 PWN题解:BlindVM、babysigin、evm、magicpp
BlindVM 题解
题目概述
- 检查保护:Partial RELRO, NX enabled, PIE enabled
- 关键提示:使用堆喷射(heap spraying)使堆空间与LIBC空间连续
关键知识点
-
线程堆栈分配机制:
__pthread_create_2_1通过mmap分配0x801000大小的线程栈- 分配后被分割成800000和1000两部分
-
线程堆初始化流程:
__GI___libc_malloc -> tcache_init -> arena_get -> arena_lock -> arena_get2 -> _int_new_arena -> new_heap -> alloc_new_heap- 初始分配大小:max_size << 1 = 8000000
-
堆扩展机制:
- 当分配大小超过topchunk但小于0x20000时:
- 调用
grow_heap增加heap_info的size - 设置新的topchunk大小
- 调用
- 当分配大小≥0x20000时:
- 直接通过mmap分配
- 当分配大小超过topchunk但小于0x20000时:
-
漏洞利用思路:
- 分配heap_info空间使topchunk无法扩展
- 申请大于0x20000的空间填充heap到libc部分
- 修改unsortedbin的fd指向libc对应的heap_info的ar_ptr
- 通过部分写控制ar_ptr
- 修改topchunk的size
- 最终实现控制heap_info和grow_heap,覆盖libc
-
libc函数地址解析:
- 在
dl_fixup中根据字符串找到函数对应的结构体 - 结构体存储偏移量,最终地址为l_addr(库加载地址)+offset
- 在
利用步骤
- 通过堆喷射使堆空间与libc空间连续
- 控制heap_info结构
- 修改topchunk大小
- 覆盖libc关键数据
- 劫持控制流
babysigin (LLVM pass题)
题目概述
- 提供了mmap、open、read、write等函数
- 需要通过LLVM pass分析
关键知识点
-
LLVM IR基本概念:
- Module: 整个程序的顶层容器
- Function: 函数定义
- Basic Block: 基本代码块
-
逆向分析要点:
- 使用
opt -load ./WMCTF.so -WMCTF -enable-new-pm=0 ./llk.bc启动 - 分析pass对IR的修改
- 使用
-
关键检查点:
- 变量名需要包含".addr"
- 递归调用层次检查
- 全局变量初始化检查
-
函数调用链分析:
void func1(const char *arg) { WMCTF_MMAP(0x7890); WMCTF_OPEN(recrusive); WMCTF_READ(0x6666); WMCTF_WRITE(GLOBAL_CONSTANT); } -
字符串处理:
- 全局变量声明与IR对应关系
- 字符串常量在IR中的表示
解题思路
- 构造满足pass检查的函数调用链
- 通过全局变量传递关键数据
- 绕过递归层次限制
- 最终触发后门函数
evm题解
题目概述
- 检查保护:Partial RELRO, Canary found, NX enabled, No PIE
- 自定义虚拟机实现
关键知识点
-
虚拟机指令分析:
- 寄存器操作指令格式
- 内存访问指令
- 控制流指令
-
指令解码:
result = (BYTE1(code) >> 4) & 7; dest = ((unsigned __int16)code >> 7) & 0x1F; src_1 = (code >> 15) & 0x1F; -
页表管理:
- 自定义页表实现
- 物理地址转换机制
-
漏洞利用:
- 后门函数存在/bin/sh地址
- 通过第一个页表修改第二个页表内容
- 寄存器越界修改
利用步骤
- 构造特定指令序列
- 修改页表项内容
- 控制寄存器值
- 触发后门函数
magicpp题解
题目概述
- 检查保护:Partial RELRO, Canary found, NX enabled, PIE enabled
- 文件操作功能
关键知识点
-
漏洞发现:
- 通过fuzz发现unsorted bin corruption
- 特定操作次数后出现崩溃
-
漏洞成因:
- vector扩容时free旧内存
- use-after-free修改unsorted bin的fd
-
信息泄露:
- 通过/proc/self/maps泄露地址
- 获取heap、libc、stack、ld地址
-
利用方法:
- 修改tcache的fd
- 攻击libc GOT表
- 可能的攻击目标:
- IO house of cat
- exit处理流程
- libc GOT表函数
利用步骤
- 泄露内存布局
- 构造特定内存布局
- 触发use-after-free
- 修改关键指针
- 劫持控制流
总结
这些题目涵盖了多种漏洞利用技术:
- 堆布局与堆喷射
- LLVM IR分析与pass绕过
- 自定义虚拟机漏洞利用
- 复杂内存破坏漏洞利用
关键点在于理解每种环境下的内存管理机制和精心构造利用链。