[TOC]
==uaf==,==tcache的double free==
学习与收获
- 泄漏_libc_地址的一个方法:
unsortedbin
中的main_arena
是一个_libc_地址,再利用uaf
漏洞,可能可以泄漏_libc_地址。 unsortedbin_chunk
必须大于0x400
。
代码审计
程序实现了_add_,show,delete3
个功能,有_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 * |