kernel-pwn:进程内核栈的调用差异

题目

这里以以下两道题目为研究对象:
题目一:
https://lkmidas.github.io/posts/20210123-linux-kernel-pwn-part-1
题目二:
https://breaking-bits.gitbook.io/breaking-bits/exploit-development/linux-kernel-exploit-development/stack-cookies
两道题目都只开了kernel stack其他安全机制关闭,可以直接使用ret2user进行利用;
ret2user需要构造payload,覆写内核栈,执行用户态的getroot函数。
如何对内核栈进行覆盖,将返回地址控制为自己的地址就是关键。
对于用户态,用户栈压栈出栈是由函数调用约定来标准化的,是有规律可循的,但是在内核中却不是这样。

linux 5.9.0

第一道题运行起来,查看一下内核版本
在这里插入图片描述
内核版本为5.9.0 架构为x86_64
对给出的有漏洞驱动进行反汇编
在这里插入图片描述
其对rbp、r12和rbx进行了压栈
在这里插入图片描述
在实际构造payload时就需要填充这三个位

linux 5.4.0

题目二内核版本为:
在这里插入图片描述
对于其提供的漏洞驱动进行反编译
在这里插入图片描述
可以看到只压栈了rbp、r12
所以只需填充两位在这里插入图片描述
原答案中
在这里插入图片描述
是按照用户态惯例进行填充,是不对的。

总结

内核栈调用不同于用户态,需要亲自调试。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值