Windows Shellcode学习笔记——通过VirtualProtect绕过DEP

发布网友 发布时间: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,未经许可,请勿转载。

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com