GoAutoDial CE 3.3 SQL Injection / Command Injection

2015-12-06T00:00:00
ID PACKETSTORM:134658
Type packetstorm
Reporter R-73eN
Modified 2015-12-06T00:00:00

Description

                                        
                                            `# Title : GoAutoDial CE 3.3 Multiple SQL injections, Command Injection  
# Date : 06/12/2015  
# Author : R-73eN  
# Tested on : goautodial-32bit-ce-3.3-final  
# Software : http://goautodial.org/  
# ___ __ ____ _ _   
# |_ _|_ __ / _| ___ / ___| ___ _ __ / \ | |   
# | || '_ \| |_ / _ \| | _ / _ \ '_ \ / _ \ | |   
# | || | | | _| (_) | |_| | __/ | | | / ___ \| |___   
# |___|_| |_|_| \___/ \____|\___|_| |_| /_/ \_\_____|  
#  
  
Vulnerabilities  
  
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++  
  
call_report_export.php  
  
Line 131  
  
$LOGip = getenv("REMOTE_ADDR");  
$LOGbrowser = getenv("HTTP_USER_AGENT");  
$LOGscript_name = getenv("SCRIPT_NAME");  
$LOGserver_name = getenv("SERVER_NAME");  
$LOGserver_port = getenv("SERVER_PORT");  
$LOGrequest_uri = getenv("REQUEST_URI");  
$LOGhttp_referer = getenv("HTTP_REFERER");  
if (preg_match("/443/i",$LOGserver_port)) {$HTTPprotocol = 'https://';}  
else {$HTTPprotocol = 'http://';}  
if (($LOGserver_port == '80') or ($LOGserver_port == '443') ) {$LOGserver_port='';}  
else {$LOGserver_port = ":$LOGserver_port";}  
$LOGfull_url = "$HTTPprotocol$LOGserver_name$LOGserver_port$LOGrequest_uri";  
  
$stmt="INSERT INTO vicidial_report_log set event_date=NOW(), user='$PHP_AUTH_USER', ip_address='$LOGip', report_name='$report_name', browser='$LOGbrowser', referer='$LOGhttp_referer', notes='$LOGserver_name:$LOGserver_port $LOGscript_name |$campaign[0], $query_date, $end_date|', url='$LOGfull_url';";  
  
  
The $LOGip , $LOGbrowser etc are not sanitized are passed directly to a sql query.  
For example passing a crafted User-Agent header will cause a sql injection attack.  
  
The following files were vulnerable for the same vulnerability.  
call_report_export.php  
voice_lab.php  
user_status.php  
user_stats.php  
timeclock_status.php  
timeclock_report.php  
sph_report.php  
group_hourly_stats.php  
realtime_report.php  
lead_report_export.php  
list_download.php  
fcstats.php  
call_report_export.php  
AST_VICIDIAL_ingrouplist.php  
AST_VICIDIAL_hopperlist.php  
AST_usergroup_login_report.php  
AST_team_performance_detail.php  
AST_VDADstats.php  
AST_server_performance.php  
campaign_debug.php  
AST_LIST_UPDATEstats.php  
AST_LISTS_campaign_stats.php  
AST_OUTBOUNDsummary_interval.php  
AST_IVRstats.php  
AST_IVRfilter.php  
AST_inbound_daily_report.php  
and in many other files.  
  
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++  
  
web_form_forward.php  
Line 15  
  
if (isset($_GET["user"])) {$user=$_GET["user"];}  
  
require("dbconnect.php");  
$stmt="SELECT full_name from vicidial_users where user='$user';";  
$rslt=mysql_query($stmt, $link);  
$row=mysql_fetch_row($rslt);  
  
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++  
  
QM_live_monitor.php  
  
If the QueueMetrics is enabled the following file is vulnerable to sql injection  
  
. LINE 31  
if (isset($_GET["call"])){$call=$_GET["call"];}  
elseif (isset($_POST["call"])) {$call=$_POST["call"];}  
.  
.  
.  
$stmt = "SELECT user,server_ip,conf_exten,comments FROM vicidial_live_agents where callerid='$call';";  
  
  
As u can see the $call parameter is not sanitized which leads to Sql injection.  
  
  
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++  
  
  
call_log_display.php SQL injection  
  
  
there is no validation on the $server_ip and $session_name an  
if( (strlen($server_ip)<6) or (!isset($server_ip)) or ( (strlen($session_name)<12) or (!isset($session_name)) ) )  
.  
.  
$stmt="SELECT count(*) from web_client_sessions where session_name='$session_name' and server_ip='$server_ip';";  
.  
.  
The if statement can be bypassed very easily, we need to provide an input more then 6 characters and more then 12 characters.  
Then the parameters get passed ot the sql query and we have sql injection again.  
  
The same vulnerability was found to.  
  
conf_extn_check.php  
inbound_popup.php  
live_extn_check.php  
manager_send.php  
park_calls_display.php  
active_list_refresh.php  
  
  
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++  
  
  
SCRIPT_multirecording_AJAX.php SQL injection  
  
.  
.  
.  
if (isset($_GET["campaign"])) {$campaign=$_GET["campaign"];}  
elseif (isset($_POST["campaign"])) {$campaign=$_POST["campaign"];}  
.  
.  
.  
$stmt="select campaign_rec_filename from vicidial_campaigns where campaign_id='$campaign'";  
  
Again $campaign is not sanetized  
  
  
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++  
  
  
recording_lookup.php SQL injection  
.  
.  
(isset($_GET["QUERY_recid"])) {$QUERY_recid=$_GET["QUERY_recid"];}  
elseif (isset($_POST["QUERY_recid"])) {$QUERY_recid=$_POST["QUERY_recid"];}  
.  
.  
$stmt="select recording_id,lead_id,user,filename,location,start_time,length_in_sec from recording_log where filename LIKE \"%$QUERY_recid%\" order by recording_id desc LIMIT 1;";  
$QUERY_recid is not sanitized.  
  
  
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++  
  
  
vicidial_sales_viewer.php SQL injection , Command Injection  
the $dcampaign parameter is not sanitized.  
  
.  
.  
if (isset($_GET["dcampaign"])) {$dcampaign=$_GET["dcampaign"];}  
elseif (isset($_POST["dcampaign"])) {$dcampaign=$_POST["dcampaign"];}  
.  
.  
$stmt="select campaign_id, campaign_name from vicidial_campaigns where campaign_id='$dcampaign'"; // Here we have the sql injection  
.  
.  
passthru("$WeBServeRRooT/vicidial/spreadsheet_sales_viewer.pl $list_ids $sales_number $timestamp $forc $now $dcampaign"); // Command injection  
  
  
  
https://www.infogen.al/ - Infogen AL  
`