@Puzzor
此时栈区情况如下图
本文旨在介绍如何利用ROP绕过DEP保护机制,也是学习过程中的总结
DEP保护机制即Data Execution Prevention,其分为软件DEP以及硬件DEP,下面所讨论的都是基于硬件DEP下的绕过方式。相关术语请自行学习。
所用实例为一存在溢出漏洞的程序,当处理某些文件时未能检查文件长度的限制,导致栈区溢出,若不开启DEP保护,则溢出后EIP可以跳转至栈区执行指令,而当添加了DEP保护后,由于栈区被标记为不可执行,故抛出Access violation (0xC00000005)错误,错误提示如下:
前面准备工作就不详细叙述了,假设我们现在已经找到了溢出点并且能够控制EIP指向任意地址,正如我所说的,我暂时将EIP控制为0x43434343
此时挂载调试器,停到中断点上。如下图所示,正如我们所设计的,EIP成功变为0x43434343
此时栈区情况如下图
基本情况就是这样,接下来正式讨论如何绕过DEP机制。我们都知道在PE文件内存在好多的Section,.Text Section,也就是指令区,存放了CPU所要执行的指令,而其它Section一般不会存放指令的。DEP的保护机制就是给.Text赋予Executable的属性,而其它区域是不具有这种属性的,这样一来,当我们在程序运行时想把我们的shellcode拷入堆栈区执行是不可能的。
正如我们的实例所展示的那样当EIP变为0x43