利用HTTP进行拒绝服务攻击的一些构思

2024-03-24 02:32

本文主要是介绍利用HTTP进行拒绝服务攻击的一些构思,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

由于HTTP协议是基于请求/响应范式的(相当于客户机/服务器)。一个客户机与服务器建立连接后,发送一个请求给服务器,请求方式的格式为:统一资源标识符(URL)、协议版本号,后边是MIME信息包括请求修饰符、客户机信息和可能的内容。服务器接到请求后,给予相应的响应信息,其格式为一个状态行,包括信息的协议版本号、一个成功或错误的代码,后边是MIME信息包括服务器信息、实体信息和可能的内容。
  
  留意这行文字:“服务器接到请求后,给予相应的响应信息,其格式为一个状态行”,这是HTTP协议的一个重要特性,我们可以做个实验:
  用TELNET或任何一个能建立HTTP连接的程序连接到某服务器的80端口,手工输入:
  GET /index.htm HTTP/1.0(必须确保这个工具能自动产生两个换行符,否则服务器会认为你没有输入完全!)
  如果index.htm存在,你会看到类似以下的报文:
  
  HTTP/1.1 200 OK
  Server: Microsoft-IIS/5.0
  Content-Location: http://www.******.com/index.htm
  Date: Sat, 20 Jul 2002 23:32:03 GMT
  Content-Type: text/html
  Accept-Ranges: bytes
  Last-Modified: Wed, 03 Jul 2002 09:50:05 GMT
  ETag: "8e2ba27722c21:850"
  Content-Length: 3292
  <html>
  <head>
  <title>青涩宝贝主题站--SG fans的世界!!!</title>
  <meta http-equiv="Content-Type" content="text/html; charset=gb2312">
  <link rel="stylesheet" href="all.css" type="text/css">
  .......
  
  这是正常的访问方法,但是如果我们胡乱输入请求呢?看:
  
  HTTP/1.1 400 Bad Request
  Server: Microsoft-IIS/5.0
  Date: Sat, 20 Jul 2002 23:37:59 GMT
  Content-Type: text/html
  Content-Length: 87
  
  <html><head><title>Error</title></head><body>The parameter is incorrect. </body></html>
  
  呵呵,HTTP 400 - 错误请求,其实就是HTTP语法错误,服务器老老实实给我们返回了。
  可以得出结论:无论你输入了什么,服务器根据HTTP协议,总会返回信息
  
  通常用得最多的DOS方法主要有SYN、Smurf、Land、TearDrop等,其中SYN的资料如下(抄来的资料~~呵呵)
  
  假设一个用户向服务器发送了SYN报文后突然死机或掉线,那么服务器在发出SYN+ACK应答报文后是无法收到客户端的ACK报文的(第三次握手无法完成),这种情况下服务器端一般会重试(再次发送SYN+ACK给客户端)并等待一段时间后丢弃这个未完成的连接,这段时间的长度我们称为SYN Timeout,一般来说这个时间是分钟的数量级(大约为30秒-2分钟);一个用户出现异常导致服务器的一个线程等待1分钟并不是什么很大的问题,但如果有一个恶意的攻击者大量模拟这种情况,服务器端将为了维护一个非常大的半连接列表而消耗非常多的资源----数以万计的半连接,即使是简单的保存并遍历也会消耗非常多的CPU时间和内存,何况还要不断对这个列表中的IP进行SYN+ACK的重试。实际上如果服务器的TCP/IP栈不够强大,最后的结果往往是堆栈溢出崩溃---即使服务器端的系统足够强大,服务器端也将忙于处理攻击者伪造的TCP连接请求而无暇理睬客户的正常请求(毕竟客户端的正常请求比率非常之小),此时从正常客户的角度看来,服务器失去响应,这种情况我们称作:服务器端受到了SYN Flood攻击(SYN洪水攻击)。
  
  而Smurf、TearDrop等是利用ICMP报文来Flood和IP碎片攻击的。
  但是以上的DOS方法的目的无非都是让服务器大量消耗资源和超时连接,那么除了超时连接,能不能用“正常连接”的方法来产生拒绝服务攻击呢?
  
  再来看看19端口的定义:
  
  字符产生器协议(Character Generator Protocol)
  字符产生器服务器一个有用的调试工具。无论接收到的是什么,它都返回特定的数据。
  
  基于TCP的字符产生器服务
  此服务可以是一个基于TCP的服务,TCP端口19是用于此服务的。一旦连接建立,服务器会传送一个字符流。接收到的信息会被抛弃。字符流会在用户请求下中止。用户可能会非正常中止一个连接,因此此服务必须准备处理这种情况。传输的速度会由TCP流控制机制负责,用户不必关心数据太快,而用户来不及处理。
  
  
  19端口在早期已经有人用来做Chargen攻击了,即Chargen_Denial_of_Service,但是!他们用的方法是在两台Chargen服务器之间产生UDP连接,让服务器处理过多信息而DOWN掉,那么,干掉一台WEB服务器的条件就必须有2个:1.有Chargen服务 2.有HTTP服务
  实际上,现在是无法找到这么多同时开放两个这两个服务的服务器的。
  看看开头的HTTP协议特性,和Chargen比较一下,你发现了什么?哈哈~~~没错!一个是无论接收到什么报文都会回应,一个是一旦连接建立就会发送报文,看看示意图:
  
  发送请求------------------------------------->
  客户端----------------------------------------------------------服务器
  <-------------------------------------------回应
  
  如果把客户端改为Chargen,就是以下情况:
  
  字符流--------------------------------------->
  Chargen----------------------------------------------------------服务器
  <-----------------------------------400 Bad Request
  
  也就是说,这两者会产生利害冲突,可以这样比喻:两个人吵架,你骂一句,他还一句,这就是循环过程,除非有一方停止或第三者干涉,否则这将是个Do...Loop循环!
  搬到HTTP和Chargen来说,就是因为这两者的特性正好天生一对,那好,就从这里下手:
  攻击者伪造源IP给N台Chargen发送连接请求(Connect),如有必要还可以发送(Send)个“Fuck you”报文过去,Chargen接收到连接后就会返回每秒72字节的字符流(实际上根据网络实际情况,这个速度更快)给服务器,HTTP协议处理这个报文时当然会识别为400 Bad Request而返回一条错误说明给它,接下来的情况嘛………………自己发挥想像力,别问我。
  
  我用自己的机器(640 kbps ADSL)+VB Winsock程序做测试,只用了3秒钟,程序就因为内存溢出而崩溃了(主要是TextBox的问题,它接受文本的最大范围为64KB),就是说,3秒钟内Chargen就发送了大于64KB的字符流!如果用大于10台的Chargen一起发起攻击,其速度足以大量消耗服务器资源和带宽


本篇文章来源于 中国协议分析网|www.cnpaf.net 原文链接:http://www.cnpaf.net/Class/hack/200610/16031.html

这篇关于利用HTTP进行拒绝服务攻击的一些构思的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/840224

相关文章

【Prometheus】PromQL向量匹配实现不同标签的向量数据进行运算

✨✨ 欢迎大家来到景天科技苑✨✨ 🎈🎈 养成好习惯,先赞后看哦~🎈🎈 🏆 作者简介:景天科技苑 🏆《头衔》:大厂架构师,华为云开发者社区专家博主,阿里云开发者社区专家博主,CSDN全栈领域优质创作者,掘金优秀博主,51CTO博客专家等。 🏆《博客》:Python全栈,前后端开发,小程序开发,人工智能,js逆向,App逆向,网络系统安全,数据分析,Django,fastapi

业务中14个需要进行A/B测试的时刻[信息图]

在本指南中,我们将全面了解有关 A/B测试 的所有内容。 我们将介绍不同类型的A/B测试,如何有效地规划和启动测试,如何评估测试是否成功,您应该关注哪些指标,多年来我们发现的常见错误等等。 什么是A/B测试? A/B测试(有时称为“分割测试”)是一种实验类型,其中您创建两种或多种内容变体——如登录页面、电子邮件或广告——并将它们显示给不同的受众群体,以查看哪一种效果最好。 本质上,A/B测

BUUCTF靶场[web][极客大挑战 2019]Http、[HCTF 2018]admin

目录   [web][极客大挑战 2019]Http 考点:Referer协议、UA协议、X-Forwarded-For协议 [web][HCTF 2018]admin 考点:弱密码字典爆破 四种方法:   [web][极客大挑战 2019]Http 考点:Referer协议、UA协议、X-Forwarded-For协议 访问环境 老规矩,我们先查看源代码

【Linux】应用层http协议

一、HTTP协议 1.1 简要介绍一下HTTP        我们在网络的应用层中可以自己定义协议,但是,已经有大佬定义了一些现成的,非常好用的应用层协议,供我们直接使用,HTTP(超文本传输协议)就是其中之一。        在互联网世界中,HTTP(超文本传输协议)是一个至关重要的协议,他定义了客户端(如浏览器)与服务器之间如何进行通信,以交换或者传输超文本(比如HTML文档)。

如何确定 Go 语言中 HTTP 连接池的最佳参数?

确定 Go 语言中 HTTP 连接池的最佳参数可以通过以下几种方式: 一、分析应用场景和需求 并发请求量: 确定应用程序在特定时间段内可能同时发起的 HTTP 请求数量。如果并发请求量很高,需要设置较大的连接池参数以满足需求。例如,对于一个高并发的 Web 服务,可能同时有数百个请求在处理,此时需要较大的连接池大小。可以通过压力测试工具模拟高并发场景,观察系统在不同并发请求下的性能表现,从而

速盾高防cdn是怎么解决网站攻击的?

速盾高防CDN是一种基于云计算技术的网络安全解决方案,可以有效地保护网站免受各种网络攻击的威胁。它通过在全球多个节点部署服务器,将网站内容缓存到这些服务器上,并通过智能路由技术将用户的请求引导到最近的服务器上,以提供更快的访问速度和更好的网络性能。 速盾高防CDN主要采用以下几种方式来解决网站攻击: 分布式拒绝服务攻击(DDoS)防护:DDoS攻击是一种常见的网络攻击手段,攻击者通过向目标网

遮罩,在指定元素上进行遮罩

废话不多说,直接上代码: ps:依赖 jquer.js 1.首先,定义一个 Overlay.js  代码如下: /*遮罩 Overlay js 对象*/function Overlay(options){//{targetId:'',viewHtml:'',viewWidth:'',viewHeight:''}try{this.state=false;//遮罩状态 true 激活,f

Anaconda 中遇到CondaHTTPError: HTTP 404 NOT FOUND for url的问题及解决办法

最近在跑一个开源项目遇到了以下问题,查了很多资料都大(抄)同(来)小(抄)异(去)的,解决不了根本问题,费了很大的劲终于得以解决,记录如下: 1、问题及过程: (myenv) D:\Workspace\python\XXXXX>conda install python=3.6.13 Solving environment: done.....Proceed ([y]/n)? yDownloa

利用matlab bar函数绘制较为复杂的柱状图,并在图中进行适当标注

示例代码和结果如下:小疑问:如何自动选择合适的坐标位置对柱状图的数值大小进行标注?😂 clear; close all;x = 1:3;aa=[28.6321521955954 26.2453660695847 21.69102348512086.93747104431360 6.25442246899816 3.342835958564245.51365061796319 4.87

Python脚本:对文件进行批量重命名

字符替换:批量对文件名中指定字符进行替换添加前缀:批量向原文件名添加前缀添加后缀:批量向原文件名添加后缀 import osdef Rename_CharReplace():#对文件名中某字符进行替换(已完结)re_dir = os.getcwd()re_list = os.listdir(re_dir)original_char = input('请输入你要替换的字符:')replace_ch