零基础玩转bWAPP靶场(七十一):Slow HTTP DoS(慢速HTTP拒绝服务)

**摘要:**本文以bWAPP靶场中的"Denial-of-Service (Slow HTTP DoS)"关卡为实践场景,深入剖析Slowloris慢速HTTP拒绝服务攻击的技术原理与利用方法。文章从HTTP协议连接保持机制出发,详细讲解Slowloris如何通过发送不完整的HTTP请求头耗尽服务器连接池资源,并结合slowhttptest和Slowloris攻击脚本在bee-box靶机上完成完整的攻击验证。同时,文章梳理了Slowloris从2009年公开披露到近年HTTP/2 Bomb演进的真实攻击事件与防御策略。通过本文,读者将掌握慢速HTTP拒绝服务攻击的核心技术,理解应用层DoS攻击的隐蔽性与危害性,并学习在生产环境中有效防御此类攻击的配置方法。


一、前言

什么是Slow HTTP DoS:

Slow HTTP DoS(慢速HTTP拒绝服务)是一种应用层拒绝服务攻击,与传统SYN Flood、UDP Flood等高流量洪水攻击不同,它不追求瞬间的大流量冲击,而是通过发送极慢速、不完整的HTTP请求,长时间占用服务器连接资源,最终使服务器无法响应正常用户的请求。

这种攻击方式的隐蔽性极强------攻击流量与正常用户请求在流量层面几乎没有区别,传统的流量清洗设备很难将其识别为恶意流量。同时,由于攻击只需要极少的网络带宽,攻击者利用普通家庭宽带即可对高性能服务器发起有效攻击,攻击成本极低而破坏力巨大。

Slow HTTP DoS主要包括以下几种攻击类型:

  • Slow Headers(Slowloris) :建立TCP连接后,发送不完整的HTTP请求头,每隔一段时间发送一个随机Header字段,使服务器一直等待请求结束,直至连接池耗尽。

  • Slow Body(R-U-Dead-Yet) :发送完整的POST请求头,声明一个非常大的Content-Length值,然后以极慢速度发送Body数据,服务器会一直等待接收完整个请求体。

  • Slow Read(慢速读取) :建立正常HTTP请求后,在读取响应数据时故意只读取少量数据,将TCP接收窗口设得很小,迫使服务器保持大量缓存等待发送。

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


二、关卡介绍

2.1 关卡页面信息

进入bWAPP后,在下拉菜单中选择"Denial-of-Service (Slow HTTP DoS)"关卡,。关卡页面显示以下信息:

The Apache web server is vulnerable to Slow HTTP DoS attacks! (bee-box only) Unleash the beezzz!

这一关卡的攻击目标是通过发送大量慢速、不完整的HTTP请求,耗尽Apache服务器的可用连接数,使服务器无法响应正常用户请求。

2.2 漏洞技术原理

2.2.1 HTTP请求的完整格式

一个标准的HTTP请求由请求行、请求头和请求体组成。请求头与请求体之间必须通过一个空行(即CRLF CRLF,\r\n\r\n)来分隔。服务器在接收到请求后,会持续读取客户端发送的数据,直到检测到完整的请求头结束标志(空行),才会开始处理请求。

在正常情况下,浏览器或客户端发送的请求会迅速完成。但HTTP协议本身并没有规定客户端必须在多长时间内发送完请求头,这为Slowloris攻击提供了可乘之机。

2.2.2 Slowloris的攻击机制

Slowloris的核心思想是:建立一个合法的TCP连接,发送一个不完整的HTTP请求头,然后定期发送一些无关紧要的Header字段,但始终不发送结束请求头的空行

具体工作流程如下:

  • 攻击者与目标服务器建立TCP连接(三次握手)。

  • 发送一个HTTP请求头,但故意不发送结束请求头的CRLF CRLF(即不发送空行),使服务器认为请求尚未结束。

  • 每隔一段时间(小于服务器空闲超时时间)发送一个新的随机Header字段,如X-a: b,保持连接活跃。

  • 服务器持续保持连接打开,等待接收完整的请求头。

  • 攻击者重复上述步骤,建立大量并发连接。

  • 服务器的连接池被这些半开连接占满,无法接受新的合法请求,导致服务不可用。

服务器维护连接直到HTTP请求完成是其固有属性,Slowloris正是利用了这一点。每次发送的Header字段都会重置服务器的超时计时器,使连接永远不会因超时而关闭。

2.2.3 攻击的危害性

Slowloris攻击的危害主要体现在以下几个方面:

极低的攻击成本:攻击者只需要一台普通计算机和少量的网络带宽即可发起攻击。与需要大量僵尸网络的传统DDoS攻击相比,Slowloris的入门门槛极低。

难以检测:由于攻击流量与正常用户的慢速连接没有本质区别,基于流量特征的检测方法很难将其识别为攻击行为。

针对性极强 :Slowloris主要针对Apache等基于线程/进程模型的Web服务器。Apache的默认配置(如prefork模式)在处理每个连接时会占用一个独立的进程或线程,连接数被占满后,新请求将被拒绝或排队等待。

可绕过传统防护:传统的四层DDoS防护设备(基于TCP层的流量清洗)无法有效防御Slowloris,因为攻击者的TCP连接是完整且合法的。

2.3 受影响的服务器类型

不同Web服务器对Slowloris的敏感程度不同:

  • Apache HTTP Server :默认配置下容易受到Slowloris攻击。Apache的preforkworker模式下,每个连接占用一个进程或线程,连接数被占满后服务不可用。Apache基金会曾表示等待HTTP头完成发送是Web服务器固有的行为,不认为这是一个需要修复的漏洞。

  • Microsoft IIS:对HTTP头设置了超时限制,超过超时时间的连接会被自动关闭,因此Slowloris对IIS的攻击效果有限。

  • Nginx:基于事件驱动的异步架构,使用较少的进程处理大量连接,对Slowloris的抵御能力相对较强。但如果不配置合理的超时参数,仍可能受到影响。


三、通关步骤

3.1 环境准备

本次实验环境如下:

  • 攻击机:Kali Linux,IP地址为10.0.0.129

  • 靶机:bee-box v1.6,IP地址为10.0.0.177(同一网络环境)

  • 目标服务:Apache HTTP Server,监听端口80

  • 攻击工具:slowhttptest、Slowloris脚本

首先,确保Kali Linux已安装slowhttptest工具:

复制代码
sudo apt update
sudo apt install slowhttptest

验证安装:

复制代码
slowhttptest -h

slowhttptest是一款高度可配置的应用层拒绝服务攻击模拟工具,支持Slowloris、Slow HTTP POST、Slow Read和Apache Range Header等多种攻击模式。

3.2 使用slowhttptest发起Slowloris攻击

3.2.1 基本命令

在Kali Linux终端中,执行以下命令发起Slowloris攻击:

复制代码
slowhttptest -c 1000 -H -g -o slowhttp -i 10 -r 200 -t GET -u http://10.0.0.177/bWAPP/portal.php -x 24 -p 3

参数详细说明:

参数 含义
-c 1000 目标连接数 1000个并发连接
-H 攻击模式 Slow Headers(Slowloris)
-g 生成统计数据 生成CSV和HTML格式报告
-o slowhttp 输出文件名 保存为slowhttp.html/csv
-i 10 后续数据间隔 每10秒发送一次保持数据
-r 200 连接速率 每秒建立200个连接
-t GET HTTP方法 使用GET请求
-u URL 目标URL http://10.0.0.177/bWAPP/portal.php
-x 24 随机Header最大长度 每个随机Header字段最大24字节
-p 3 探测连接超时 3秒超时判断服务是否可用
3.2.2 攻击过程观察

slowhttptest运行后,终端会实时输出攻击状态:

从输出中可以观察到关键信息:

  • 连接数快速增长:每秒发起 200 个连接,攻击初期一共尝试建立 1000 个连接;实际成功维持的长连接约 360 个,其余处于 pending 挂起状态。

  • 服务可用性变化:在第 15 秒时,service available 从 YES 变为 NO,服务器已经无法响应正常的探测请求,之后全程服务不可用直到测试结束。

  • 连接保持:前 135 秒 closed 始终等于 0,慢速攻击持续 hold 住大量挂起连接;140‑145 秒之后大量 pending 连接开始超时关闭,最终 closed 达到 640;剩余 360 个连接依旧保持 connected 状态,服务仍然没有恢复可用。

3.3 使用Slowloris脚本发起攻击

除了slowhttptest,还可以使用Python编写的Slowloris脚本进行攻击。从GitHub下载Slowloris脚本:

复制代码
git clone https://github.com/gkbrk/slowloris.git
cd slowloris

在bWAPP靶场中,脚本需要使用域名而非IP地址访问。因此需要编辑Kali的/etc/hosts文件,将靶机IP与域名进行映射:

复制代码
sudo echo "10.0.0.177 bee.box" >> /etc/hosts

运行Slowloris脚本:

复制代码
python3 slowloris.py bee.box -s 1000

脚本的-s参数指定了要创建的套接字(连接)数量。运行后,脚本会创建大量线程,每个线程都会与目标服务器建立连接并发送不完整的HTTP请求头。

3.4 验证攻击效果

3.4.1 在靶机上检查连接状态

切换到bee-box虚拟机,使用netstat命令查看当前TCP连接状态:

复制代码
netstat -an | grep :80 | grep ESTABLISHED | wc -l

该命令会统计当前ESTABLISHED状态的HTTP连接数量。正常情况下该数值应该在合理范围内,但攻击期间会看到大量来自攻击者IP的连接处于ESTABLISHED状态。

使用以下命令查看具体的连接来源:

复制代码
netstat -an | grep :80 | grep ESTABLISHED | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -rn

输出结果会显示来自攻击机(10.0.0.177)的大量连接。这些连接都是由Slowloris攻击脚本创建的,每个连接都处于"等待请求头完成"的状态。

3.4.2 验证服务不可用

在攻击进行期间,尝试通过浏览器访问bWAPP的页面:

复制代码
http://10.0.0.177/bWAPP/portal.php

如果攻击成功,页面将长时间无法加载,最终显示超时错误。使用curl命令测试:

复制代码
curl -I http://10.0.0.177/bWAPP/portal.php

正常情况下该命令会立即返回HTTP响应头。但在攻击期间,curl命令会挂起等待,直到超时。

3.4.3 通过Wireshark分析攻击流量

在攻击机上使用Wireshark抓包,过滤HTTP流量。可以观察到攻击流量的特征:每个TCP连接上只发送了不完整的HTTP请求头(缺少最后的CRLF CRLF),并且每隔约10秒发送一个小的Header字段(如X-xxxx: xxxx)来保持连接活跃。

3.4.4 攻击成功的判断标准

bWAPP的Slow HTTP DoS关卡没有预设的"通关成功"提示。攻击是否成功需要通过以下指标综合判断:

  • 连接池耗尽 :靶机上ESTABLISHED连接数达到Apache的最大并发连接限制(默认为256或根据MaxRequestWorkers配置)。

  • 服务不可用 :正常用户无法访问bWAPP页面,curl请求超时。

  • 慢速连接存在:靶机上存在大量来自攻击者的慢速连接,每个连接只发送了部分HTTP头。

  • CPU和内存正常:与Large Chunk Size攻击不同,Slowloris攻击不会导致CPU或内存飙升,而是耗尽连接资源。系统资源使用率可能保持在正常水平,但服务已不可用。

3.5 攻击后的恢复

Slowloris攻击不会导致服务器崩溃或系统资源耗尽,因此攻击停止后,服务器会自动恢复。攻击脚本终止后,所有半开连接会被释放,服务器连接池恢复正常,合法用户可以重新访问服务。


四、真实世界漏洞事件

4.1 Slowloris的诞生与公开

Slowloris由安全研究员Robert "RSnake" Hansen于2009年6月17日公开发布。Hansen开发这一工具的目的是证明一个当时被广泛忽视的问题:Web服务器会因为等待不完整的HTTP请求而耗尽连接资源。

Slowloris发布后迅速引起了安全社区的广泛关注。该工具使用Perl编写,代码简洁但攻击效果显著------仅需一台普通计算机即可在短时间内使运行Apache的Web服务器完全停止响应。2009年,Slowloris被评选为"Top Ten Web Hacking Techniques"之一。

4.2 Apache基金会的回应

Slowloris发布后,Apache基金会做出了一个引发争议的回应。Apache开发团队表示,等待HTTP头完成发送是Web服务器"基本且固有的行为",不认为这是一个需要修复的漏洞,因此没有计划在Apache中"修复"它。

这一回应在安全社区引发了激烈讨论。批评者认为,Apache作为最流行的Web服务器之一,有责任保护其用户免受此类攻击。支持者则认为,Slowloris利用的是HTTP协议本身的特性,而非Apache的实现缺陷,修复这一问题可能影响正常用户的体验。

实际上,Apache后来通过提供mod_reqtimeout模块和配置调整建议来缓解Slowloris攻击,但并未从根本上改变服务器的连接处理模型。

4.3 OWASP的HTTP POST DoS研究

在Slowloris发布后不久,OWASP的研究人员Wong Onn Chee和Tom Brennan在2010年的AppSec DC会议上展示了一种新的慢速攻击方式------HTTP POST DoS(也称为R-U-Dead-Yet)。

与Slowloris利用不完整的请求头不同,HTTP POST DoS发送完整的请求头,但在Content-Length字段中声明一个非常大的值,然后以极慢的速度发送请求体数据。服务器会一直等待接收完整个请求体,从而长期占用连接资源。

这种攻击方式进一步扩展了慢速DoS攻击的武器库,使攻击者可以根据目标服务器的特性选择最有效的攻击方式。

4.4 和歌山大学Slow HTTP DoS攻击事件

2015年10月至12月期间,日本和歌山大学遭受了由Anonymous组织发起的Slow HTTP DoS攻击。攻击者使用了Slow HTTP Headers和Slow HTTP POST两种攻击方式,分多次对大学的Web服务器发起攻击。

这一事件是Slow HTTP DoS攻击在真实世界中的典型案例。攻击导致大学网站服务不可用,影响了正常的教学和科研活动。事件发生后,和歌山大学采取了部署WAF、调整服务器超时配置、加强流量监控等一系列防御措施。

4.5 日本警察厅的警示

日本警察厅曾发布警示,指出已经掌握多起利用Slow HTTP POST攻击工具进行恶意攻击的案例。这表明Slow HTTP DoS已经从安全研究领域扩散到实际的网络犯罪活动中,成为攻击者常用的攻击手段之一。

4.6 HTTP/2 Bomb:Slowloris的现代演进

2026年,安全研究人员利用OpenAI的Codex工具发现了名为"HTTP/2 Bomb"的新型攻击手法(CVE-2026-49975)。该攻击结合了HPACK压缩放大和HTTP/2流量控制中的Slowloris式资源保持,能够在几秒内使Web服务器离线。

这一发现表明,Slowloris的核心思想------通过保持连接不释放来耗尽服务器资源------在HTTP/2时代仍然有效,并且可以通过新的协议特性得到进一步增强。攻击者将经典的Slowloris攻击思想与现代协议特性相结合,产生了更具破坏力的攻击方式。


五、总结

5.1 关卡通关要点回顾

bWAPP的"Denial-of-Service (Slow HTTP DoS)"关卡演示了如何利用Slowloris慢速HTTP攻击耗尽Apache服务器的连接资源。通关的核心步骤包括:使用slowhttptest工具以-H模式发起Slow Headers攻击,设置1000个并发连接,每10秒发送一次保持数据;或使用Python Slowloris脚本创建大量半开连接。攻击成功的标志是靶机上出现大量ESTABLISHED状态的慢速连接,服务器无法响应正常用户的请求。

关键要点在于理解Slowloris的核心机制:通过发送不完整的HTTP请求头并定期发送保持数据,使服务器持续等待请求完成,从而长期占用连接资源。与Large Chunk Size攻击导致内存耗尽不同,Slowloris攻击不消耗大量CPU或内存,而是耗尽服务器的连接池。

5.2 防御策略

针对Slow HTTP DoS攻击,建议采取以下防御措施:

调整服务器超时配置 :降低Nginx的client_header_timeoutclient_body_timeout值,使服务器在合理时间内关闭未完成请求的连接。默认60秒的超时时间过长,建议设置为10-15秒。同时设置send_timeoutkeepalive_timeout为较小值。

限制连接数和请求速率 :使用Nginx的ngx_http_limit_conn_module模块限制每个IP的并发连接数,使用ngx_http_limit_req_module模块限制请求速率。配置示例如下:

复制代码
http {
    limit_conn_zone $binary_remote_addr zone=addr:10m;
    limit_req_zone $binary_remote_addr zone=mylimit:10m rate=1r/s;

    server {
        location / {
            limit_conn addr 10;
            limit_req zone=mylimit burst=5;
        }
    }
}

部署WAF或专用防护模块 :在Web服务器前部署Web应用防火墙,配置针对慢速HTTP攻击的检测规则。Apache用户可以安装mod_reqtimeoutmod_antiloris模块,这些模块能够检测并阻止Slowloris攻击。

使用反向代理或负载均衡器:在Nginx、HAProxy或F5等反向代理/负载均衡器后面部署应用服务器,利用代理服务器的连接管理能力吸收慢速攻击。反向代理可以配置更严格的超时策略,并在连接池满时拒绝新连接。

监控与告警:对Web服务器的连接数、请求处理时间和连接持续时间进行实时监控。当检测到大量长时间处于ESTABLISHED状态的连接时,触发告警以便及时响应。

升级软件版本:虽然Apache基金会不认为Slowloris是需要修复的漏洞,但新版本的Web服务器和中间件通常提供了更好的慢速攻击防护能力。保持软件更新是安全实践的基本要求。

5.3 渗透测试启示

从渗透测试的角度来看,Slow HTTP DoS关卡的实践价值在于:

第一,它展示了应用层DoS攻击的隐蔽性。与传统的流量型DDoS攻击不同,Slowloris的攻击流量与正常用户的慢速连接在流量特征上几乎没有区别,传统的流量清洗设备难以有效检测。

第二,它强调了连接资源管理的重要性。Web服务器的连接池是有限的资源,攻击者只需占用这些连接而不释放,就能使服务器无法服务正常用户。

第三,它说明了协议特性与安全风险的关联。HTTP协议允许客户端在任意时间内发送请求头,这一设计为Slowloris提供了攻击基础。理解协议层面的特性是发现和利用此类漏洞的关键。

5.4 结语

Slow HTTP DoS攻击虽然原理简单,但其破坏力不容小觑。从2009年Slowloris工具的公开,到2015年和歌山大学遭受的真实攻击,再到2026年HTTP/2 Bomb的出现,慢速DoS攻击的技术在持续演进,威胁也在不断升级。对于Web服务运营者而言,理解这类攻击的原理并采取有效的防御措施,是保障服务可用性的必要前提。对于安全从业者而言,掌握慢速DoS攻击的利用方法,有助于在渗透测试中更全面地评估目标系统的安全性。


**重要声明:**本教程及文中所有操作仅限于合法授权的安全学习与研究。作者及发布平台不承担因不当使用本教程所引发的任何直接或间接法律责任。请务必遵守中华人民共和国网络安全相关法律法规。

如果这篇文章帮你解决了实操上的困惑,别忘记点击点赞、分享 ,也可以留言告诉我你遇到的其它问题,我会尽快回复。你的关注是我坚持原创和细节共享的力量来源,谢谢大家。

相关推荐
程序员若风9 小时前
CSRF攻击原理介绍和利用-腾讯云开发者社区
前端·网络·安全·web安全·网络安全·csrf攻击·腾讯云开发者社区
白猫不黑1 天前
Python实现简易Web弱口令爆破与防护方案
python·web安全·计算机·网络安全·黑客·信息安全·渗透测试
迪康Defender1 天前
终端安全实战:如何高效解决企业U盘泄密与管控难题
运维·网络·安全·web安全·终端安全管理
网安小学生(兼顾数据库版)1 天前
固件+软件供应链:ONEKEY+Mend如何实现全链路安全覆盖
网络·安全·web安全
sbjdhjd1 天前
从日志包含到临时文件竞争:文件包含进阶复盘中的 Docker、Windows 与 Session 限制
网络·安全·web安全·网络安全·数据挖掘·php·rce
白猫不黑1 天前
网络安全面试题大全:22道高频题附解析与答案
web安全·计算机·网络安全·信息安全·渗透测试·编程·面试题
白猫不黑1 天前
零基础如何学习网络安全:从入门到实战的完整路线图
web安全·计算机·网络安全·黑客·信息安全·渗透测试·代码审计
蒲公英eric2 天前
DVWA通关全记录:从漏洞复现到安全防御——总结篇
web安全·ai·dvwa·ai安全
Koi慢热3 天前
DayDayMap学术社区体验:卫星网络测绘专题用下来怎么样
网络·人工智能·windows·web安全·网络安全