]> git.mxchange.org Git - ctracker.git/blobdiff - libs/lib_detector.php
Added "detection" of open_basedir and php:// protocol:
[ctracker.git] / libs / lib_detector.php
index a59ae07a0cb6e6618fc558c38bd47913196f451c..b7b50e050ffc5e995c61fb7eda0f0ac78e4a35c3 100644 (file)
@@ -87,12 +87,13 @@ function initCrackerTrackerArrays () {
                '/chgrp', '/chown', '/chmod', 'chown ', 'chmod ', 'chgrp ',
 
                // Compiler/interpreter
-               'g++ ', 'c++ ', 'cc ', 'bin/./python', 'bin/python', 'bin/tclsh',
-               'bin/./tclsh', 'bin/nasm', 'bin/./nasm', '/perl', 'perl ', 'cmd.exe',
+               'bin/g++ ', 'bin/c++ ', 'cc ', 'bin/python', 'bin/python', 'bin/tclsh',
+               'bin/tclsh', 'bin/nasm', '/perl', 'cmd.exe',
                'nc.exe', 'ftp.exe',
 
                // php.ini settings
                'allow_url_fopen', 'allow_url_include', 'auto_prepend_file', 'disable_functions', 'safe_mode',
+               'open_basedir',
 
                // PHP commands/scripts
                'fopen', 'fwrite', 'phpinfo()', '\<?', '?\>', 'base64_decode', 'file_put_contents',
@@ -103,10 +104,10 @@ function initCrackerTrackerArrays () {
                'php_', 'class_', '_class.php', 'db_mysql.inc',
 
                // PHP arrays
-               '_PHPLIB',
+               '_phplib', '__callbackparam',
 
                // Generic remote inclusion
-               '=http://', '=https://',
+               '=http://', '=https://', '=php://',
                'path=', 'sql=',
                '=%7BQUOT%7D', '=%5C', '=%22http','=%22ftp','=%22file','=%27http','=%27ftp',
                '=%27file',
@@ -147,11 +148,38 @@ function initCrackerTrackerArrays () {
                // @TODO Misc/unsorted
                'cgi-', '.eml', '$_request', '$_get', '$request', '$get', '.system',
                '&aim', 'new_password', '&icq', '.conf', 'motd ', 'HTTP/1.',
-               'window.open', 'img src', 'img src', '.jsp', 'servlet',
-               'wwwacl', '.js', '.jsp', 'server-info', 'server-status',
-               'secure_site, ok', 'chunked', 'org.apache', '/servlet/con',
-               '<script', 'mod_gzip_status', '.system', 'http_',
-               'uol.com', ',0x', '(0x'
+               'window.open', 'img src', 'img src', '.jsp', 'servlet', 'org.apache',
+               'wwwacl', 'server-info', 'server-status', '/servlet/con', 'http_',
+               'secure_site, ok', 'chunked', '<script', 'mod_gzip_status', '.system',
+               'uol.com', ',0x', '(0x',
+       );
+
+       // BLock these words found in User-Agent
+       $GLOBALS['ctracker_ua_blacklist'] = array(
+               // Compiler/interpreter
+               'bin/g++ ', 'bin/c++ ', 'cc ', 'bin/python', 'bin/python', 'bin/tclsh',
+               'bin/tclsh', 'bin/nasm', '/perl', 'cmd.exe',
+               'nc.exe', 'ftp.exe', 'wget ', 'system(', 'curl ',
+
+               // php.ini settings
+               'allow_url_fopen', 'allow_url_include', 'auto_prepend_file', 'disable_functions', 'safe_mode',
+
+               // PHP commands/scripts
+               'fopen', 'fwrite', 'phpinfo()', '\<?', '?\>', 'base64_decode', 'file_put_contents',
+               'set_magic_quotes_runtime', 'set_magic_quotes_runtime', 'display_errors', 'passthru',
+
+               // Typical PHP script remote-inclusions and typical include file names
+               '.inc.php', '.lib.php', '.class.php', 'config.php', '.inc', '_php',
+               'php_', 'class_', '_class.php', 'db_mysql.inc',
+
+               // PHP arrays
+               '_phplib', '__callbackparam',
+
+               // Request header being inserted
+               'content-type',
+
+               // /proc/ and other forbidden paths
+               'proc/self/environ',
        );
 
        // Block these words found in POST requests
@@ -163,6 +191,9 @@ function initCrackerTrackerArrays () {
                'starhack', 'DeLiMehmet', 'hisset', 'Hisset', 'delimert', 'MecTruy'
        );
 
+       // Also block these requests (mostly you don't want CONNECT to some SMTP sites)
+       $GLOBALS['ctracker_blocked_requests'] = array('CONNECT' => TRUE);
+
        // Init more elements
        $GLOBALS['ctracker_post_track']   = '';
        $GLOBALS['ctracker_checked_get']  = '';
@@ -173,8 +204,8 @@ function initCrackerTrackerArrays () {
 // Checks for worms
 function isCrackerTrackerWormDetected () {
        // Check against the whole list
-       $GLOBALS['ctracker_checked_get'] = urldecode(str_ireplace($GLOBALS['ctracker_get_blacklist'], '*', str_replace(array('//', '/./'), array('/', '/'), crackerTrackerQueryString())));
-       $GLOBALS['ctracker_checked_ua']  = urldecode(str_ireplace($GLOBALS['ctracker_get_blacklist'], '*', str_replace(array('//', '/./'), array('/', '/'), crackerTrackerUserAgent())));
+       $GLOBALS['ctracker_checked_get'] = urldecode(str_ireplace($GLOBALS['ctracker_get_blacklist'], '*', crackerTrackerQueryString(TRUE)));
+       $GLOBALS['ctracker_checked_ua']  = urldecode(str_ireplace($GLOBALS['ctracker_ua_blacklist'], '*', crackerTrackerUserAgent(TRUE)));
 
        /*
         * If it differs to original and the *whole* request string is not in
@@ -182,12 +213,14 @@ function isCrackerTrackerWormDetected () {
         */
        $isWorm = (
                (
-                       $GLOBALS['ctracker_checked_get'] != crackerTrackerQueryString() && (!in_array(crackerTrackerQueryString(), $GLOBALS['ctracker_whitelist']))
+                       $GLOBALS['ctracker_checked_get'] != crackerTrackerQueryString(TRUE) && (!in_array(crackerTrackerQueryString(TRUE), $GLOBALS['ctracker_whitelist']))
+               ) || (
+                       $GLOBALS['ctracker_checked_ua'] != crackerTrackerUserAgent(TRUE)
                ) || (
-                       $GLOBALS['ctracker_checked_ua'] != crackerTrackerUserAgent()
+                       isset($GLOBALS['ctracker_blocked_requests'][crackerTrackerRequestMethod()])
                )
        );
-       //* 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);
+       //* DEBUG-DIE: */ die('isWorm='.intval($isWorm).PHP_EOL.'get='.PHP_EOL.'"'.$GLOBALS['ctracker_checked_get'].'"'.PHP_EOL.'"'.crackerTrackerQueryString().'"'.PHP_EOL.'ua='.PHP_EOL.'"'.$GLOBALS['ctracker_checked_ua'].'"'.PHP_EOL.'"'.crackerTrackerUserAgent().'"'.PHP_EOL);
 
        // Return it
        return $isWorm;
@@ -199,10 +232,10 @@ function isCrackerTrackerPostAttackDetected () {
        $GLOBALS['ctracker_post_track'] = urldecode(implode_r('&', $_POST));
 
        // Check for suspicious POST data
-       $GLOBALS['ctracker_checked_post'] = urldecode(str_ireplace($GLOBALS['ctracker_post_blacklist'], '*', str_replace(array('//', '/./'), array('/', '/'), $GLOBALS['ctracker_post_track'])));
+       $GLOBALS['ctracker_checked_post'] = urldecode(str_ireplace($GLOBALS['ctracker_post_blacklist'], '*', crackerTrackerSanitize($GLOBALS['ctracker_post_track'])));
 
        // Is it detected?
-       return ((isCrackerTrackerWormDetected()) || ($GLOBALS['ctracker_checked_post'] != $GLOBALS['ctracker_post_track']));
+       return ((isCrackerTrackerWormDetected()) || ($GLOBALS['ctracker_checked_post'] != crackerTrackerSanitize($GLOBALS['ctracker_post_track'])));
 }
 
 // Prepares a mail and send it out
@@ -251,7 +284,7 @@ function crackerTrackerSendMail ($mail, $recipient = NULL, $subject = NULL) {
        $rowData = array(
                'remote_addr' => determineCrackerTrackerRealRemoteAddress(),
                'proxy_addr'  => getenv('REMOTE_ADDR'),
-               'check_worm'  => $GLOBALS['ctracker_checked_get'],
+               'check_get'   => $GLOBALS['ctracker_checked_get'],
                'server_name' => crackerTrackerServerName()
        );
 
@@ -291,16 +324,16 @@ function sendCrackerTrackerPostMail () {
        // Mail text
        $mail = 'POST-Attack detected:
 -----------------------------------------------------
-Remote-IP            : '.determineCrackerTrackerRealRemoteAddress().'
-User-Agent           : '.crackerTrackerUserAgent().'
-Request-string       : '.crackerTrackerQueryString().'
-Filtered string      : '.$GLOBALS['ctracker_checked_get'].'
-Server               : '.crackerTrackerServerName().'
-Script               : '.crackerTrackerScriptName().'
-Referrer             : '.crackerTrackerReferer().'
+Remote-IP            : ' . determineCrackerTrackerRealRemoteAddress() . '
+User-Agent           : ' . crackerTrackerUserAgent() . '
+Request-string       : ' . crackerTrackerQueryString() . '
+Filtered string      : ' . $GLOBALS['ctracker_checked_get'] . '
+Server               : ' . crackerTrackerServerName() . '
+Script               : ' . crackerTrackerScriptName() . '
+Referrer             : ' . crackerTrackerReferer() . '
 -----------------------------------------------------
-POST string          : '.$GLOBALS['ctracker_post_track'].'
-Filtered POST string : '.$GLOBALS['ctracker_checked_post'].'
+POST string          : ' . $GLOBALS['ctracker_post_track'] . '
+Filtered POST string : ' . $GLOBALS['ctracker_checked_post'] . '
 -----------------------------------------------------
 ';
 
@@ -355,7 +388,8 @@ function crackerTrackerLogAttack () {
                'user_agent'     => crackerTrackerUserAgent(),
                'get_data'       => crackerTrackerQueryString(),
                'post_data'      => $GLOBALS['ctracker_post_track'],
-               'check_worm'     => $GLOBALS['ctracker_checked_get'],
+               'check_ua'       => $GLOBALS['ctracker_checked_ua'],
+               'check_get'      => $GLOBALS['ctracker_checked_get'],
                'check_post'     => $GLOBALS['ctracker_checked_post'],
                'server_name'    => crackerTrackerServerName(),
                'script_name'    => crackerTrackerScriptName(),
@@ -392,6 +426,3 @@ function crackerTrackerAlertCurrentUser () {
        // And stop here
        die();
 }
-
-// [EOF]
-?>