突破win2003 sp2中基于硬件DEP.doc

  1. 1、本文档共14页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
标题:【翻译】突破win2003 sp2中基于硬件的DEP 作者:david kennedy 译者:riusksk(泉哥:) ? 历史 ? 数据执行保护DEP(Data Exectution Protection)简史:创建DEP的初衷是为了防止不可运行的内存区域代码。在写本文之前,我详细阅读了《Uninformed》杂志上skape与Skywing合写的文章《Bypassing Windows Hardware-Enforced DEP》,这是篇不错的文章,值得一看。skape与Skywing均是具备精明头脑的人,是公认的汇编超人。 ? 背景下面先讲解堆栈溢出的基础知识。在当今现实世界中,这类溢出已经很普遍了,是容易发生的一类安全漏洞。只要当程序员在编写程序时,未对分配一定大小的特定区域进行合适地边界检测可发生类情况。下面就SLMAIL栈溢出例。Offensive Security安全组织的Mati Aharoni 在2004年发现了SLMAIL这个漏洞,该漏洞的exploit正是利用了SlMAIL POP3 SERVER(port 110)中“PASS”域未进行有效的边界检测而进行攻击的。关于该漏洞的分析可参见:/exploits/638如果你去定位一下攻击发生的位置,就会发现它是发生在PASS + buffer ,buffer中包含4654个‘A’(\x41触发溢出),shellcode地址,一些nop以及我们的shellcode。为了实现溢出攻击,只有通过覆盖EIP中指向的特定内存地址才可触发,而EIP正是指向系统即将运行的下一条指令的地址。如果我们能够控制EIP,那么就可以让系统执行到我们的shellcode地址。这类典型的跳转地址通常为call esp或者jmp esp,并让ESP是指向堆栈中特定的地址(例如我们的shellcode地址)。通过分析这份exploit代码,我们可以发现4654个“A”被发送到服务器后,接下来的0x78396ddf正是用来覆盖EIP并正确跳转到shellcode的内存地址。 NOP在汇编中用\x90来表示,相当于“无操作”。它并没有执行任何操作,只是继续执行下一代码,直到有效指令。当你100%确定它将运行到我们预想的地址时,你可以使其“滑行”一段距离,直至你的shellcode。与此同时,它还可以删除一些被合法函数遗弃的垃圾字符。nop被执行后,将会运行包含恶意代码的shellcode,例如reverse shell,bind shell,useradd等等。 栈溢出的整个思路:覆盖EIP,跳转到shellcode(jmp esp),执行shellcode。如果你看一下这份exploit的日期以及测试平台,就会发现exploit是在windows 2000,sp4平台上测试的。如果exploit是运行在Windows XP SP2,Windows 2003 SP1或者windows 2003 sp2又会如何呢? 本文这里只谈论windows 2003 sp2,因为每一操作系统在存在不同点的同时,亦会有相对的共同之处。在windows xp sp2与windows 2003 sp1上绕过DEP比windows 2003 sp2更为容易,因为windows 2003 sp2 内存中存在两项检测机制,而其它系统只有一项(比较 AL与EBP 和 EBP 与ESI)。 打开调试器,这里用Immunity Debugger。先从milw0rm 上下载exploit,并通过调试器来运行它,下图1是在*unix box上运行exploit的截图: ????? ? ? ? ? ? 图1在调试器中,我们控制的堆栈条指令发生访问违例异常,如图2所示: ?????? ? ? ? ? ? 图2进一步分析:右击“我的电脑”-“属性”-“高级”,打开“高级”后(译注:在我的xp sp2上,是选择性能中“设置”后才能看“数据执行保护”),选择“数据执行保护”,接下来我们可以看到“为除下列选定程序之外的所有程序和服务启用DEP(U):”的选项。为了exploit系统,以此来提升访问权限,就要克服上面的问题。 既然已经知道开启DEP,我们就需要将其掉,以便在被控制的栈中正确地执行我们的shellcode。幸运地是,这里就有一种方法可以做到。在这份特殊的exploit当中,我所使用的溢出方式为简单,但是在实际当中我们会遇到很多难以想像的困难。这里重述一下Skape与Skywing的一些观点:为了绕过DEP就必须调用函数ZwSetInformationProcess(在LdrpCheckNXCompatibility实例中)。 当ZwSetInformationProcess函数被调用时,通过相关设置来禁止DEP,以使程序

文档评论(0)

kehan123 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档