原理
漏洞原理
HTTP慢速攻擊也叫slow http attack,是一種DoS攻擊的方式,由于HTTP請求底層使用TCP網路連接進行會話,因此如果中間件對會話超時時間設定不合理,并且HTTP在發送請求的時候采用慢速發HTTP請求,就會導致占用一個HTTP連接會話,如果發送大量慢速的HTTP包就會導致拒絕服務攻擊DoS,
3種攻擊方式
Slow headers(也稱slowloris):Web應用在處理HTTP請求之前都要先接收完所有的HTTP頭部,Web服務器再沒接收到2個連續的\r\n時,會認為客戶端沒有發送完頭部,而持續的等等客戶端發送資料,消耗服務器的連接和記憶體資源,
Slow body(也稱Slow HTTP POST):攻擊者發送一個HTTP POST請求,該請求的Content-Length頭部值很大,使得Web服務器或代理認為客戶端要發送很大的資料,服務器會保持連接準備接收資料,但攻擊客戶端每次只發送很少量的資料,使該連接一直保持存活,消耗服務器的連接和記憶體資源,
Slow read(也稱Slow Read attack):客戶端與服務器建立連接并發送了一個HTTP請求,客戶端發送完整的請求給服務器端,然后一直保持這個連接,以很低的速度讀取Response,比如很長一段時間客戶端不讀取任何資料,通過發送Zero Window到服務器,讓服務器誤以為客戶端很忙,直到連接快超時前才讀取一個位元組,以消耗服務器的連接和記憶體資源,
漏洞驗證
我這里使用docker方式,感覺方便快捷,命令分享如下:
下載鏡像
docker pull shekyan/slowhttptest:latest
slowloris攻擊模擬
docker run -it --rm shekyan/slowhttptest -c 1000 -H -g -o my_header_stats -i 10 -r 200 -t GET -u http://ip:port/ -x 24 -p 3
查看對應IP服務器上的連接情況:
命令:netstat -anp |grep 8081 |wc -l

發現已經建立的1002個連接,并持續保持,
這就說明,存在http慢速攻擊漏洞,如果加大攻擊數量,則會耗盡服務器tcp連接資源,導致服務不可用,
修復漏洞
修改tomcat配置
修改tomcat server.xml中的
<Connector port="8081" protocol="HTTP/1.1"
connectionTimeout="8000"
disableUploadTimeout="true"
disableUploadTimeout="true"
redirectPort="18443"
URIEncoding="utf-8"
maxPostSize="-1"
maxHttpHeaderSize ="102400"/>
其中connectionTimeout更改為了8000,并增加了disableUploadTimeout="true"引數
保存后重啟服務再測

發現攻擊連接很快超時關閉,說明漏洞被修復,
其他事宜
另外兩種攻擊測驗方式:
Slow Body攻擊:
docker run -it --rm shekyan/slowhttptest -c 1000 -B -g -o my_body_stats -i 110 -r 200 -s 8192 -t FAKEVERB -u http://ip:port/ -x 10 -p 3
Slow Read模式:
docker run -it --rm shekyan/slowhttptest -c 1000 -X -r 1000 -w 10 -y 20 -n 5 -z 32 -u http://ip:port/ -p 5 -l 350 -e x.x.x.x:8080
命令欄位含義
-a 一開始開始值范圍說明符用于范圍頭測驗
-b 將位元組限制的范圍說明符用于范圍頭測驗
-c 連接數限制為65539
-d proxy host:port用于指導所有流量通過web代理
-e proxy host:port埠用于指導只有探針交通通過web代理
-h,B,R或x 指定級訓在頭部分或在訊息體,- R 允許范圍檢驗,使慢讀測驗- x
-g 生成統計資料在CSV和HTML格式,模式是緩慢的xxx,csv / html,其中xxx是時間和日期
-i seconds秒間隔跟蹤資料在幾秒鐘內,每個連接
-k 管道因子次數重復請求在同一連接慢讀測驗如果服務器支持HTTP管道內襯,
-l 在幾秒鐘內,秒測驗時間
-n 秒間隔從接識訓沖區讀取操作
-o 檔案定義輸出檔案路徑和/或名稱,如果指定有效- g
-p 秒超時等待HTTP回應在探頭連接后,服務器被認為是不可訪問的
-r seconds連接速度
-s 位元組值的內容長度標題詳細說明,如果指定- b
-t verb自定義
-u URL目標URL,相同的格式鍵入瀏覽器,e,g https://host[:port]/
-v level冗長等級0 – 4的日志
-w 位元組范圍廣告的視窗大小會選擇從
-x 位元組最大長度的跟蹤資料結束
-y 位元組范圍廣告的視窗大小會選擇從
-z 位元組從接識訓沖區讀取位元組與單一的read()操作
以上,
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/319672.html
標籤:其他
