欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

實(shí)例解析80、512、3389等端口的入侵

互聯(lián)網(wǎng)   發(fā)布時間:2008-10-08 19:36:05   作者:佚名   我要評論
有很多網(wǎng)站為了安全起見,在WEB Server前面架了防火墻,或者做了TCP/IP過濾,對外只開放TCP 80端口。從入侵者角度來看,要入侵那么從80上跑的CGI入手是比較可行的,當(dāng)然也可以用別的辦法,例如旁敲側(cè)擊,呵呵。從網(wǎng)管角度來看,一是要保證CGI的安全性,另外網(wǎng)絡(luò)的整體安全
有很多網(wǎng)站為了安全起見,在WEB Server前面架了防火墻,或者做了TCP/IP過濾,對外只開放TCP 80端口。從入侵者角度來看,要入侵那么從80上跑的CGI入手是比較可行的,當(dāng)然也可以用別的辦法,例如旁敲側(cè)擊,呵呵。從網(wǎng)管角度來看,一是要保證CGI的安全性,另外網(wǎng)絡(luò)的整體安全性也是很重要的。針對基于80端口入侵、防范而出的CGI掃描器數(shù)不勝數(shù),但基本上原理都一樣。
  CGI掃描器原理說起來其實(shí)非常簡單,可以用四句話來概括:連接目標(biāo)WEB SERVER;發(fā)送一個特殊的請求;接收目標(biāo)服務(wù)器返回?cái)?shù)據(jù);根據(jù)返回?cái)?shù)據(jù)判斷目標(biāo)服務(wù)器是否有此CGI漏洞。
  當(dāng)管理的服務(wù)器達(dá)到一定數(shù)量的時候,手工檢測自己的服務(wù)器是否存在各種各樣的CGI漏洞,那就太消耗時間和精力了,所以一個網(wǎng)管手上有個比較好用的CGI漏洞掃描器還是必要的。OK!今天我們就自己來動手用C寫一個簡單的CGI掃描器,幫助自己在日常工作中檢測服務(wù)器:))
  源代碼如下,很多地方我都加了注釋,別嫌我煩哦:))編譯好的程序可以從http://eyas.3322.net/program/cgicheck.exe下載。
  /************************************************************************* Module:CGICheck.cpp Author:ey4s Date:2001/5/16說明:這是一個Console下多線程,帶有進(jìn)度顯示的CGI掃描器的模板,更改一下szSign和SendBuff就可以掃描其他CGI漏洞,設(shè)置了連接、發(fā)送、接收超時,速度還可以哦。希望可以幫助到admins檢測自己的服務(wù)器:))
  *************************************************************************/ #i nclude
                 
  #define iPort 80//目標(biāo)Web Server端口#define szSign “500 13rnServer: Microsoft-IIS/5.0”//根據(jù)此標(biāo)志來檢查目標(biāo)是否有漏洞
                 
  #pragma comment(lib,“ws2_32.lib”)
  /////////////////////////////////////////////////////////////////////////// // //定義&初始化全局變量// char *SendBuff=“GET /NULL.printern”,//發(fā)送的請求buff CurrentTarget[52]=,//存放最后一個線程將掃描的目標(biāo)turn[4][2]=;//顯示進(jìn)度時的字符int SendBuffLen=strlen(SendBuff),//發(fā)送的buff長度iConnTimeout,//TCP Connect TimeOut ii=0,//掃描進(jìn)度iTotal;//服務(wù)器總數(shù)HANDLE hSemaphore=NULL,//信標(biāo)內(nèi)核對象句柄,用來控制線程數(shù)量hStdout;//console標(biāo)準(zhǔn)輸出句柄,做進(jìn)度顯示的時候用的struct timeval timeout;//連接、發(fā)送和接收的超時值DWORD SleepTime;//每個一個線程后等待的時間/* SleepTime值根據(jù)用戶輸入的線程數(shù)量[ThreadNum]和TCP ConnectTimeOut[CONNTIMEO]來計(jì)算。確保在CONNTIMEO時間左右開ThreadNum個線程。這樣在CONNTIMEO時間后,所開的線程開始陸續(xù)超時退出,可以繼續(xù)穩(wěn)定的開線程,可以有效的保證同時有ThreadNum個線程在運(yùn)行。
  */ /////////////////////////////////////////////////////////////////////////// void ShowError(char *);//顯示出錯信息函數(shù),可以寫完善一些,偶偷懶了:)
  BOOL ResetCursor(void);//重置光標(biāo)位置,線程輸出的時候調(diào)用的DWORD WINAPI ShowProInfo(LPVOID);//顯示進(jìn)度信息DWORD WINAPI scan(LPVOID);//掃描函數(shù)void usage(char *);//幫助函數(shù)/////////////////////////////////////////////////////////////////////////// int main(int argc,char **argv)
  { HANDLE hThread=NULL;//線程句柄DWORD dwThreadID;//線程ID struct sockaddr_in sa;int i,MaxThread;//最大線程數(shù)量WSADATA wsd;long PreviousCount;clock_t start,end;//程序運(yùn)行的起始和結(jié)束時間double duration;
                 
  //檢查用戶輸入?yún)?shù)if(argc!=5)
  { usage(argv[0]);return 1;} //get target range int StartNet=inet_addr(argv[1]);int StopNet=inet_addr(argv[2]);int StartHost=ntohl(StartNet);int StopHost=ntohl(StopNet);//取得線程數(shù)量MaxThread=atoi(argv[3]);//取得conn超時時間iConnTimeout=atoi(argv[4]);//檢查參數(shù)合法性if((iConnTimeout>6) || (iConnTimeout500) ||(StopHost { usage(argv[0]);return 1;} //計(jì)算時間SleepTime=1000*iConnTimeout/MaxThread;//設(shè)置連接超時值timeout.tv_sec = iConnTimeout;timeout.tv_usec =0;__try { //開始計(jì)時start=clock();//加載winsock庫if (WSAStartup(MAKEWORD(1,1), &wsd) != 0)
  { ShowError(“WSAStartup”);__leave;} //創(chuàng)建信標(biāo)內(nèi)核對象句柄hSemaphore=CreateSemaphore(NULL,MaxThread,MaxThread,NULL);if(hSemaphore==NULL)
  { ShowError(“CreateSemaphore”);__leave;} //取得console標(biāo)準(zhǔn)輸出句柄hStdout=GetStdHandle(STD_OUTPUT_HANDLE);if(hStdout==INVALID_HANDLE_)
  { ShowError(“GetStdHandle”);__leave;} //設(shè)置目標(biāo)總數(shù)iTotal=StopHost-StartHost;//創(chuàng)建進(jìn)度顯示線程hThread=CreateThread(NULL,0,ShowProInfo,NULL,0,&dwThreadID);if(hThread==NULL)
  { ShowError(“1 CreateThread”);__leave;} //關(guān)閉句柄CloseHandle(hThread);//循環(huán)創(chuàng)建掃描線程for(i=StartHost;i
  break;} else { k=j%4;printf(“%-15s %s [%d/%d] %s %%%0.3g”,CurrentTarget,turn[k],ii,iTotal,turn[k],m);} }//end of for return 0;} /////////////////////////////////////////////////////////////////////////// // //掃描函數(shù)// DWORD WINAPI scan(LPVOID lp)
  { int i=(int)lp,iErr;struct sockaddr_in server;SOCKET s=INVALID_SOCKET;char RecvBuff[1024]=,*ptr;int RecvBuffLen=sizeof(RecvBuff);u_long ul=1;//初始化為為非0值fd_set r,w;
                 
  //create socket s=socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);if(s==INVALID_SOCKET)
  { printf(“nCreate socket failed:%d”,GetLastError());ExitProcess(1);} //fill the addr struct server.sin_family=AF_INET;server.sin_port=htons(iPort);server.sin_addr.S_un.S_addr=htonl(i);__try { //設(shè)置socket為非鎖定模式,ul為0值的話,那么soocket將被設(shè)置為鎖定模式iErr=ioctlsocket(s,F(xiàn)IONBIO,(unsigned long*)&ul);if(iErr==SOCKET_ERROR )
  { ResetCursor();ShowError(“ioctlsocket”);ExitProcess(1);} //printf(“n%X ioctl ok.strat conn”,i);//connect to target connect(s,(struct sockaddr *)&server,sizeof(server));//printf(“n%X conn return,start select w”,i);//設(shè)置select參數(shù)FD_ZERO(&w);FD_SET(s, &w);//等待connect成功&socket可寫iErr=select(0, 0, &w, 0, &timeout);//printf(“n%X select w return %d”,i,iErr);//等待返回后,socket仍不可寫則退出if((iErr==SOCKET_ERROR) || (iErr==0))
  { //printf(“n%X select return w err,exit”,i);__leave;} //socket可寫則繼續(xù)else { //send buff to target //printf(“n%X send”,i);iErr=send(s,SendBuff,SendBuffLen,0);//printf(“n%X send return”,i);if(iErr==SOCKET_ERROR)
  __leave;} //等待socket可讀FD_ZERO(&r);FD_SET(s, &r);//printf(“n%X start select r”,i);iErr=select(0, &r, 0, 0, &timeout);//printf(“n%X select r return %d”,i,iErr);if((iErr==SOCKET_ERROR) || (iErr==0))
  { //printf(“n%X select r err,exit”,i);__leave;} else { //recv buff from target //printf(“n%X start recv”,i);iErr=recv(s,RecvBuff,RecvBuffLen,0);//printf(“n%X recv ret”,i);if(iErr==SOCKET_ERROR)
  __leave;} //verify buff ptr=strstr(RecvBuff,szSign);if(ptr!=NULL)
  { //線程輸出前要先調(diào)用ResetCursor函數(shù)ResetCursor();//輸出信息后務(wù)必加一個以上換行符號,輸出前請別加換行符號,以免顯示混亂printf(“[%-15s] has .printer mapped.
n",inet_ntoa(server.sin_addr));
  } __finally { if(!ReleaseSemaphore(hSemaphore,1,NULL))
  ShowError(“thread ReleaseSemaphore failed”);closesocket(s);} return 0;} /////////////////////////////////////////////////////////////////////////// void usage(char *proname)
  { printf(“n%s v0.1 only can find IIS5 .Printer mapped”“nPower by ey4s 2001.5.20”“nhttp://www.patching.net”“nnUsage:%s ”“nnNotice”“n StartIP StopIP ==>Don't forgot StopIP must large than StartIP ”“n ThreadNum ==>Thread number,please input between 1-500”“n CONNTIMEO ==>TCP connect timeout,please input between 2-6”“nnExample”“n %s 192.168.0.0 192.168.255.255 200 2”,proname,proname,proname);}程序在VC 6.0上編譯通過,在windows2000上運(yùn)行良好:)

相關(guān)文章

最新評論