babyheap_0ctf_2017 详细解析 本题是一道经典的堆利用题目,考察 fastbin attack 和 堆溢出漏洞利用,程序开启了全部保护(64位、Canary、NX、PIE、Full RELRO)。以下是完整的解题步骤: 一、漏洞分析 程序功能: Allocate:申请指定大小的堆块(最大0x1000字节) Fill:向堆块写入数据(存在堆溢出漏洞) Free:释放堆块 Dump:输出堆块内容 关键漏洞: Fill操作未检查写入长度,可覆盖相邻堆块的头部数据(如size字段) 结合堆布局和释放操作可泄露libc地址 通过伪造fastbin chunk劫持__malloc_hook 二、利用步骤 阶段1:泄露libc地...
这是一个非常经典的 堆利用(Heap Exploitation) 场景,你正在利用 unsorted bin 泄露 libc 地址。我们来详细解释为什么 dump(2) 会泄露 main_arena + 88(即 main_arena88)。 🔍 背景:unsorted bin 与 main_arena 的关系 在 glibc 的 malloc 实现中: 当你 free 一个 不是 fastbin 大小(通常 ≥ 0x90 字节,含 chunk header)的 chunk 时,它会被放入 unsorted bin。 unsorted bin 是一个双向循环链表,其头节点(fd 和 bk 指针)就位于 main_arena 结构体内...
选择1: void __fastcall allocate(__int64 a1) { int i; // [rsp+10h] [rbp-10h] int v2; // [rsp+14h] [rbp-Ch] void *v3; // [rsp+18h] [rbp-8h] for ( i = 0; i <= 15; ++i ) { if ( !*(_DWORD *)(24LL * i + a1) ) { printf("Size: "); v2 = gets(); if ( v2 > 0 ) { if ( v2 > 4096 ) v2 = 4096;//限制元素个数为4096 v3 = calloc(v2, 1u);//限制堆大小为...