[原创]利用Ret2Libc挑战DEP——利用ZwSetInformationProcess
新人一个,最近也在学习《0day》,由于和工作没太大关系,一个人学习漏洞太痛苦,所以希望在这里能够和大家展开交流,找到志同道合的人,希望大神们多多指教。这是我发在csdn上的,直接转过来了,不知道格式会不会有问题。实验思路是按照作者的思路做的,借此机会也是想把自己的实验中遇到的问题和想法记录下来,以作总结。大家看到有哪里写的不对的地方,如果能告诉我,那我真是太感谢了。当然有不懂的,我也会做解答。《0day》的实验,基本上我都做过一遍,有问题的小伙伴可以一起讨论啊。
今天终于看到著名的DEP机制了,可以好好的研究它了!
DEP基本原理就是数据所在内存页标识为不可执行,这样就导致一个问题,就是我们之前所有的实验都建立在一个基础上:shellcode的执行是位于堆或者栈上的,我们通过覆盖上面的正常数据,将可执行的恶意数据放在上面进行程序流程劫持。后来,微软的程序员就发现了这个致命的漏洞,就创建了这个机制:从XP SP2开始,CPU一旦检测到在非可执行区域执行指令,将禁止继续执行并抛出异常。
突破思路:
既然DEP不允许直接执行,我们可以在其他可执行位置为shellcode的每一条指令找到一条替代指令,就可以完成exploit了。(每一条指令都有一个ret,以便回收程序控制权)
《0day》里面讲了3种思路突破dep
- 通过跳转到ZwSetInformationProcess函数将DEP关闭,再转入shellcode
- 通过跳转到VirtualProtect函数来将shellcode所在内存页设置为可执行状态,再转入shellcode
- 通过跳转到VirtualAlloc函数开辟一段具有执行权限的内存空间,然后将shellcode复制到这段内存中执行。
这次,我们来实践第一个思路。利用ZwSetInformationProcess函数关闭DEP!
注意:上传附件及图片大小不得大于30M。
⚠️ 版权声明:
本博客所有内容(含教程、源码、工具)仅供个人技术学习与研究交流使用,严禁商用、倒卖、二次分发及非法用途。
未经作者书面授权,任何组织或个人不得转载、复制或用于其他平台,违者将追究相关责任。
复制成功
