UAF获取main_arena+88地址泄露libc基址

标签:
main_arenaunsorted_bins |
分类: 信息安全 |
linux中使用free()进行内存释放时,不大于max_fast (默认值为 64B)的 chunk 被释放后,首先会被放到 fast bins中,大于max_fast的chunk或者fast bins 中的空闲 chunk 合并后会被放入unsorted bin中。
unsorted bin只有一个bin, 其中保存的块大小不定, 用于收集刚刚被free 或从大的块中分裂剩下的块。unsortbin的fd和bk指向自身main_arena+88中,该地址的相对偏移值存放在libc.so中,可以通过use after free后打印出main_arena的实际地址,结合偏移值从而得到libc的加载地址。
下面举个例子
此时free(0x6020a0),因为chunk长度够大,将形成一个unsorted bin。此时fd和bk都指向main_arena+88。
main_arena+88=0x7fab1c9de7b8 àmain_arena=0x7fab1c9de7b8 – 88 =0x7fab1c9de760
main_arena的偏移存放在libc中的malloc_trim()函数中:
http://s7/mw690/001xmED7zy7pxXXCjkO36&690
从而计算得到libc基址,libc_base= main_arena-0x3C2760=0x7FAB1C61C000