http get post 慢速攻击 slowhttptest
kevin.Zhu 发布于:2021-3-24 16:07 分类:文摘 有 22 人浏览,获得评论 0 条
https://blog.csdn.net/weixin_33974433/article/details/90305323
提起攻击,第一反应就是海量的流量、海量的报文。但有一种攻击却反其道而行之,以慢著称,以至于有些攻击目标被打死了都不知道是怎么死的,这就是慢速连接攻击。
slowhttptest是一款对服务器进行慢攻击的测试软件,包含了几种攻击方式,像Slowloris、SlowHTTP POST、Slow Read attack等。
总而言之,该工具的原理就是设法让服务器等待,当服务器在保持连接等待时,就消耗了资源。
1、 最具代表性的是rsnake发明的Slowloris,又被称为slow headers。
【攻击原理】
HTTP协议规定,HTTP Request以\r\n\r\n(0d0a0d0a)结尾表示客户端发送结束,服务端开始处理。那么,如果永远不发送\r\n\r\n会如何?Slowloris就是利用这一点来做DDoS攻击的。攻击者在HTTP请求头中将Connection设置为Keep-Alive,要求Web Server保持TCP连接不要断开,随后缓慢地每隔几分钟发送一个key-value格式的数据到服务端,如a:b\r\n,导致服务端认为HTTP头部没有接收完成而一直等待。如果攻击者使用多线程或者傀儡机来做同样的操作,服务器的Web容器很快就被攻击者占满了TCP连接而不再接受新的请求。
【工具演示】
用Wireshark抓包查看http请求头中有随机的key-value键值对,如下图红圈所示,且http请求头结尾不完整,是“0d 0a”
如果是正常的http请求头,结尾是“0d0a 0d 0a”,正常结束客户端请求 如下图所示
2、Slowloris的变种--Slow HTTP POST,也称为Slow body。
【攻击原理】
在POST提交方式中,允许在HTTP的头中声明content-length,也就是POST内容的长度。
在提交了头以后,将后面的body部分卡住不发送,这时服务器在接受了POST长度以后,就会等待客户端发送POST的内容,攻击者保持连接并且以10S-100S一个字节的速度去发送,就达到了消耗资源的效果,因此不断地增加这样的链接,就会使得服务器的资源被消耗,最后可能宕机。
【工具演示】
用Wireshark抓包可以看到,header结尾是正常的“0d 0a 0d 0a”,但Content-Length字段设置为一个很大的值8192,同时不在一个包中发送完整post数据而是每间隔100秒发送随机的key-value键值对。
3、Slow Read attack
【攻击原理】
采用调整TCP协议中的滑动窗口大小,来对服务器单次发送的数据大小进行控制,使得服务器需要对一个回应分成很多个包来发送。要使这种攻击效果更加明显,请求的资源要尽量大。
【工具演示】
用Wireshark抓包可以看出,当请求a.wmv资源(大小有9M多)时,客户端windowssize被刻意设置为1152字节。客户端缓冲区在被来自服务器的数据填满后,发出了[TCP ZeroWindow]告警,迫使服务端等待。
受到以上各种慢速攻击后,服务器再无法访问
1. 关于HTTP POST慢速DOS攻击
HTTP Post慢速DOS攻击第一次在技术社区被正式披露是今年的OWASP大会上,由Wong Onn Chee 和 Tom Brennan共同演示了使用这一技术攻击的威力。他们的slides在这里:
这个攻击的基本原理如下:
针对任意HTTP Server,建立一个连接,指定一个比较大的content-length,然后以很低的速度发包,比如10-100s发一个字节,hold住这个连接不断开。如果客户端持续建立这样的连接,那么服务器上可用的连接将很快被占满,从而导致DOS.
这一攻击引起我注意的原因有这几点:
1. 它可以针对任意Web服务。HTTP协议在接收到request之前是无法对请求内容作校验的,所以即使你的Web应用没有可用form表单,这个攻击一样有效。
2. 廉价。在客户端以单线程方式建立较大数量的无用连接,并保持持续发包的代价非常低廉。实际试验中一台普通PC可以建立的Socket连接在3000个以上。这对一台普通的web server,将是致命的打击。更不用说结合肉鸡群做分布式DOS了。
-
存档
- 2024年2月(1)
- 2024年1月(15)
- 2023年12月(2)
- 2023年11月(7)
- 2023年10月(5)
- 2023年8月(1)
- 2023年6月(3)
- 2023年5月(1)
- 2023年4月(4)
- 2023年3月(14)
- 2023年2月(8)
- 2023年1月(10)
- 2022年12月(21)
- 2022年11月(24)
- 2022年10月(16)
- 2022年9月(16)
- 2022年8月(31)
- 2022年7月(25)
- 2022年6月(10)
- 2022年5月(20)
- 2022年4月(32)
- 2022年3月(16)
- 2022年2月(9)
- 2022年1月(13)
- 2021年12月(7)
- 2021年11月(16)
- 2021年10月(8)
- 2021年9月(12)
- 2021年8月(12)
- 2021年7月(21)
- 2021年6月(13)
- 2021年5月(20)
- 2021年4月(19)
- 2021年3月(9)
- 2021年2月(3)
- 2021年1月(10)
- 2020年12月(16)
- 2020年11月(13)
- 2020年10月(2)
- 2020年9月(17)
- 2020年8月(4)
- 2020年7月(15)
- 2020年6月(5)
- 2020年5月(1)
- 2020年4月(21)
- 2020年3月(44)
- 2020年2月(20)
- 2020年1月(12)
- 2019年12月(9)
- 2019年11月(13)
- 2019年10月(44)
- 2019年9月(18)
- 2019年8月(15)
- 2019年7月(6)
- 2019年6月(17)
- 2019年5月(10)
- 2019年4月(24)
- 2019年3月(6)
- 2019年2月(2)
- 2019年1月(9)
- 2018年12月(16)
- 2018年11月(6)
- 2018年10月(10)
- 2018年9月(7)
- 2018年8月(8)
- 2018年7月(13)
- 2018年6月(20)
- 2018年5月(22)
- 2018年4月(25)
- 2018年3月(34)
- 2018年2月(9)
- 2018年1月(29)
- 2017年12月(13)
- 2017年11月(29)
- 2017年10月(19)
- 2017年9月(24)
- 2017年8月(27)
- 2017年7月(21)
- 2017年6月(35)
- 2017年5月(61)
- 2017年4月(17)
- 2017年3月(5)
- 2016年8月(1)
- 2014年3月(12)
- 2014年2月(25)
- 2014年1月(22)
- 2013年12月(29)
- 2013年11月(19)
- 2013年10月(18)
- 2013年9月(23)
- 2013年8月(24)
- 2013年7月(22)
- 2013年6月(15)
- 2013年5月(11)
- 2013年4月(36)
- 2013年3月(28)
- 2013年2月(35)
- 2013年1月(627)
-
最新文章
- docker 容器镜像日志满了,解决方案
- sshd_config 中文手册:关于ssh 设置的相关总结(ssh最大连接数、ssh连接时长、安全性配置等)
- 如何在 Linux 中使用 SSH ProxyJump 和 SSH ProxyCommand
- ubuntu - apt-get更新非交互式
- /lib/x86_64-linux-gnu/libc.so.6: version `GLIBC_2.32' not found
- Golang中,Aes加解密
- Go实现MD5加密的三种方法小结
- go语言 跟 php nodejs通用的加解密代码
- Win10/11 更改 WSL Docker Desktop 存储路径
- go语言使用vscodedebug 输入数据怎么调试
- ubuntu18.04安装Go语言
- 一键生成ssl证书脚本
- 一键生成自签名SSL秘钥证书
- nginx根据不同的域名将反向代理的tcp连接分流到不同的后端服务器上
- WSL2支持systemctl命令
- WSL 双系统端口映射,网络穿透最新教程
- 使用apt-mirror搭建debian本地仓库 apt源 debian源
- vscode设置打开多个标签页
- 使用IPTABLES实现对特定IP,端口流量的精确统计
- 开源免费的知识库文档管理系统(合集+排名)
- Windows 10(21H2)+ LTSC 2021 最新版MSDN官方简体中文原版ISO镜像下载地址
- Typora语法学习-自我总结笔记
- win7原版下载地址
- 解决在 Win7 旗舰版虚拟机中安装 VMware Tools 失败问题
- windows安装QT
- 使用pkg打包zx编写的nodejs程序
- nodejs库-inquirer.js
- 在nodejs代码中使用 import 替代require
- konva教程
- konva中文文档
-
热门文章