|
| |
精品推荐 |
 |
|
| |
|
|
|
|
软件漏洞及缓冲区溢出
|
日期:2007年3月20日 作者: 查看:[大字体
中字体 小字体]
|
推荐使用反汇编工具:IDApro。最新版本4.7。 http://www.datarescue.com/ IDA Pro是一个交互式智能的返汇编工具,工作于Windows和*nix系统下。IDA Pro可以分析出函数的参数,还能分析出函数中使用的局部变量,甚至还可以分析出函数调用关系图。
(2) 调试技术 在漏洞调试的过程中,需要实时对程序的执行流程,情况等进行控制,然后根据程序执行的情况再进行其他的一些处理。 根据自己的喜好或工作的需要选择一款调试器。SoftIce,Windbg,OllyDbg.VC6.0自带的调试器。 SoftIce功能强大,适合于对操作系统进行破解和分析,但是使用起来不方便,见面不够友好。Windbg是微软开发的一款系统及应用软件调试工具,短小精悍,功能强大,界面友好,和系统结合得非常完美。OllyDbg是一款应用软件调试工具。 断点设置: a在指令上设断点 b在内存空间上设断点 c在特定的中断上设断点 d在I/O上设置断点 在Windows环境下,用到最多的就是在API函数调用上设置断点。可以说漏洞利用的关键技术就是调试技术,而调试技术的重点又在断点设置。 比如04011漏洞利用,根据分析我们可以知道有溢出漏洞的函数会将几个字符串写到一个日志文件中,由此推测它可能会调用createFile函数和WriteFile函数。 又比如在利用Office超长宏名溢出漏洞时,我们只知道在拷贝宏名时出现问题,那么就可以考虑Office装载Word文件时的过程,创建文件,为文件创建一个内存印象,等等,这样,我们就可以截获创建文件的函数调用后,查找宏名,然后在宏名上设置一个内存断点,当程序对宏名进行拷贝的时候就会中断,达到我们寻找溢出点的目的。 当然,很多专业的做软件安全的组织都使用自己开发的调试器,Windows提供了用户调试器接口,供用户自己开发调试器。同时,调试技术还用于软件漏洞发现。
(3) Windows结构化异常处理SEH SEH 是Windows下的一种程序错误处理机制。Windows 95、Windows 98 和 Windows 2000(即以前的 Windows NT)支持一种称为结构化异常处理的可靠的异常处理方法,此方法涉及与操作系统的协作,并且在编程语言中具有直接支持。比如C++中的Try{} catch{}语法经编译后就是SHE. SEH结构是一个链表,链表的每一个节点表示一个异常处理函数。链表的头位于fs:0处。其中,fs是异常处理段寄存器,fs:0位于0x7fxxxxxx位置,可写。 构建SEH: push offset ErrHandler push fs:[0] mov fs[0], esp
2、 栈溢出的利用 栈溢出是一种比较好利用的缓冲区溢出漏洞,栈溢出比较通用。 栈溢出的原理就是利用缓冲区溢出覆盖函数调用的返回地址,当函数返回时就可以控制函数的流程。 (1) 收集资料并构造程序溢出 首先就是要竟可能的收集资料。BugTraq和cve的漏洞列表是非常有用的资料库。在收集资料时尽可能的收集漏洞发现人或组织的最原始资料。 http://www.k-otik.com/bugtraq/ http://www.cve.mitre.org/cgi-bin/cvename.cgi?name=CAN-2004-0892 有些漏洞没有详细的漏洞描述,对于这种漏洞按照我们现在的能力或者说国内安全届现在的能力是没有什么希望做出来的。 其次要根据漏洞描述重现漏洞。详细的分析漏洞描述以及收集到的其他资料,重现漏洞。 在重现漏洞时要注意操作系统类型,补丁版本,以及软件环境等。比如说系统要求是Win2000还是XP,补丁版本是SP4以下,还是其他的,还有就是应用软件的版本以及补丁版本。 有些语言版本的操作系统并没有明确的提示当前操作系统的补丁版本,这是后就可以通过其他的一些途径来获得当前系统的补丁版本。比如可以通过关键文件如 ntdll.dll的大小,以及修改日期等来获得相关信息。一般来说,每次升级补丁后ntdll.dll的文件大小都会增加。
(2) 分析程序溢出情况 每个漏洞的溢出情况都不一样,只能具体情况具体分析。但是在分析溢出情况的时候要注意收集相关的出错信息,包括程序出错时EIP的值,以及出错的原因等。 比如在分析Office宏名溢出漏洞时,重现漏洞后,程序报告访问内存出错—"0xaaaaaa引用得内存0xbbbbbbb不可读",通过这条信息我们就可以判断出,程序已经溢出,同时我们分析0xaaaaaaa,可以发现这是一个不可能会有指令的地址空间,然后在Word文档中查找0xaaaaaaa的二进制值(一般查找高3位字节,因为有可能程序在溢出后刚好跳转到完整的指令处,执行了若干条指令后才产生中断),找到后将其改为其他的值,重新溢出,如果错误报告时EIP的值为更改后的值,那么就可以确定该处为溢出的返回地址。 当然,实际的情况可能要复杂的多,只有临时解决。
上一篇:phpwind1.3.6论坛利用程序
下一篇:世界上最好的磁盘碎片整理工具原版+汉化+注册机
|
| 软件漏洞及缓冲区溢出 相关文章: |
|
|
|
| 软件漏洞及缓冲区溢出 相关软件: |
|
|
|
|