【网络安全】HTTP Slowloris攻击原理解析

文章目录

    • Slowloris攻击的概念
    • Slowloris攻击原理
    • Slowloris攻击的步骤
    • 其他的DDoS攻击类型
      • UDP Flood
      • ICMP (Ping) Flood
      • SYN Flood
      • Ping of Death
      • NTP Amplification
      • HTTP Flood
      • Zero-day DDoS 攻击
    • 推荐阅读

Slowloris攻击的概念

Slowloris是在2009年由著名Web安全专家RSnake提出的一种攻击方法,Slowloris是一种针对Web服务器的攻击方式。它利用了服务器在处理HTTP连接时的一些弱点,通过向服务器发送大量的HTTP请求,但在每个请求的头部只发送部分数据并保持连接不断开的方式来耗尽服务器资源。

Slowloris攻击原理

攻击者使用Slowloris攻击时,会向目标服务器发送大量的请求,但这些请求不会完全发送完整的HTTP头部信息,而是会保持未完成状态。由于这些请求未完成,服务器会为每个请求保持连接状态,但却不会响应或关闭这些连接。这导致服务器的连接资源最终被耗尽,无法响应其他正常的合法请求,使得服务器无法向合法用户提供Web服务。
在这里插入图片描述
在正常的HTTP包头中,是以两个CLRF1表示HTTP Headers部分结束的。如果Web Server只收到了一个\r\n,因此将认为HTTP Headers部分没有结束,并保持此连接不释放,继续等待完整的请求。此时客户端再发送任意HTTP头,保持住连接即可。

import requests# 定义头部信息
headers = {'User-Agent': 'My User Agent',         # 用户代理信息'Accept': 'application/json',          # 接受的内容类型'Content-Type': 'application/json',    # 请求的内容类型'Authorization': 'Bearer YOUR_TOKEN',  # 授权信息# 添加其他需要的头部信息...
}# 构造请求
url = 'https://api.example.com/endpoint'
response = requests.get(url, headers=headers)# 输出响应内容
print(response.text)

以python为例,在引入requests库时,requests 库会自动处理生成符合 HTTP 标准的头部信息,包括正确的 CRLF 格式。你只需提供键值对形式的头部信息,库会负责构建正确格式的头部。这样,就避免了开发人员无意间造成的慢速访问或者慢速攻击。

Slowloris攻击不会占用很大的网络带宽,只是利用看起来正常但是很慢,并且是正常的流量来消耗服务器的资源,所以被归类为“慢速”攻击。

Slowloris攻击的步骤

  1. 建立连接: 攻击者利用自动化工具向目标服务器发起大量的网络连接请求。

  2. 发送部分请求头: 每个连接都会发送一个HTTP请求,但请求头部信息只会发送部分内容,保持请求处于未完成状态。

  3. 保持连接打开: 攻击者会定期向服务器发送少量数据以保持连接处于打开状态,但不会完成整个HTTP请求。这样,服务器为每个连接保持打开状态,并等待请求的完成。

  4. 耗尽服务器资源: 由于服务器在等待这些请求完成而保持连接打开,这会消耗服务器的连接资源。随着攻击者不断创建新的连接并保持它们处于未完成状态,服务器的连接资源最终会耗尽,导致合法用户无法建立新的连接或访问服务器。

  5. 拒绝服务: 一旦服务器的连接资源被耗尽,它将无法响应新的合法请求,导致服务不可用,即拒绝服务攻击(Denial of Service)。

其他的DDoS攻击类型

UDP Flood

UDP flood是指用用户数据报协议(UDP)数据包淹没目标的任何DDoS攻击。攻击的目的是攻击远程主机上的随机端口。这使得主机反复检查在该端口侦听的应用程序,并且(当没有找到应用程序时)发送一个ICMP“目的地不可达”数据包的响应。这个过程会消耗主机资源,最终导致其他用户无法访问。
在这里插入图片描述

ICMP (Ping) Flood

与UDP flood攻击类似,ICMP flood攻击通过ICMP Echo Request (ping)报文淹没目标资源,通常以最快的速度发送报文,而不等待应答。这种类型的攻击会消耗传入和传出带宽,因为受害者的服务器通常会尝试使用ICMP Echo Reply数据包进行响应,从而导致整个系统的显著减速。
在这里插入图片描述

SYN Flood

SYN flood DDoS攻击利用了TCP连接序列中的一个普遍弱点(“三次握手”),其中SYN发起到主机的TCP连接的请求必须由该主机的SYN-ACK响应响应,然后由请求者的ACK回复确认。在SYN洪水的场景中,请求者将发送多个SYN请求,但要么不响应主机的SYN- ack响应,要么从欺骗的IP地址发送SYN请求。
无论哪种方式,主机系统都会继续等待每个请求的确认,绑定资源,直到无法建立新的连接,并最终导致拒绝服务。
在这里插入图片描述

Ping of Death

POD或死亡ping攻击涉及攻击者向计算机发送几个恶意或畸形的ping。IP报文的最大长度(包括报头)为65,535字节。然而,数据链路层经常对最高帧大小设置限制——例如,在以太网网络上限制为1500字节。在这种情况下,一个大的IP数据包被分成不同的IP数据包(分片),接收主机将这些IP分片重新组装成一个完整的数据包。
在Ping of Death的攻击中,在恶意操纵片段内容后,重新组装时,会给接收方留下一个大于65,535字节的IP数据包。这可能超出为数据包分配的内存缓冲区,从而导致拒绝合法数据包的服务。
在这里插入图片描述

NTP Amplification

NTP(Network Time Protocol)放大攻击是一种利用NTP服务器的特性来发起分布式拒绝服务(DDoS)攻击的方式。NTP是用于同步计算机系统时间的协议,攻击者利用其Monlist命令的特性来进行攻击。

攻击者向运行NTP服务器的计算机发送伪造的请求,将目标IP地址设置为受害者的IP。NTP服务器会响应这个请求,并将一个包含最多最近的客户端的IP地址的响应发送回被伪造的IP地址(即受害者的IP地址)。攻击者利用这一点,向NTP服务器发送大量伪造请求,并导致NTP服务器向受害者发送大量的响应数据,从而将其网络连接耗尽,造成拒绝服务。

攻击的效果类似于其他放大攻击(例如DNS放大攻击),攻击者发送小型请求,但服务器的响应会远远大于请求的大小,这导致了数据的放大效应,最终使受害者遭受大量的网络流量,超出其网络带宽和处理能力的承受范围。

在这里插入图片描述

HTTP Flood

HTTP flood攻击是一种DDoS(分布式拒绝服务)攻击,利用大量伪造的HTTP请求同时向目标服务器发送请求,目的在于超载服务器的处理能力,使其无法有效地处理合法用户的请求,导致服务不可用。攻击者通过发送大量请求,耗尽服务器的资源,如带宽、处理器等,造成网络阻塞或服务器崩溃,使合法用户无法访问或使用目标网站或服务。

在这里插入图片描述

Zero-day DDoS 攻击

Zero-day DDoS Attacks是指利用针对未知漏洞的攻击手法,针对网络系统进行分布式拒绝服务(DDoS)攻击,攻击者利用这些未被厂商或组织发现的安全漏洞,通过快速开发和利用这些漏洞来对网络设施进行攻击,导致系统服务不可用。
【网络安全】零日漏洞(0day)是什么?如何防范零日攻击?
这类攻击对于网络防御者来说尤其具有挑战性,因为攻击利用了未知漏洞,使得预防和应对变得更为困难,通常需要实时响应和快速补救措施,以最小化攻击带来的影响。

推荐阅读

  • 【网络安全】零日漏洞(0day)是什么?如何防范零日攻击?
  • 【网络安全】网络设备可能面临哪些攻击?
  • 【漏洞修复】Cisco IOS XE软件Web UI权限提升漏洞及修复方法
  • 【网络安全】专门为Web应用程序提供安全保护的设备-WAF

  1. CLRF指的是"Carriage Return Line Feed"(回车换行),它是一种控制字符序列,用于表示文本中的换行操作。在不同的操作系统和文本文件中,换行的方式可能有所不同。
    回车(Carriage Return):在ASCII字符集中,它的十六进制值是0x0D,通常表示为 \r。回车符指示将光标移动到当前行的开头位置。
    换行(Line Feed):在ASCII字符集中,它的十六进制值是0x0A,通常表示为 \n。换行符指示将光标移动到下一行的开头位置。
    在很多操作系统中,换行被表示为回车符后紧跟着一个换行符(即CRLF,\r\n),而在一些其他的系统中,可能只使用回车符(\r)或者换行符(\n)来表示换行。 ↩︎

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/226498.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Vue3项目中集成mars3D简单三部曲

Vue3项目中集成mars3D简单三部曲 这里是参考网址,大佬可以点击一件跳转 1.安装依赖 npm install vite-plugin-mars3d --save-dev2.修改 vite.config.ts 配置文件 import { defineConfig } from vite; import { mars3dPlugin } from vite-plugin-mars3d;export d…

禁毒知识竞赛流程和规则

禁毒知识竞赛是一项全国性竞赛活动。有着深化全国青少年毒品预防教育,巩固学校毒品预防教育成果的重要作用。本文介绍一场禁毒知识竞赛的完整流程和规则,供单位组织此类活动时参考。 1、赛制 第一轮10进6,第二轮6进4,4支队伍决出…

互联网大厂月薪分布:字节跳动超 5% 员工月薪高于 5 万

近期,某统计机构公开了国内互联网巨头的薪资分布情况。根据统计数据显示,贝壳、阿里、滴滴、拼多多、快手和腾讯等公司超过60%的员工,月薪集中在3-5万的区间。而拼多多和字节跳动更有超过5%的员工月薪超过5万。 华为,一个众所周知…

小程序接口OK,桌面调试接口不行

手机小程序OK,桌面版出现问题; 环境:iis反向url的tomcat服务,提供接口。 该接口post了一个很大的数组,处理时间比较久。 1)桌面调试出现错误,提示 用apipost调用接口同样出错, 502 - Web 服务器在作为网关或代理服…

PostgreSql 序列

一、概述 在 PostgreSQL 中,序列用于生成唯一标识符,通常用于为表的主键列生成连续的唯一值。若目的仅是为表字段设置自增 id,可考虑序列类型来实现,可参考《PostgreSql 设置自增字段》 二、创建序列 2.1 语法 CREATE [ TEMPOR…

redis:四、双写一致性的原理和解决方案(延时双删、分布式锁、异步通知MQ/canal)、面试回答模板

双写一致性 场景导入 如果现在有个数据要更新,是先删除缓存,还是先操作数据库呢?当多个线程同时进行访问数据的操作,又是什么情况呢? 以先删除缓存,再操作数据库为例 多个线程运行的正常的流程应该如下…

在linux下正确安装部署locust

我们在安装python,pip之后,利用pip安装locust并不能执行相应的locust命令,原因是linux下面无像在windows下面pycharm一样的解释器,这个时候需要创建虚拟环境,在虚拟环境下面能运行的环境中,才能运行locust&…

基于QTreeWidget实现多级组织结构

基于QTreeWidget实现多级组织结构以及带Checkbox的选择树 采用基于QWidgetMingw实现的多级组织结构树 通过QTreeWidget控件实现的多级组织结构树。 Qt相关系列文章: 一、Qt实现的聊天画面消息气泡 二、基于QTreeWidget实现多级组织结构 三、基于QTreeWidget实现带Ch…

OceanBase数据库初识

文章目录 说明分布式数据库发展发展历史OceanBase和传统数据库的对比总结 OceanBase数据库产品简介应用案例 OceanBase数据库产品OceanBase数据库内核OceanBase开发者中心(ODC)产品架构OMS核心功能简介 说明 本文仅供学习和交流学习内容参考官方的培训资…

【已解决】解决无法找到sun.misc.BASE64Encoder的jar包的解决方法

idea中可能会出现没有sun.misc.BASE64Encoder的jar包。但是64位编码却需要用到.BASE64Encoder。有以下两种方法: 错误现象: 错误原因: 1.JDK改为8(原因是/lib/tool.jar和/lib/rt.jar已经从Java SE 9中删除)&#xff…

代码随想录二刷 |二叉树 |145.二叉树的后序遍历

代码随想录二刷 |二叉树 |145.二叉树的后序遍历 题目描述解题思路代码实现递归法迭代法 题目描述 145.二叉树的后序遍历 给你一棵二叉树的根节点 root ,返回其节点值的 后序遍历 。 示例 1: 输入:root [1,null,2,…

【算法集训】基础数据结构:九、完全二叉树

完全二叉树是二叉树的一种,它是除了叶子节点外其余各节点都为满二叉树,叶子节点只在倒数第一层或第二层出现。 即使是最后一层的叶子节点也是从左到右依次排列,中间不会空。 每一层都是按从左到右的顺序编号,所以一个节点i的叶子节…

自动化测试(二)selenium八大获取元素方法及对象操作

目录 webdriver API 脚本实例 元素的定位 1. 通过id定位: 2. 通过name方式定位 3. 通过tag name(标签名)定位 4. 通过class name (类名)方式定位 5. 通过CSS 方式定位 6. 通过xpath方式定位 7. link text定位 8. Parti…

[原创][R语言]股票分析实战:周级别涨幅趋势的相关性

[简介]常用网名: 猪头三 出生日期: 1981.XX.XX QQ联系: 643439947 个人网站: 80x86汇编小站 https://www.x86asm.org 编程生涯: 2001年~至今[共22年] 职业生涯: 20年 开发语言: C/C、80x86ASM、PHP、Perl、Objective-C、Object Pascal、C#、Python 开发工具: Visual Studio、De…

【PostgreSQL】从零开始:(一)初识PostgreSQL

从零开始:(一)初识PostgreSQL PostgreSQL数据库介绍为什么使用 PostgreSQL?那么多最终用户,云厂商为什么要贡献核心代码?基于PostgreSQL底层开发的好处:为什么要学习PostgreSQL?截止本文发布之日&#xff0…

将一个带头结点单链表 A分解为A 和 B 使得 A 中为奇数项元素,B 中为偶数项元素,保持其相对顺序不变。

题目描述:将一个带头结点单链表 A分解为A 和 B 使得 A 中为奇数项元素,B 中为偶数项元素,保持其相对顺序不变。 void EvenAndOdd(LinkList &A){LinkList *B (LinkList)malloc(sizeof(LNode));B->next NULL;LNode *p A->next;LN…

数据库 02-03 补充 SQL的子查询(where,from),子查询作为集合来比较some,exists,all(某一个,存在,所有)

子查询: where字句的子查询: 通常用in关键字: 举个例子: in关键字: not in 关键字: in 也可以用于枚举集合: where中可以用子查询来作为集合来筛选元祖。 some,all的运算符号…

一个程序,实现随机随机数据生成自由

shigen坚持更新文章的博客写手,擅长Java、python、vue、shell等编程语言和各种应用程序、脚本的开发。记录成长,分享认知,留住感动。 发现又是好久没有和大家见面了,先给大家分享一下最近的研究方向和成果: 最近接到的…

Shell三剑客:sed(简介)

一、前言 Stream EDitor:流编辑 sed 是一种在线的、非交互式的编辑器,它一次处理一行内容。处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”(pattern space),接着用sed命令处理缓冲区中的内容,处理完成后&…

【Spark精讲】Spark五种JOIN策略

目录 三种通用JOIN策略原理 Hash Join 散列连接 原理详解 Sort Merge Join 排序合并连接 Nested Loop 嵌套循环连接 影响JOIN操作的因素 数据集的大小 JOIN的条件 JOIN的类型 Spark中JOIN执行的5种策略 Shuffle Hash Join Broadcast Hash Join Sort Merge Join C…