]> git.mxchange.org Git - ctracker.git/blobdiff - libs/lib_detector.php
Continued:
[ctracker.git] / libs / lib_detector.php
index 44d1818eaf3138643cca8840ef30156e933ff495..8a13ddaf271637f419fb5a4aacfb234ea92101b1 100644 (file)
@@ -2,11 +2,11 @@
 /**
  * Detector library
  *
- * @author             Roland Haeder <webmaster@ship-simu.org>
+ * @author             Roland Haeder <webmaster@shipsimu.org>
  * @version            3.0.0
  * @copyright  Copyright (c) 2009 Cracker Tracker Team
  * @license            GNU GPL 3.0 or any newer version
- * @link               http://www.ship-simu.org
+ * @link               http://www.shipsimu.org
  *
  * This program is free software: you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -33,43 +33,47 @@ function initCrackerTrackerArrays () {
                @error_reporting(0);
        }
 
+       // Base path
+       $GLOBALS['ctracker_base_path'] = dirname(dirname(__FILE__));
+
        // 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
        $GLOBALS['ctracker_get_blacklist'] = array(
                // SQL injections
-               'union%20', '%20union', 'insert%20',
-               'select%20', '%20like', 'like%20', 'drop%20', 'update%20',
+               'union ', ' union', 'insert ',
+               'select ', ' like', 'like ', 'drop ', 'update ',
                '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
-               '/environ', '/shadow', '/gshadow', '/passwd', '/group', '.htaccess',
-               '.htpasswd', '.htgroup', '.history', 'bash_history', 'bashrc',
+               '/environ', 'etc/shadow', 'etc/gshadow', 'etc/passwd', 'etc/group',
+               'etc/./shadow', 'etc/./gshadow', 'etc/./passwd', 'etc/./group',
+               '.htaccess', '.htpasswd', '.htgroup', '.history', 'bash_history',
+               'bashrc',
 
                // Other Linux/FreeBSD/??? programs (sometimes with space)
-               'traceroute%20', 'ping%20', 'bin/xterm', 'bin/./xterm', 'lsof%20',
-               'telnet%20', 'wget%20', 'bin/id', 'uname\x20', 'uname%20', 'killall',
-               'diff%20', 'kill%20', 'locate%20', 'grep%20', 'vi%20', 'mv%20',
-               'rmdir%20', 'mcd%20', 'mrd%20', 'rm%20', '%20mcd', '%20mrd', '%20rm',
-               'passwd%20', '%20passwd', 'mdir%20', '%20mdir', 'cp%20', '%20cp',
-               'esystem%20', 'chr%20', '%20chr', 'wget%20', '%20wget', '%20cmd',
-               'cmd%20', '%20rush', 'rush%20', '%20echr', 'echr%20', '%20getenv',
-               'getenv', 'reboot%20', 'halt%20', 'powerdown%20',
+               'traceroute ', 'ping ', 'bin/xterm', 'bin/./xterm', 'lsof ',
+               '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',
+               'cmd ', ' rush', 'rush ', ' echr', 'echr ', ' getenv',
+               'getenv', 'reboot ', 'halt ', 'powerdown ',
 
                // Other Linux programs (+ brace)
                'locate(', 'grep(', 'kill(', 'mcd(', 'mrd(', 'rm(', 'mv(', 'rmdir(',
                'chmod(', 'chmod(', 'chown(', 'chgrp(', 'passwd(', 'vi(', 'cp(',
-               'mdir(', 'esystem(', 'chr(', 'wget(', 'rush(', 'echr(',
+               'mdir(', 'system(', 'chr(', 'wget(', 'rush(', 'echr(',
 
                // Other Linux programs (+ equal)
                'mcd=', 'mrd=', 'chmod=', 'chr=', 'rush=', 'echr=',
@@ -80,20 +84,27 @@ function initCrackerTrackerArrays () {
                '/www/./virtual/',
 
                // Uni* commands:
-               '/chgrp', '/chown', '/chmod', 'chown%20', 'chmod%20', 'chgrp%20',
+               '/chgrp', '/chown', '/chmod', 'chown ', 'chmod ', 'chgrp ',
 
                // Compiler/interpreter
-               'g++%20', 'c++%20', 'cc%20', 'bin/./python', 'bin/python', 'bin/tclsh',
-               'bin/./tclsh', 'bin/nasm', 'bin/./nasm', '/perl', 'perl%20', 'cmd.exe',
+               'g++ ', 'c++ ', 'cc ', 'bin/./python', 'bin/python', 'bin/tclsh',
+               'bin/./tclsh', 'bin/nasm', 'bin/./nasm', '/perl', 'perl ', 'cmd.exe',
                'nc.exe', 'ftp.exe',
 
+               // php.ini settings
+               'allow_url_fopen', 'allow_url_include', 'auto_prepend_file', 'disable_functions', 'safe_mode',
+
                // PHP commands/scripts
-               'fopen', 'fwrite', 'phpinfo()', '\<?', '?\>',
+               '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',
+
                // Generic remote inclusion
                '=http://', '=https://',
                'path=', 'sql=',
@@ -104,16 +115,16 @@ function initCrackerTrackerArrays () {
                'data://', 'tcp://', 'udp://', 'raw://', 'javascript://', 'file://', 'ftp://',
 
                // Blocked "users"
-               'nigga(', '%20nigga', 'nigga%20', 'starhack', 'busca',
+               'nigga(', ' nigga', 'nigga ', 'starhack', 'busca',
 
                // Hidden HTML stuff
-               '%20style=', 'style%20=',
-               'overflow:auto', 'overflow:%20auto',
-               'overflow%20:auto', 'overflow%20:%20auto',
-               'display:hidden', 'display:%20hidden',
-               'display%20:hidden', 'display%20:%20hidden',
-               'height:0px', 'height:%200px','height:1px', 'height:%201px',
-               'width:0px', 'width:%200px','width:1px', 'width:%201px',
+               ' style=', 'style =',
+               'overflow:auto', 'overflow: auto',
+               'overflow :auto', 'overflow : auto',
+               'display:hidden', 'display: hidden',
+               'display :hidden', 'display : hidden',
+               'height:0px', 'height: 0px','height:1px', 'height: 1px',
+               'width:0px', 'width: 0px','width:1px', 'width: 1px',
 
                // Uncommon user websites
                '~root', '~ftp', '~nobody',
@@ -121,54 +132,77 @@ function initCrackerTrackerArrays () {
                // Windows XP (?) hacks
                'xp_enumdsn', 'xp_availablemedia', 'xp_filelist', 'xp_cmdshell',
 
+               // Attempts to insert links into a badly secured URL
+               '%3E%3C',
+
+               // Request header being inserted
+               'content-type',
+
+               // /proc/ and other forbidden paths
+               'proc/self/environ',
+
+               // MySQL internal functions
+               'name_const',
+
                // @TODO Misc/unsorted
                'cgi-', '.eml', '$_request', '$_get', '$request', '$get', '.system',
-               '&aim', 'new_password', '&icq', '.conf', 'motd%20', 'HTTP/1.',
-               'window.open', 'img src', 'img%20src', '.jsp', 'servlet',
+               '&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',
+               'uol.com', ',0x', '(0x'
        );
 
        // Block these words found in POST requests
        $GLOBALS['ctracker_post_blacklist'] = array(
                // This line is for detecting hidden link spam in wikis, forums, guestbooks, etc.
-               '%20style=', 'overflow:auto', 'height:1px', 'width:1px', 'display:hidden', 'style.display',
+               ' style=', 'overflow:auto', 'height:1px', 'width:1px', 'display:hidden', 'style.display',
 
                // "Common" login names from VHCS exploiters ;-)
                'starhack', 'DeLiMehmet', 'hisset', 'Hisset', 'delimert', 'MecTruy'
        );
 
-       // Load email header
-       $GLOBALS['ctracker_header'] = crackerTrackerLoadEmailTemplate('header');
-
        // 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
@@ -182,7 +216,7 @@ function sendCrackerTrackerMail () {
 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() . '
@@ -216,7 +250,8 @@ function crackerTrackerSendMail ($mail, $recipient = NULL, $subject = NULL) {
        // Construct dummy array
        $rowData = array(
                'remote_addr' => determineCrackerTrackerRealRemoteAddress(),
-               'check_worm'  => $GLOBALS['ctracker_checkworm'],
+               'proxy_addr'  => getenv('REMOTE_ADDR'),
+               'check_worm'  => $GLOBALS['ctracker_checked_get'],
                'server_name' => crackerTrackerServerName()
        );
 
@@ -259,13 +294,13 @@ function sendCrackerTrackerPostMail () {
 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'].'
 -----------------------------------------------------
 ';
 
@@ -315,17 +350,19 @@ function crackerTrackerLogAttack () {
 
        // Prepare array for database insert
        $rowData = array(
-               'remote_addr'   => determineCrackerTrackerRealRemoteAddress(),
-               'user_agent'    => crackerTrackerUserAgent(),
-               'get_data'      => crackerTrackerQueryString(),
-               'post_data'     => $GLOBALS['ctracker_post_track'],
-               'check_worm'    => $GLOBALS['ctracker_checkworm'],
-               'check_post'    => $GLOBALS['ctracker_check_post'],
-               'server_name'   => crackerTrackerServerName(),
-               'script_name'   => crackerTrackerScriptName(),
-               'referer'       => crackerTrackerReferer(),
-               'proxy_used'    => $proxyUsed,
-               'first_attempt' => 'NOW()'
+               'remote_addr'    => determineCrackerTrackerRealRemoteAddress(),
+               'proxy_addr'     => getenv('REMOTE_ADDR'),
+               'user_agent'     => crackerTrackerUserAgent(),
+               'get_data'       => crackerTrackerQueryString(),
+               'post_data'      => $GLOBALS['ctracker_post_track'],
+               'check_worm'     => $GLOBALS['ctracker_checked_get'],
+               'check_post'     => $GLOBALS['ctracker_checked_post'],
+               'server_name'    => crackerTrackerServerName(),
+               'script_name'    => crackerTrackerScriptName(),
+               'referer'        => crackerTrackerReferer(),
+               'request_method' => crackerTrackerRequestMethod(),
+               'proxy_used'     => $proxyUsed,
+               'first_attempt'  => 'NOW()'
        );
 
        // Insert the array in database
@@ -338,20 +375,8 @@ function crackerTrackerAlertCurrentUser () {
        if (isset($GLOBALS['ctracker_last_suspicious_entry'])) {
                // Does the user have a ticket?
                if (ifCrackerTrackerIpHasTicket()) {
-                       // Should we continue?
-                       if (isset($_POST['ctracker_continue'])) {
-                               // Set cookie
-                               sendCrackerTrackerCookie();
-
-                               // And redirect to same URL
-                               crackerTrackerRedirectSameUrl();
-                       } elseif (ifCrackerTrackerCookieIsSet()) {
-                               // Return here to normal program
-                               return;
-                       } else {
-                               // Load "Thank you" template
-                               crackerTrackerLoadTemplate('add_ticket_thanks');
-                       }
+                       // Load "Thank you" template
+                       crackerTrackerLoadTemplate('add_ticket_thanks');
                } elseif ((isset($_POST['ctracker_add_ticket'])) && (!empty($_POST['name'])) && (!empty($_POST['email']))) {
                        // Add the ticket
                        addCrackerTrackerTicket($_POST);