拒绝服务攻击_缓冲区溢出攻击 漏洞_缓冲区溢出攻击(4)

电脑杂谈  发布时间:2017-02-09 23:02:51  来源:网络整理

特别是由于UPNP服务的实现基于UDP通信,使得这些攻击很难追踪。

现在让我们来关注一下发现和利用这个漏洞的功臣:

Ryan Permeh:对这个非常困难的逆向工程给予了技术建议和利用分析。这种困难的挑战一直是Ryan Permeh的梦想。

Marc Maiffret:总是以超级的技术洞察力帮助发现和利用这个漏洞。

Neothoth:他简直就是一台打字机器,在eEye实验室里夜以继日地敲击出URL头中存在的漏洞。

当这个安全公司向世界宣告他们热爱Tequila酒的时候,也许没有人知道这竟是违法的。这个11月Marc和Riley就是21岁了,大家都是合法的了。这也就是说下次NSA在SEC会议上给他们买酒的时候,不会再有违法的问题了。

2001年6月28日,eEye公司公布了IIS的.iad缓冲区溢出漏洞,这个漏洞的一个利用造成了2001年7、8月间席卷全球的红色代码风暴,至今我们在许多运行着的IDS报警信息中仍然可以见到它们的踪迹。

这次漏洞发现与前面几次几乎相同,也是在改进Retina的CHAM(CommonHacking Attack Methods)的时候。当用一段代码对实验室的IIS服务器进行测试时,几个小时的运行后测试进程突然停止了,因为IIS 进程突然死了。进一步分析这个漏洞时发现.iad ISAPI含有缓冲区溢出漏洞。

测试这个漏洞的例子:

GET/NULL.ida?[buffer]=X HTTP/1.1

Host: werd

其中buffer是大约240字节的数据。

eEye公司的“利用武士”Ryan这样介绍这个漏洞的利用问题:这个缓冲区溢出发生在宽字符操作中。它把缓冲区中的ASCII字符(单字节)转换为宽字符/unicode字符串(每字符两字节)。例如,字符串AAAA应被转换为\0A\0A\0A\0A。在这个转换中没有进行缓冲区长度检查,并可利用这个溢出改写EIP寄存器。

听起来这是一个常见的缓冲区溢出,但是要利用这个漏洞还有一些关键点。首先,把2字节转换为4字节的时候,有2个字节是我们无法控制的。这是一种非常糟糕的情况,但并不是完全无法利用。可是这两个无法控制的字节刚好是空字节。一般地,我们需要这两个字节的字符串,并设法使它指向攻击代码。传统上,我们利用被我们改写的EIP来跳转到一个call esp或jmpesp指令,从而跳回到我们已经在堆栈上定位的好的shellcode上,实现shellcode所具有的任何功能。但在这个利用中,这种传统的做法却有了问题。

GET/a.ida?[AAAAA]=x HTTP/1.0

上面的例子将用0x00410041来改写EIP。还有一个问题是,传统上我们都是把shellcode插入到被溢出的缓冲区中,这样我们的shellcode遇到了与EIP相同的问题——它会被系统扩展。这就使本来已经比较成熟的写shellcode方法遇到困难,成为一件头疼的事。有两种方法来解决这个问题:

1.定制shellcode。有可能编写一些shellcode,使它在间隔的NULL字节的结构下也能工作。

缓冲区溢出攻击 漏洞_拒绝服务攻击_缓冲区溢出攻击

2.对shellcode编码。可以写一个解码算法,它把诸如0x0041形式的字符作为输入,然后再把它变成单字节写回到堆栈上。解码算法本身必须要写成0x00bb的形式,是对它自身的挑战。实际上这与方法1一致,只不过只需要定制解码算法本身而已。

当然,所有这一切仅当我们在内存中找到一个通过0x00aa00bb形式的地址可控的位置的时候,才有可能实现。这个限制使我们在整个内存中只能在大约65K个点上去寻找希望,确实颇有些为难。


本文来自电脑杂谈,转载请注明本文网址:
https://www.pc-fly.com/a/jisuanjixue/article-31484-4.html

相关阅读
    发表评论  请自觉遵守互联网相关的政策法规,严禁发布、暴力、反动的言论

    热点图片
    拼命载入中...