How2heap--unsorted_bin_attack 0ctf2016--zerostorage
unsorted bin attack 对unsorted bin中的chunk->bk进行修改,接下来该chunk分配出去时,chunk->bk->fd就被赋值为unsortedbin头结点地址。 1 2 3 4 bck = victim->bk; /* remove from unsorted list */ unsorted_chunks (av)->bk = bck; bck->fd = unsorted_chunks (av); 在glibc2.28中增加了以下检查,使得此攻击失效。 1 2 if (__glibc_unlikely (bck->fd != victim)) malloc_printerr ("malloc(): corrupted unsorted chunks 3"); unsorted bin attack通常为进一步的攻击做准备,比如覆写global_max_fast。 0ctf2016 zerostorage 1 2 3 4 5 6 Arch: amd64-64-little RELRO: Full RELRO Stack: Canary found NX: NX enabled PIE: PIE enabled FORTIFY: Enabled 关键数据结构 flag:标识该节点是否存在 size:记录大小 content:数据块指针 程序有以下功能 1 2 3 4 5 6 7 1. Insert 2. Update 3. Merge 4. Delete 5. View 6. List 7. Exit insert:获取数据块大小,并读入数据。数据块大小在128~4096这个范围内 update:对数据块进行大小内容进行更新 merge:将两节点合并。这里存在漏洞,输入两次相同的id,导致UAF。这个漏洞我没发现,思维还不够猥琐啊 delete:释放数据块,清空节点 总体思路 通过UAF,首先泄露libc基址,然后修改其bk指针,使用unsorted bin attack修改global_max_fast变量;fastbin bin attack覆写__free_hook为system函数地址。 ...