slowhttptest簡介:
Slowhttptest是依賴HTTP協議的慢速攻擊DoS攻擊工具,設計的基本原理是服務器在請求完全接收后才會進行處理,如果客戶端的發送速度緩慢或者發送不完整,服務端為其保留連接資源池占用,大量此類請求並發將導致DoS。
攻擊模式:
slowloris:完整的http請求是以\r\n\r\n結尾,攻擊時僅發送\r\n,少發送一個\r\n,服務器認為請求還未發完,就會一直等待直至超時。等待過程中占用連接數達到服務器連接數上限,服務器便無法處理其他請求。
slow http post:原理和slowloris有點類似,這次是通過聲明一個較大的content-length后,body緩慢發送,導致服務器一直等待
slow read attack:向服務器發送一個正常合法的read請求,請求一個很大的文件,但認為的把TCP滑動窗口設置得很小,服務器就會以滑動窗口的大小切割文件,然后發送。文件長期滯留在內存中,消耗資源。這里有兩點要注意:
1.tcp窗口設置要比服務器的socket緩存小,這樣發送才慢。
2.請求的文件要比服務器的socket緩存大,使得服務器無法一下子將文件放到緩存,然后去處理其他事情,而是必須不停的將文件切割成窗口大小,再放入緩存。同時攻擊端一直說自己收不到。
slowhttptest安裝
代碼托管在https://github.com/shekyan/slowhttptest
可從源碼編譯安裝,前提先安裝好openssl-devel(centos,rehat)
debian用戶請執行 apt-get install openssl apt-get install libssl-dev 不然會出現錯誤
進入解壓目錄 直接運行
./configure
make && make install 即可
參數:
-g 在測試完成后,以時間戳為名生成一個CVS和HTML文件的統計數據
-H SlowLoris模式
-B Slow POST模式
-R Range Header模式
-X Slow Read模式
-c number of connections 測試時建立的連接數
-d HTTP proxy host:port 為所有連接指定代理
-e HTTP proxy host:port 為探測連接指定代理
-i seconds 在slowrois和Slow POST模式中,指定發送數據間的間隔。
-l seconds 測試維持時間
-n seconds 在Slow Read模式下,指定每次操作的時間間隔。
-o file name 使用-g參數時,可以使用此參數指定輸出文件名
-p seconds 指定等待時間來確認DoS攻擊已經成功
-r connections per second 每秒連接個數
-s bytes 聲明Content-Length header的值
-t HTTP verb 在請求時使用什么操作,默認GET
-u URL 指定目標url
-v level 日志等級(詳細度)
-w bytes slow read模式中指定tcp窗口范圍下限
-x bytes 在slowloris and Slow POST tests模式中,指定發送的最大數據長度
-y bytes slow read模式中指定tcp窗口范圍上限
-z bytes 在每次的read()中,從buffer中讀取數據量
實例:
slowloris模式:
slowhttptest -c 1000 -H -g -o my_header_stats -i 10 -r 200 -t GET -u https://xxxxxx.xxxxx.xx -x 24 -p 3
slow post模式:
$ slowhttptest -c 3000 -B -g -o my_body_stats -i 110 -r 200 -s 8192 -t FAKEVERB -u http://xxx.xxx.xxx -x 10 -p 3
slow read模式:
$ slowhttptest -c 8000 -X -r 200 -w 512 -y 1024 -n 5 -z 32 -k 3 -u https://xxx.xxx.xxx -p 3