什么是 do_brk() ?
do_brk() 是 mmap() 的简化版本,可以控制进程的 heap 增长或缩短。
do_brk() 只用于处理未初始化数据的匿名 mapping 调用,故起初开发者们在这个函数中几乎没有做任何的边界检查。
缺乏边界检查是一个隐藏的 bug 。-
如何利用 do_brk() 的 bug ?
- 改变进程栈的 layout,使我们后来能通过 do_brk() 的 bug 来向上扩展堆并覆盖 kernel 空间。
- 通过 LDT_mod,verr 和一些 signal 的技术加入新的 kpage,找到特定的 kpage,借此找到并访问到 LDT entry。
- 通过 do_brk() 溢出,改写 kernel page。关闭 s-bit 并改写 LDT entry 从而可以以 ring0 的身份调用任何函数.
- 扫描 task_struct 改写自己的 uid 或 gid,获取 root 权限。
OShomework1
最后编辑于 :
©著作权归作者所有,转载或内容合作请联系作者
- 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
- 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
- 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...