easyheap 只改 magic 触发 4869 题目信息 程序提供 create、edit、delete 三个堆操作。 edit 存在堆溢出,因为它会直接使用用户输入的 size 去 read,不检查是否超过原 chunk 大小。 主程序里有一个隐藏分支: if (choice == 4869) { if ((unsigned long long)magic <= 0x1305) { puts("So sad !"); } else { puts("Congrt !"); l33t(); } } 目标就是把全局变量 magic 改成大于 0x1305 的值,然后发送 4869。 关键地址 magic = 0x6020c0...
# [ZJCTF 2019] EasyHeap WP ## 题目分析 程序提供 3 个基本堆操作: - `create` - `edit` - `delete` 保护如下: - Partial RELRO - Canary - NX - No PIE 因为没有 PIE,所以程序内的全局变量、GOT 地址都是固定的;又因为是 Partial RELRO,所以 GOT 可写,适合做 GOT 劫持。 --- ## 程序关键点 程序里有一个全局数组 `heaparray`,地址为: ```text heaparray = 0x6020e0 它本质上就是一个保存堆块指针的数组,可以理解为: char *heaparray[10]; 申请堆块时...
一道堆溢出,看起来跟2-2-2差不多,可以借鉴一下,应该也是UAF 先来看一下他给的 Pasted image 20260417084008.png main里面大部分都是好的,有一个部分如下: if ( v3 == 4869 ) { if ( magic <= (unsigned __int64)'\x13\x05' ) //\x13\x05就是4869 { puts("So sad !"); } else { puts("Congrt !"); l33t(); //这个函数会直接给flag } } 来写基本的函数: def create(size,content): r.sendlineafter(b"Your choice...