mmap overlapping chunks

2021-02-04  本文已影响0人  clive0x

https://github.com/shellphish/how2heap/blob/master/glibc_2.31/mmap_overlapping_chunks.c

https://maxwelldulin.com/BlogPost?post=6967456768

http://tukan.farm/2016/07/27/munmap-madness/

相关知识点:

1.mmap chunk   size字段与普通chunk size意义一样,prev_size字段意义不一样,表示padding字节数(因mmap chunk以page_size对齐)

2.mmap chunk分配 起始值:mp_.mmap_threshold ,随着上一次free mmap chunk动态变化,取最大值,尽量减少mmap数量。

3.munmap free时,公式为:

block =  victim_ptr - prev_size

size = prev_size + size

munmap(block,size)

通过修改size,可达到释放victim_ptr 之后的内存,通过修改pre_size,释放victim_ptr之前的内存。

4.munmap之后的内存,重新利用方式有几种:

a.调用malloc,重新mmap,注:大小上次free大小,跳过mp_.mmap_threshold检测

b.dlopen动态加载so

c.mmap大文件,如媒体文件

d.启动新线程,创建thread stack,默认大小为RLIMIT_STACK:8M

5.munmap目标利用点:

a.heap brk

b.可执行文本段

c.第三方so可执行文本段

d..got/.data/.bss段,其中.got段相对利用最容易,可以与symbol resovle结合,达到任意函数执行

e.其它mmap chunk,就像本case

f.其它 thread stack。

6.关于位置

kernel

stack

.mmap top

.libc

.mmap2

.mmap3

xxxx

.heap

.bss

.data

.text

https://maxwelldulin.com/BlogPost?post=6967456768 中总结:

开始是从高地址向低地址,到一定阶段后,从低地址向高地址,如此多次反复。这里画的是初始阶段。

上一篇下一篇

猜你喜欢

热点阅读