发布网友 发布时间:2024-10-24 13:04
共1个回答
热心网友 时间:2024-10-26 16:40
在探索了栈溢出利用的基础后,我们转向研究如何突破Windows系统,尤其是Win7,对栈溢出利用的多层防御措施。本文将聚焦于通过VirtualProtect函数绕过数据执行保护(DEP)的技术。让我们一同深入学习这一经典的绕过策略。
**1. 简介**
本文将涵盖以下几个关键点:
**2. 相关概念**
**DEP(数据执行保护)**
栈溢出的根源在于数据与代码混杂,溢出导致程序尝试在数据段执行指令。为弥补此缺陷,微软从XP SP2起引入DEP,其核心原理是标记数据所在内存页为不可执行,当溢出尝试执行指令时,CPU会抛出异常,而非执行指令。
**DEP工作状态**
DEP有四种状态,其中绕过原理是找到替代指令,使函数返回地址不指向数据段,而是指向系统函数入口,利用系统函数页面的可执行权限绕过DEP。
**内存页**
在x86系统中,内存页大小为4kb,即0x00001000,4096字节。
**ROP(面向返回的编程)**
是一种编程范式,允许在不同函数之间调用指令,从而构建绕过防御的路径。
**VirtualProtect**
用于调整内存页属性,例如将shellcode页设置为可读、可写、可执行,以绕过DEP。
**3. VS2012编译配置**
测试环境为Win 7 x86,使用VS2012,构建版本为Release。关键配置包括关闭GS、优化、SEH、DEP、ASLR、禁用C++异常和内部函数。
**4. 实际测试**
通过一系列测试,验证了VirtualProtect绕过DEP的方法。测试包括使用memcpy而非strcpy,构建ROP链以关闭DEP,以及在关闭DEP后执行shellcode的验证过程。
**5. 小结**
在Win7环境下搭建测试环境,需要对VS2012的编译配置进行特别设置。不同系统下,可供利用的替代指令存在差异,需要灵活运用思路构造ROP链。利用Immunity Debugger的mona插件可以简化ROP链的编写过程,但需注意其可能存在的bug。如果shellcode长度超过4096字节,使用VirtualProtect关闭DEP将失败,应探索其他绕过方法。
本文由3gstudent原创,独家发布于嘶吼专业版——Pro4hou,未经许可,请勿转载。