科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道Win2000/XP服务与后门技术(3)

Win2000/XP服务与后门技术(3)

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

Windows下的服务程序都遵循服务控制管理器(SCM)的接口标准,它们会在登录系统时自动运行,甚至在没有用户登录系统的情况下也会正常执行,类似与Unix系统中的守护进程(daemon)。

作者:TOo2y 来源:中华安全网 2008年1月5日

关键字: 后门技术 服务 Windows Windows xp

  • 评论
  • 分享微博
  • 分享邮件

  四、服务级后门技术

  在你进入某个系统后,往往会为自己留下一个或多个后门,以便今后的访问。在上传一个后门程序到远程系统上后系统重启之时,总是希望后门仍然存在。那么,将后门程序创建成服务程序应该是个不错的想法,这就是利用了服务程序自动运行的机制,当然在Windows2000的任务管理器里也很难结束一个服务程序的进程。

  创建一个后门,它常常会在一个端口监听,以方便我们使用TCP/UDP协议与远程主机建立连接,所以我们首先需要在后门程序里创建一个监听的端口,为了数据传输的稳定与安全,我们可以使用TCP协议。

  那么,我们如何才能模拟一个Telnet服务似的后门呢?我想大家都清楚,如果在远程主机上有一个Cmd是我们可以控制的,也就是我们可以在这个Cmd里执行命令,那么就可以实现对远程主机的控制了,至少可以执行各种常规的系统命令。启动一个Cmd程序的方法很多,有WinExec,ShellExecute,CreateProcess等,但只能使用CreateProcess,因为WinExec和ShellExecute它们实在太简单了。在使用CreateProcess时,要用到它的重定向标准输入/输出的选项功能,把在本地主机的输入重定向输入到远程主机的Cmd进程,并且把远程主机Cmd进程的标准输出重定向到本地主机的标准输出。这就需要在后门程序里使用CreatePipe创建两个管道来实现进程间的数据通信(Inter-Process Communication,IPC)。当然,还必须将远程主机上Cmd的标准输入和输出在本地主机之间进行传送,我们选择TCP协议的send和recv函数。在客户结束访问后,还要调用TerminateProcess来结束创建的Cmd进程。

五、关键函数分析

  本文相关程序T-Cmd v1.0是一个服务级的后门程序,适用平台为Windows2000/XP。它可自动为远程/本地主机创建服务级后门,无须使用任何额外的命令,支持本地/远程模式。重启后,程序仍然自动运行,监听端口20540/tcp。

  1.自定义数据结构与函数

  typedef struct
  {
HANDLE    hPipe;
   //为实现进程间通信而使用的管道;
SOCKET    sClIEnt;
   //与客户端进行通信时的客户端套接字;
  }SESSIONDATA,*PSESSIONDATA;
  //重定向Cmd标准输入/输出时使用的数据结构;

  typedef struct PROCESSDATA
  {
HANDLE    hProcess;
   //创建Cmd进程时获得的进程句柄;
DWord     dwProcessId;
   //创建Cmd进程时获得的进程标识符;
struct    PROCESSDATA *next;
   //指向下一个数据结构的指针;
  }PROCESSDATA,*PPROCESSDATA;
   //在客户结束访问或删除服务时为关闭所以的Cmd进程而创建的数据结构;

  void WINAPI CmdStart(DWORD,LPTSTR *);
  //服务程序中的“ServiceMain”:注册服务控制句柄,创建服务主线程;
  void WINAPI CmdControl(DWORD);
  //服务程序中的“HandlerEx”:处理接收到的控制命令,删除已创建的Cmd进程;
  DWORD WINAPI CmdService(LPVOID);
  //服务主线程,创建服务监听端口,在接受客户连接时,创建重定向Cmd标准输入/输出线程;
  DWORD WINAPI CmdShell(LPVOID);
  //创建管道与Cmd进程,及Cmd的输入/输出线程;
  DWORD WINAPI ReadShell(LPVOID);
  //重定向Cmd的输出,读取信息后发送到客户端;
  DWORD WINAPI WriteShell(LPVOID);
  //重定向Cmd的输入,接收客户端的信息输入到Cmd进程;
  BOOL ConnectRemote(BOOL,char *,char *,char *);
  //如果选择远程模式,则须与远程主机建立连接,注须提供管理员权限的用户名与密码,密码为空时用"NULL"代替;
  void InstallCmdService(char *);
  //复制传送文件,打开服务控制管理器,创建或打开服务程序;
  void RemoveCmdService(char *);
  //删除文件,停止服务后,卸载服务程序; 

    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章