缓冲区溢出漏洞攻击——Vulnserver上手指南 |
发布时间: 2012/5/28 7:32:17 |
本篇教程的内容将以Vulnserver应用程序中一个已知缓冲区溢出漏洞的攻击过程为主。Vulnserver是一款Windows服务器应用程序,其中包含一系列可供利用的缓冲区溢出漏洞,旨在为大家在学习和实践基本的fuzzing、调试以及开发技能方面提供必要的辅助。关于Vulnserver的更多信息,例如下载链接等,请从以下网址处查看:http://grey-corner.blogspot.com/2010/12/introducing-vulnserver.html 。 本篇教程将介绍如何确定某个特定的、基于堆栈的溢出漏洞是否被利用,以及如何进一步挖掘溢出漏洞的价值。不过初始发现漏洞的过程并不包含在本教程中。如果大家有兴趣了解此类漏洞的寻获方法,不妨查阅我们此前发表过的文章: http://resources.infosecinstitute.com/intro-to-fuzzing/ http://resources.infosecinstitute.com/fuzzer-automation-with-spike/ 本教程将假设读者具备一定的技术水平,例如掌握了使用OllyDbg或Immunity Debugger调试程序的使用方法,以及X86汇编语言的相关基本知识。对于刚刚入门的朋友们来说,他们可能觉得自己需要对上述内容进行集中复习,那么下面的链接能够提供大家所需的必要知识: http://resources.infosecinstitute.com/debugging-fundamentals-for-exploit-development/ http://resources.infosecinstitute.com/in-depth-seh-exploit-writing-tutorial-using-ollydbg/ 最后,大家还需要掌握如何利用基于堆栈的缓冲区在溢出方面的基本知识。特别是我们将在下文中谈到的特定溢出情况,将会用到一些相对比较高级的调试器应用及开发技术,此外在本系列文章的前几篇中所涉及到的技能也会被用到。大家可以从下面的链接中查看使基于基本堆栈的溢出方法: http://resources.infosecinstitute.com/stack-based-buffer-overflow-tutorial-part-1-%e2%80%94-introduction/ http://resources.infosecinstitute.com/stack-based-buffer-overflow-tutorial-part-2-%e2%80%94-exploiting-the-stack-overflow/ http://resources.infosecinstitute.com/stack-based-buffer-overflow-tutorial-part-3-%e2%80%94-adding-shellcode/ 其它前面没有提及,但最好在实践前先行阅读的Vulnserver系列其它文章可以从下面的链接中找到: http://resources.infosecinstitute.com/seh-exploit/ 系统要求及安装 本教程的实践过程会用到以下软件: ◆一套32位Windows系统。我强烈建议大家采用最新的Windows桌面系统,例如Windows XP SP2、Windows Vista或是Windows 7,因为这些系统都经过了我个人的亲自测试。Windows 2000桌面版以及服务器版系统可能也没问题,但我不打包票。 ◆Windows系统中的Vulnserver。大家可以从下面的链接中获取该程序的相关信息(使用前请详细阅读)并下载:http://grey-corner.blogspot.com/2010/12/introducing-vulnserver.html ◆Windows系统中的OllyDbg 1.10。如果各位愿意,也可以使用Immunity Debugger,不过这样一来大家的显示结果可能会与教程中的情况略有不同,而且在本教程中与OllyDbg相关的部分插件可能无法运行。OllyDbg可通过下述链接获取: http://www.ollydbg.de/ ◆Perl脚本解释器实例。大家可以将其运行于自己的Windows或是Linux攻击系统中。Linux系统应该是已经预安装过Perl了,但如果各位想在Windows中进行,请从以下链接中获取免费下载:http://www.activestate.com/activeperl ◆Metasploit 4的最新副本。它同样可以运行于Windows或者Linux攻击系统中,不过我个人建议采用Linux系统加以处理,具体细节请查看后文。Metaspoit的Windows或Linux版本可从下列网址处获得:http://www.metasploit.com/ ◆Netcat副本。大多数Linux系统应该已经预安装过了,而其Windows版本可以在此链接中找到:http://joncraton.org/blog/46 ◆如果大家想安装本文中所提到的shellcode,则必须具备一套安装过的nasm副本,获取地址为:http://www.nasm.us/。其实nasm的使用范围很窄,包括在本教程中也同样,因此只作为备选考量。不过如果大家是打算定期编写溢出漏洞,那么nasm绝对是各位工具箱中必不可少的常客。 我在编写本教程时所使用的个人设置是一套能够运行Metasploit命令及Perl脚本的Linux主机;操作系统为Ubuntu,而且Vulnserver运行于虚拟机中的Windows XP SP2当中。也就是说,本文中所涉及的命令语法所指向的都是Linux系统;如果大家使用的是Windows,请适当根据个人情况对命令加以修改。我之所以选择在Linux上运行Metasploit与Perl,是因为Metasploit Framework等组件会被大部分常用的Windows系统防病毒解决方案所破坏。 如果各位的Windows系统运行着防火墙或是HIPS(即主机入侵防御系统),大家可能需要对白名单进行一些相应设置,并适当地禁用某些保护功能,这样本教程才能顺利执行。我们将创建一个溢出漏洞,使得Vulnserver在新绑定的TCP端口处监听shell会话,而这很可能导致防火墙及HIPS软件无法正常工作。某些HIPS软件也许能够实现ASLR(即地址空间布局随机化)功能,但这同样会带来问题。讨论防火墙与HIPS的旁路技术有点超出本教程的涵盖范围,因此请以适当的方式加以配置以免发生上述问题。 为了本教程的顺利展开,我同样假设各位的Windows系统没有为所有程序设置硬件DEP(即数据执行保护)。在Windows XP、Windows Vista以及Windows 7中,默认的设置就是只为基本Windows程序及服务项目配置硬件DEP,因此除非大家曾经刻意修改过自己系统中的DEP设定,否则默认情况应该是处于正确的状态。要了解更多信息请参阅以下链接: http://en.wikipedia.org/wiki/Data_Execution_Prevention http://support.microsoft.com/kb/875352 我的Windows Vulnserver系统在192.168.56.101地址的9999 TCP端口处进行监听,因此该目标地址就是我在运行Perl脚本时所要使用的。如果大家的Vulnserver实例运行在其它位置,请确保该值与自己的实际情况保持一致。 关于使用不同Windows操作系统版本的说明: 请注意,如果大家没有像我一样使用Windows XP SP2系统运行Vulnserver,那么各位在为自己的溢出漏洞设定缓冲区大小时所使用的值可能与我所做的有所不同。不过只要大家确保跟随我的缓冲区定义流程,而不是简单地复制我所使用的具体数值,那么整个过程应该可以顺利完成。我将在以下教程的必要位置处向大家再次强调这一问题。 流程概述 我们将使用以下高端处理流程以完全控制该程序: ◆控制掌握着CPU执行代码的EIP寄存器,将我们所选择的值加入其设定。 ◆确定哪些代码能够完成我们溢出漏洞的目标,在目标系统中寻获或是添加进程序,并将EIP重新 定向至我们所选择的代码。 正如我们在利用缓冲区溢出漏洞系列之前的文章中所提到(详见简介部分的链接),所需步骤列表既负责实施层面的写入及溢出效果,又可以确定目标漏洞是否能够被利用。我们将对给定漏洞加以评估,以审核这些特定步骤能否奏效,而一旦得到了肯定的结论,我们就会明确目标的可行性并进一步找寻将理论付诸实践的具体方式。一直关注本系列文章的读者可能会注意到,上面所描述的整个流程与此前相比并无变化。尽管工作过程本身变得愈发复杂,但在执行的一般性基础步骤方面却始终保持着一致。惟一不同的只是在具体实施的细节技术上有所变动。 正如在介绍部分中所说,大家应该先在缓冲区溢出漏洞的一般写入方式上有所了解,然后再尝试本教程。我们今天所要关注的是一种特定的漏洞,而要利用它进行工作则需要一种新的技术。本教程的重点,正是指导大家如何实施这一新技术,并且探明在何种情况下使用该技术。我仍然会在涉及的时候列出本系列的前几篇文章作为技术参考,而不是在本文中继续深入讨论原先提过的细节,正如我之前所做过的一样。因此如果大家对于本文中的初始步骤感到困惑,请拿出点时间来将本系列的前几篇文章仔细阅读一遍。具体链接简介部分中已经给出了。 本文出自:亿恩科技【www.enkj.com】 |