DirtyPageTable
Original blog:Dirty_Pagetable (yanglingxi1993.github.io)
做一些记录
How DirtyPageTable Works
先简单过一遍DirtyPageTable的流程,以最常见的UAF为例
获得一个UAF obj,将其释放回到slab中,并将slab中所有其他的obj全部释放,这样该slab就变成了空slab,
从而回到伙伴系统中
大量分配用户页表,使得用户页表占用victim slab
构造用于操作页表条目 (PTE) 的原语
修改PTE,使得将该PTE的物理内存变为内核代码/数据的物理内存,例如我们可以修改setresuid(),setresgid()等函数对是否具有调用权限的判别
getroot
1
2
3setresuid(0, 0, 0);
setresgid(0, 0, 0);
system("/bin/sh");
这就是整个DiryPageTable的工作流程了,原理并不复杂,和USMA非常相似
需要解决的问题有两个:
- 如何得到UAF,并且获得操作页表条目的能力
- 如何得到目标地址的物理内存地址
利用手法提出者给了我们三种示范