【BUUCTF】刷题:ciscn_2019_es_1
学习与收获
- 泄漏
libc地址的一个方法:unsortedbin中的main_arena是一个libc地址,再利用uaf漏洞,可能可以泄漏libc地址。 unsortedbin_chunk必须大于0x400。
代码审计
程序实现了 add , show , delete 3个功能,有 uaf 漏洞。
call

add 一次创建 2 个 chunk,0x20 size 的 compary_chunk,自定义 size 的 name_chunk。0ffset_0x4080 处存储着 compary_chunk 的地址,compary_chunk 存储着 name_chunk。

delete 一次,会 free 掉 name_chunk,而 name_chunk 并未置零,因此对 name_chunk 有 uaf 漏洞。
思路
泄漏 libc
如果我们释放一个 name_chunk 到 unsortedbin 中,那么该 unsortedbin_chunk 的 fd 和 bk 都是一个 libc 地址。又因为 uaf 漏洞,我们 show 的时候,依然会输出上面 name_chunk 的 user_data ,故会打印出 libc 地址。
add(0x410,b'a'*8,b'A') |
覆盖 __free_hook
有 uaf 漏洞,程序可以多次同一个 chunk。2.27 版本及以后的版本,free 掉的 chunk 会被先放进 tcache 而非 fastbin。tcache 并无检查 double free 的机制,直接利用 double free 覆盖 __free_hook 为 system 的地址即可。
delete(1) |
exp
from tools import * |