利用main_arena泄露libc基址

利用条件

  • 有目标主机libc.so

  • 可申请和释放 非Fastbin_chunk

unsorted bin是双向链表结构,在unsorted bin的顶端 32位指向

free和malloc操作时,最后free的chunk被链接到链表的头部,则申请chunk则是从链表的尾部开始

1 . 使用pwndbg调试,当unsorted bin中存在多个回收的chunk时,如图,先 free chunk2 及0x804a058 ,再 free chunk1 及0x804a160

此时unsorted bin的布局如图:

2 . 当然更好的,当unsorted bin中只存在1个回收的chunk时:

fd 与 bk 都指向

3 . main_arena存储在libc.so.6文件的.data段,通过这个偏移我们就可以获取libc的基址,这里我讲一下怎么找到main_arena的地址,首先使用IDA打开libc文件,然后搜索函数malloc_trim(),具体如下图所示。

为什么是这个呢,我们可以对照一下malloc.c的源代码,源代码如下图。

bingo !

PS:之前演示的是32位程序,64位程序同理,但 64位指向