经测试发现,很多web站点无法抵御应用层的DOS***。可笑的是有些提供安全服务,安全研究的站点都没有抵御这类***的防范。今天把这些方法总结出来,希望Web管理员对自己的服务器进行一下健康体检。此文之前曾发表看雪论坛。

ok,经典的DOS有:ICMP flood ,SYN flood,UDP flood,Teardrop attacks ,Spoofing attacks。这里总结一下Web服务器面临的五中应用层的DOS 威胁。主要是介绍基本原理和工具的简单实用方法。每个***方法我列出了参考信息链接地址。
威胁一,slowloris(懒猴)

原理:HTTP的一个请求包括:
Request       = Request-Line
                        *(( general-header
                         | request-header
                         | entity-header ) CRLF)
                        CRLF
                        [ message-body ]
例如:
GET /index.php HTTP 1.1(\r\n)
HOST: www.site.com (\r\n)
(\r\n)
按照RFC规定,一个正常的HTTP请求是以2个\r\n结束。想想如果发送大量只有一个\r\n的请求,会发生什么样的情况。对,服务器会一直等待,直到超时。等待就会占用一个线程,而服务器的线程使用数量是有上限的,达到上限以后就很难处理新的http请求. 达到拒绝服务的目的。
***方法:
当然你可以根据自己的理解写程序来来发送这些诡异的HTTP请求。也有现成的工具可以用——Slowloris.pl,地址:http://ha.ckers.org/slowloris/。 为了更好的理解每个输入参数的用法,建议先把连接中的文章先看看。这里举几个例子:
建立500个socket连接,DOS 服务器192.168.1.123的80端口,设置connection的超时时间为200秒。
slowloris.pl -dns 192.168.1.123 -port 80 -timeout 200 -num 500
你很可能不知道连接超时时间,那么就用下面的命令,让Slowloris自动帮你完成吧。
slowloris.pl -dns 192.168.1.123 -port 80  -test
这是一个慢启动的过程,要达到效果需要一段时间。所以建议最好是自己估计一个时间告诉slowloris。Timeout时间太长,可能被服务器主动断开连接,时间太短就需要发送更多数据包,带宽消耗更多。
DOS效果:
服务器内存使用:略有增加
服务器CPU使用:正常
服务器响应:不能响应正常请求
Netstat命令可以查看到大量的连接:

服务器将直接RST消息,拒绝新的连接:


另外:
Slowloris能吃的服务器:Apache 1.x, Apache 2.x, dhttpd。
Slowloris不能吃的服务器:IIS6.0, IIS7.0, lighttpd, nginx, Cherokee, Squid。
如果你perl运行出错,可能是你没安装相关支持包,可以注释掉Slowloris.pl 中相关代码。
如果你运行在windows上,socket的最大连接数可能被限制了,导致dos不成功。

威胁二,HTTP POST DOS

原理:向服务器发送POST请求,告诉它将要POST 的数据为n,服务器会开辟长度为n的内存空间等待接收数据。当n足够大,POST请求足够多的时候,这种***会吃到服务器大量内存,从而影响服务器性能。
POST数据包:
POST /openemr/interface/login/login_frame.php HTTP/1.1
Host: 10.200.119.198
User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Trident/4.0; 
Connection: keep-alive
Content-Length: 1000000
Content-Type: application/x-www-form-urlencoded
工具:
明白了原理,方法就变得很简单了,写程序30行代码搞定。线程的***也有:
https://www.owasp.org/index.php/OWASP_HTTP_Post_Tool
DOS效果:
服务器内存使用:激增
服务器CPU使用:激增
服务器响应:不能响应正常请求

威胁三,HTTP RANGE DOS

只需要一个请求数据包就能折腾服务器的一种***方式。
HTTP头字段Range用于文件分段下载。迅雷,PDF在线阅读都使用了这个功能。这个字段也可以被用于DOS服务器。
***数据包如下:
HEAD /file.rmvb  HTTP/1.1
Host: www.site.com
Range: bytes=0-,5-0,5-1,5-2,5-3,5-4,,,,,
Accept-Encoding: gzip 
Connection: close 
Web服务器收到这个包是,会将file.rmvb文件大量的小片段,然后使用gzip加压下片段。分片后加压过程会消耗服务器大量资源,造成DOS。
参考:http://www.secanalyst.org/?p=350
参考:http://www.exploit-db.com/exploits/17696/

威胁四,HTTP Slow Read DOS

原理:向Web服务器发送正常合法的read请求,比如下载文件。在文件下载时,将TCP滑动窗口size设为1或者2,这样服务器就会以非常缓慢的速度发送文件,文件将长期滞留在服务器内存中,消耗资源,造成DOS。
工具:http://code.google.com/p/slowhttptest/
参考:http://www.theinfoboom.com/articles/slow-read-attack-a-new-http-denial-of-service-attack/

威胁五,hash碰撞DOS

参考:http://bbs.pediy.com/showthread.php?t=145634
实验过的朋友可能发现,这个DOS会造成服务CPU利用率100%,但是某些服务器依然能正常响应HTTP请求。原因我目前还没找到,这可能与apache或者php的配置有关。望知道答案的大牛解释。