// Whitelist some absolute query strings (see below)
$GLOBALS['ctracker_whitelist'] = array(
- 'cmd=new', // LinPHA
- 'cmd=edit', // LinPHA
- 'cmd=lostpw', // LinPHA
- 'secure_session=1', // Mantis Bug Tracker
+ 'cmd=new', // LinPHA
+ 'cmd=edit', // LinPHA
+ 'cmd=lostpw', // LinPHA
);
// Attacks we should detect and block
'union(', 'union=',
// $GLOBAL/$_SERVER array elements
- 'HTTP_USER_AGENT', 'HTTP_HOST', 'HTTP_PHP', '_SESSION','CFG_ROOT',
+ 'HTTP_USER_AGENT', 'HTTP_HOST', 'HTTP_PHP', '_SESSION', 'CFG_ROOT',
'DOCUMENT_ROOT', '_SERVER',
// Sensitive files
// Other Linux/FreeBSD/??? programs (sometimes with space)
'traceroute ', 'ping ', 'bin/xterm', 'bin/./xterm', 'lsof ',
- 'telnet ', 'wget ', 'bin/id', 'uname\x20', 'uname ', 'killall',
- 'diff ', 'kill ', 'locate ', 'grep ', 'vi ', 'mv ',
+ 'telnet ', 'wget ', 'bin/perl', 'bin/id', 'uname\x20', 'uname ',
+ 'killall', 'diff ', 'kill ', 'locate ', 'grep ', 'vi ', 'mv ',
'rmdir ', 'mcd ', 'mrd ', 'rm ', ' mcd', ' mrd', ' rm',
'passwd ', ' passwd', 'mdir ', ' mdir', 'cp ', ' cp',
'esystem ', 'chr ', ' chr', 'wget ', ' wget', ' cmd',
);
// Init more elements
- $GLOBALS['ctracker_post_track'] = '';
- $GLOBALS['ctracker_checkworm'] = '';
- $GLOBALS['ctracker_check_post'] = '';
+ $GLOBALS['ctracker_post_track'] = '';
+ $GLOBALS['ctracker_checked_get'] = '';
+ $GLOBALS['ctracker_checked_post'] = '';
+ $GLOBALS['ctracker_checked_ua'] = '';
}
// Checks for worms
function isCrackerTrackerWormDetected () {
// Check against the whole list
- $GLOBALS['ctracker_checkworm'] = urldecode(str_ireplace($GLOBALS['ctracker_get_blacklist'], '*', crackerTrackerQueryString()));
+ $GLOBALS['ctracker_checked_get'] = urldecode(str_ireplace($GLOBALS['ctracker_get_blacklist'], '*', crackerTrackerQueryString()));
+ $GLOBALS['ctracker_checked_ua'] = urldecode(str_ireplace($GLOBALS['ctracker_get_blacklist'], '*', crackerTrackerUserAgent()));
+
+ /*
+ * If it differs to original and the *whole* request string is not in
+ * whitelist then blog the attempt.
+ */
+ $isWorm = (
+ (
+ $GLOBALS['ctracker_checked_get'] != crackerTrackerQueryString() && (!in_array(crackerTrackerQueryString(), $GLOBALS['ctracker_whitelist']))
+ ) || (
+ $GLOBALS['ctracker_checked_ua'] != crackerTrackerUserAgent()
+ )
+ );
+ //* DEBUG-DIE: */ die('isWorm='.intval($isWorm).PHP_EOL.'get="'.$GLOBALS['ctracker_checked_get'].'"'.PHP_EOL.'"'.crackerTrackerQueryString().'"'.PHP_EOL.'ua="'.$GLOBALS['ctracker_checked_ua'].'"'.PHP_EOL.'"'.crackerTrackerUserAgent().'"'.PHP_EOL);
- // If it differs to original and the *whole* request string is not in whitelist
- // then blog the attempt
- return ($GLOBALS['ctracker_checkworm'] != crackerTrackerQueryString() && (!in_array(crackerTrackerQueryString(), $GLOBALS['ctracker_whitelist'])));
+ // Return it
+ return $isWorm;
}
// Checks POST data
function isCrackerTrackerPostAttackDetected () {
// Implode recursive the whole $_POST array
- $GLOBALS['ctracker_post_track'] = urldecode(implode_r('', $_POST));
+ $GLOBALS['ctracker_post_track'] = urldecode(implode_r('&', $_POST));
// Check for suspicious POST data
- $GLOBALS['ctracker_check_post'] = str_ireplace($GLOBALS['ctracker_post_blacklist'], '*', $GLOBALS['ctracker_post_track']);
+ $GLOBALS['ctracker_checked_post'] = urldecode(str_ireplace($GLOBALS['ctracker_post_blacklist'], '*', $GLOBALS['ctracker_post_track']));
// Is it detected?
- return ((isCrackerTrackerWormDetected()) || ($GLOBALS['ctracker_check_post'] != $GLOBALS['ctracker_post_track']));
+ return ((isCrackerTrackerWormDetected()) || ($GLOBALS['ctracker_checked_post'] != $GLOBALS['ctracker_post_track']));
}
// Prepares a mail and send it out
Remote-IP : ' . determineCrackerTrackerRealRemoteAddress() . '
User-Agent : ' . crackerTrackerUserAgent() . '
Request-string : ' . crackerTrackerQueryString() . '
-Filtered string : ' . $GLOBALS['ctracker_checkworm'] . '
+Filtered string : ' . $GLOBALS['ctracker_checked_get'] . '
Server : ' . crackerTrackerServerName() . '
Script : ' . crackerTrackerScriptName() . '
Referrer : ' . crackerTrackerReferer() . '
$rowData = array(
'remote_addr' => determineCrackerTrackerRealRemoteAddress(),
'proxy_addr' => getenv('REMOTE_ADDR'),
- 'check_worm' => $GLOBALS['ctracker_checkworm'],
+ 'check_worm' => $GLOBALS['ctracker_checked_get'],
'server_name' => crackerTrackerServerName()
);
Remote-IP : '.determineCrackerTrackerRealRemoteAddress().'
User-Agent : '.crackerTrackerUserAgent().'
Request-string : '.crackerTrackerQueryString().'
-Filtered string : '.$GLOBALS['ctracker_checkworm'].'
+Filtered string : '.$GLOBALS['ctracker_checked_get'].'
Server : '.crackerTrackerServerName().'
Script : '.crackerTrackerScriptName().'
Referrer : '.crackerTrackerReferer().'
-----------------------------------------------------
POST string : '.$GLOBALS['ctracker_post_track'].'
-Filtered POST string : '.$GLOBALS['ctracker_check_post'].'
+Filtered POST string : '.$GLOBALS['ctracker_checked_post'].'
-----------------------------------------------------
';
'user_agent' => crackerTrackerUserAgent(),
'get_data' => crackerTrackerQueryString(),
'post_data' => $GLOBALS['ctracker_post_track'],
- 'check_worm' => $GLOBALS['ctracker_checkworm'],
- 'check_post' => $GLOBALS['ctracker_check_post'],
+ 'check_worm' => $GLOBALS['ctracker_checked_get'],
+ 'check_post' => $GLOBALS['ctracker_checked_post'],
'server_name' => crackerTrackerServerName(),
'script_name' => crackerTrackerScriptName(),
'referer' => crackerTrackerReferer(),
- 'request_method' => $_SERVER['REQUEST_METHOD'],
+ 'request_method' => crackerTrackerRequestMethod(),
'proxy_used' => $proxyUsed,
'first_attempt' => 'NOW()'
);