由于许多通用的漏洞利用方法和大量的蠕虫!
我简单的介绍下 数据执行保护Data
DEP是用来弥补计算机对数据和代码混淆这一天然缺陷。DEP的作用是阻止数据页(列如堆页,各种堆栈页以及内存池页)执行代码。根据实现的机制不同分为:软件DEP,硬件DEP。软件DEP页就是微软增加的SafeSeh保护,这种机制与CPU硬件无关,safeseh保护就不在本文作介绍了。硬件DEP保护,需要CPU支持,DEP的工作状态可以分为四种。
1-
2-
3-
4-
在xp系统中 通过编辑boot.ini文件的noexecute段来设置DEP。
怎样攻击DEP?
DEP针对溢出攻击的本源,完善了内存管理机制。同过将内存特设置成不可执行,来阻止堆栈中shellcode的执行。但DEP也有自身的局限性
由于兼容性的原因windows不能对所有进程开启DEP保护(除64操作系统),否则可能会出现异常。当DEP工作在OptIn和OptOut,利用API可以动态关闭DEP,这些API函数的调用没有任何限制,所有的进程都可以调用这些API函数,这也为我们突破DEP铺上大道。
DEP的介绍到此,下面是正面挑战DEP
开启DEP保护是将数据页设置成不可执行,那我们将存放shellcode的内存页修改成可执行状态,或者直接关闭DEP保护不是就OK了,没错正面击败DEP常用的就是使用的这个思想。
(1)通过跳转到ZwSetInformationProcess函数将DEP关闭后再转入shellcode执行。
(2)通过跳转到VirtualProtect函数将存放shellcode所在内存页设置为可以执行,然后在跳到shellcode执行
(3)通过调转到VritualAlloc函数申请一片可执行区域,然后将shellcode拷贝进去,然后去执行shellcode
本文我将主要介绍用第三种方法攻击DEP,因为在做这个实验时遇到了不少的问题,我觉得这个方法也比前两种复杂些,希望大家在看过我的这篇文章后,若有什么好的方法可以一起交流。
实验环境:
操作系统 windowssp3
DEP状态:Optout
编译器: vc+6.0
build版本 dubeg
使用工具: Ollydbg.exe,OllyFindAddr插件,windbg
首先看
LPVOID VirtualAlloc( LPVOID lpAddress, DWORD dwSize, DWORD flAllocationType, DWORD flProtect ); lpAddress:申请内存缓冲区起始地址;(传入0x00) dwSize: 申请内存大小 (本实验申请0xFF(256)空间, 这个值注就是因为这里困扰我好久) flAllocationType: 申请空间类型 (0x00001000) flProtect:申请空间的内存访问类型,(0x00000040 可读可写可执行) 由于参数含有0x00使用strcpy系列函数会造成shellcode截断,所以本实验使用memcpy函数来引发异常。 使用windbg的u 函数名, 反汇编VritualAlloc memcpy函数(为了后面参数准备)。 VirtualAlloc函数最终会去调用VritualAllocEx函数。VritualAllocEx函数多增加了一个参数hProcess,由于是本进程自身,所以传入0xFFFFFFFF 7C809AE1 > 8BFF MOV EDI,EDI 7C809AE3 55 PUSH EBP 7C809AE4 8BEC MOV EBP,ESP 7C809AE6 FF75 14 PUSH DWORD PTR SS:[EBP+14] 7C809AE9 FF75 10 PUSH DWORD PTR SS:[EBP+10] 7C809AEC FF75 0C PUSH DWORD PTR SS:[EBP+C] 7C809AEF FF75 08 PUSH DWORD PTR SS:[EBP+8] 7C809AF2 6A FF PUSH -1 7C809AF4 E8 0 CALL kernel32.VirtualAllocEx 函数地址 7C809AF9 5D POP EBP 7C809AFA C2 1000 RETN 10 VritualAlloc函数返回是带有16个字节偏移 memcpy函数 ntdll!memcpy: 7c921db3 55 push ebp 7c921db4 8bec mov ebp,esp 7c921db6 57 push edi 7c921db7 56 push esi 7c921db8 8b750c mov esi,dword ptr [ebp+0Ch] 目的地址(开辟的可执行空间首地址) 7c921dbb 8b4d10 mov ecx,dword ptr [ebp+10h] 复制长度 7c921dbe 8b7d08 mov