Hilfe gesucht - admin_error_log und ctracker

Allgemeiner Support zum phpBB 2 Board und phpBB 2 Modifikationen
Forumsregeln
Auch wenn hier der Support für phpBB 2 weiterhin aufrecht erhalten bleibt, weisen wir darauf hin, dass das phpBB 2 nicht mehr offiziell unterstützt und weiterentwickelt wird!
Antworten
schmidtedv
Beiträge: 607
Registriert: So 13.Feb, 2005 10:46
Wohnort: St. Blasien (seit 01.06)
Kontaktdaten:

Hilfe gesucht - admin_error_log und ctracker

Beitrag von schmidtedv »

Ich habe mir eine Mini-Version des ctracker in die common.php gebastelt:

Code: Alles auswählen

$query_string = $_SERVER['QUERY_STRING'];
$attack_string = array('acceptterms=true', 'greed=true', 'YesIAgree=Accept', 'Yes_I_agree=true', 'tobeagreed=true',
 'AgrEEmENT=true', 'CONFIRM=CONFIRM', 'http_', '_server', 'delete%20', 'delete ', 'delete-',
 'delete(', '(delete', 'drop%20', 'drop ', 'create%20', 'update-', 'update(', '(update', 'insert-', 'insert(',
 '(insert', 'create ', 'create(', 'create-', '(create', 'update%20', 'update ', 'insert%20', 'insert ', 'select%20',
 'select ', 'bulk%20', 'bulk ', 'union%20', 'union ', 'select-', 'select(', '(select', 'union-', '(union', 'union(',
 'or%20', 'or ', 'and%20', 'and ', 'exec', '@@', '%22', '"', 'openquery', 'openrowset', 'msdasql', 'sqloledb',
 'sysobjects', 'syscolums', 'syslogins', 'sysxlogins', 'char%20', 'char ', 'into%20', 'into ', 'load%20', 'load ',
 'msys', 'alert%20', 'alert ', 'eval%20', 'eval ', 'onkeyup', 'x5cx', 'fromcharcode', 'javascript:', 'javascript.',
 'vbscript:', 'vbscript.', 'http-equiv', '->', 'expression%20', 'expression ', 'url%20', 'url ', 'innerhtml',
 'document.', 'dynsrc', 'jsessionid', 'style%20', 'style ', 'phpsessid', '<applet', '<div', '<emded', '<iframe',
 '<img', '<meta', '<object', '<script', '<textarea', 'onabort', 'onblur', 'onchange', 'onclick', 'ondblclick',
 'ondragdrop', 'onerror', 'onfocus', 'onkeydown', 'onkeypress', 'onload', 'onmouse', 'onmove', 'onreset', 'onresize',
 'onselect', 'onsubmit', 'onunload', 'onreadystatechange', 'xmlhttp', 'uname%20', 'uname ', '%2C', 'union+',
 'select+', 'delete+', 'create+', 'bulk+', 'or+', 'and+', 'into+', 'kill+', '+echr', '+chr', 'cmd+', '+1',
 'user_password', 'id%20', 'id ', 'ls%20', 'ls ', 'cat%20', 'cat ', 'rm%20', 'rm ', 'kill%20', 'kill ', 'mail%20',
 'mail ', 'wget%20', 'wget ', 'wget(', 'pwd%20', 'pwd ', 'objectclass', 'objectcategory', '<!-%20', '<!- ',
 'total%20', 'total ', 'http%20request', 'http request', 'phpb8b4f2a0', 'phpinfo', 'php:', 'globals', '%2527', '%27',
 '\'', 'chr(', 'chr=', 'chr%20', 'chr ', '%20chr', ' chr', 'cmd=', 'cmd%20', 'cmd', '%20cmd', ' cmd', 'rush=',
 '%20rush', ' rush', 'rush%20', 'rush ', 'union%20', 'union ', '%20union', ' union', 'union(', 'union=', '%20echr',
 ' echr', 'esystem', 'cp%20', 'cp ', 'cp(', '%20cp', ' cp', 'mdir%20', 'mdir ', '%20mdir', ' mdir', 'mdir(', 'mcd%20',
 'mcd ', 'mrd%20', 'mrd ', 'rm%20', 'rm ', '%20mcd', ' mcd', '%20mrd', ' mrd', '%20rm', ' rm', 'mcd(', 'mrd(', 'rm(',
 'mcd=', 'mrd=', 'mv%20', 'mv ', 'rmdir%20', 'rmdir ', 'mv(', 'rmdir(', 'chmod(', 'chmod%20', 'chmod ', 'cc%20', 'cc ',
 '%20chmod', ' chmod', 'chmod(', 'chmod=', 'chown%20', 'chown ', 'chgrp%20', 'chgrp ', 'chown(', 'chgrp(', 'locate%20',
 'locate ', 'grep%20', 'grep ', 'locate(', 'grep(', 'diff%20', 'diff ', 'kill%20', 'kill ', 'kill(', 'killall',
 'passwd%20', 'passwd ', '%20passwd', ' passwd', 'passwd(', 'telnet%20', 'telnet ', 'vi(', 'vi%20', 'vi ', 'nigga(',
 '%20nigga', ' nigga', 'nigga%20', 'nigga ', 'fopen', 'fwrite', '%20like', ' like', 'like%20', 'like ', '$_', '$get',
 '.system', 'http_php', '%20getenv', ' getenv', 'getenv%20', 'getenv ', 'new_password', '/password', 'etc/', '/groups',
 '/gshadow', 'http_user_agent', 'http_host', 'bin/', 'wget%20', 'wget ', 'uname%5c', 'uname', 'usr', '/chgrp', '=chown',
 'usr/bin', 'g%5c', 'g\\', 'bin/python', 'bin/tclsh', 'bin/nasm', 'perl%20', 'perl ', '.pl', 'traceroute%20',
 'traceroute ', 'tracert%20', 'tracert ', 'ping%20', 'ping ', '/usr/x11r6/bin/xterm', 'lsof%20', 'lsof ', '/mail',
 '.conf', 'motd%20', 'motd ', 'http/1.', '.inc.php', 'config.php', 'cgi-', '.eml', 'file%5c://', 'file\:', 'file://',
 'window.open', 'img src', 'img%20src', 'img src', '.jsp', 'ftp.', 'xp_enumdsn', 'xp_availablemedia', 'xp_filelist',
 'nc.exe', '.htpasswd', 'servlet', '/etc/passwd', '/etc/shadow', 'wwwacl', '~root', '~ftp', '.js', '.jsp', '.history',
 'bash_history', '~nobody', 'server-info', 'server-status', '%20reboot', ' reboot', '%20halt', ' halt', '%20powerdown',
 ' powerdown', '/home/ftp', '=reboot', 'www/', 'init%20', 'init ','=halt', '=powerdown', 'ereg(', 'secure_site',
 'chunked', 'org.apache', '/servlet/con', '/robot', 'mod_gzip_status', '.inc', '.system', 'getenv', 'http_', '_php',
 'php_', 'phpinfo()', '<?php', '?>', '%3C%3Fphp', '%3F>', 'sql=', '_global', 'global_', 'global[', '_server', 'server_',
 'server[', '/modules', 'modules/', 'phpadmin', 'root_path', 'phpbb_root_path', '_globals', 'globals_', 'globals[',
 'iso-8859-1', '?hl=', '%3fhl=', '.exe', '.sh', '%00', rawurldecode('%00'), '_env', '/*', '\\*');

$query_protection = str_replace($attack_string, '*', $query_string);

if ($query_string != $query_protection) {
	$remote_addr = $_SERVER['REMOTE_ADDR'];

	die("<center><font face=arial size=2><b>Your personal Hack-Reminder:</b> Forewarned is forearmed!<br /><br />Angriff von <b><font color=red>$remote_addr</font></b> wurde erkannt und abgefangen!</font></center>");
}
Nun habe ich zudem den admin_error_log verbaut und würde (bisher erfolglos) es gerne irgendwie hinbiegen, das er diese Angriffe auch mit ins Error-Log schreibt. Wäre es möglich, mir hier eine kurze Hilfestellung zu geben? :-)
Rettet den Wald, esst mehr Specht!

Forum [ sofern im Beitrag darauf verwiesen :-) ]
Benutzeravatar
oxpus
Administrator
Beiträge: 28737
Registriert: Mo 27.Jan, 2003 22:13
Wohnort: Bad Wildungen
Kontaktdaten:

Beitrag von oxpus »

Wäre zunächst zu klären, welche Inhalte im Logfile stehen sollen.
Ein solches File erstellt man jedenfalls sehr schnell mit

Code: Alles auswählen

$fp = @fopen('./cache/log_file.txt', 'a') or die('Could not create logfile');
@fwrite($fp, $error_text . "\n");
@fclose($fp);
Und einfügen würde ich das dann direkt nach

Code: Alles auswählen

if ($query_string != $query_protection) {
  $remote_addr = $_SERVER['REMOTE_ADDR'];
in Deinem Script.
Wobei $error_text auch der Einfachkeit halber $remote_addr beinhalten könnte...

BTW: War im falschen Forum gepostet! Bitte darauf achten, worein solche Beiträge kommen!
Karsten Ude
-={ Das Mädchen für alles }=-
Kein Support per Messenger, Email oder PN! Unaufgeforderte Nachrichten werden ignoriert!
No support per Messenger, Email or PM. Each unasked message will be ignored!
schmidtedv
Beiträge: 607
Registriert: So 13.Feb, 2005 10:46
Wohnort: St. Blasien (seit 01.06)
Kontaktdaten:

Beitrag von schmidtedv »

Die theoretisch möglichen Inhalte sind ja prinzipiell vorgegeben von deinem MOD:

Code: Alles auswählen

CREATE TABLE phpbb_error_report (
  error_id mediumint(8) unsigned NOT NULL auto_increment,
  error_userid varchar(10) DEFAULT NULL,
  error_time varchar(10) DEFAULT NULL,
  error_sql_code varchar(10) DEFAULT NULL,
  error_sql_text text,
  error_file varchar(255) DEFAULT NULL,
  error_file_line varchar(10) DEFAULT NULL,
  error_sql_store text,
  error_msg_title varchar(50) DEFAULT NULL,
  error_msg_text varchar(200) DEFAULT NULL,
  PRIMARY KEY (error_id)
) TYPE=MyISAM;
#-----[ OPEN ]---------------------------------------------
#
includes\functions.php

Code: Alles auswählen

if ($err_line != '' && $err_file != '') {
        $error_time = time();
        $error_userid = $userdata['user_id'];
        $error_sql_code = $sql_error['code'];

        $error_sql_text  = ($sql_error['message']);
        $error_sql_text  = str_replace('\\', '\\\\', $error_sql_text);
        $error_sql_text  = str_replace('\'', '\\\'', $error_sql_text);

        $error_sql_store  = $sql_store;
        $error_sql_store  = str_replace('\\', '\\\\', $error_sql_store);
        $error_sql_store  = str_replace('\'', '\\\'', $error_sql_store);

        $error_file  = $err_file;
        $error_file  = str_replace('\\', '\\\\', $error_file);
        $error_file  = str_replace('\'', '\\\'', $error_file);

        $sql = "INSERT INTO  " . ERROR_REPORT_TABLE . " (error_sql_code, error_userid, error_file_line, error_time, error_sql_text, error_file, error_sql_store, error_msg_title, error_msg_text) VALUES ('$error_sql_code', '$error_userid', '$err_line', '$error_time', '$error_sql_text', '$error_file', '$error_sql_store', '$msg_title', '$msg_text')";

        if (!($result = $db->sql_query($sql))) {
            $error_message = '<br /><br /><b>Error Message not saved in Database</b>';
        } else {
            $error_message = '<br /><br /><b>Error Message saved in Database</b>';
        }
    }

Code: Alles auswählen

$msg_text = $msg_text . '<br /><br /><b><u>DEBUG MODE</u></b>' . $debug_text . $error_message;

Code: Alles auswählen

define('ERROR_REPORT_TABLE', $table_prefix.'error_report');
Ich kann allerdings keine message_die in der common.php erzeugen, oder? Ihr fehlt ja die Includierung der functions.php...ich müßte also, wenn ich laienhaft drüber nachdenke, entweder deinen MOD-Code in teilen in die common.php übernehmen, das einen sql-insert vornimmt für die Zeilen Text, die auch als Hack-Nachricht erscheinen, oder alles in eine externe Datei mit include functions.php einbauen, was aber hierfür unverhältnismäßig groß wäre. Hast Du nicht hierfür eine Lösung parat, wie ich den code für deinen sql-insert einfach ändern/vereinfachen könnte, um bei Hack-Angriff einfach zugleich ein paar versteckte Einträge in die DB vorzunehmen??
Rettet den Wald, esst mehr Specht!

Forum [ sofern im Beitrag darauf verwiesen :-) ]
Benutzeravatar
oxpus
Administrator
Beiträge: 28737
Registriert: Mo 27.Jan, 2003 22:13
Wohnort: Bad Wildungen
Kontaktdaten:

Beitrag von oxpus »

Warum message_die verwenden? Schiesse einfach mit die(); die Nachricht ab, danach ist ohne weitere Belastung für den Server der Prozess beendet.
Und klar kann man auch in der common.php mit SQL arbeiten.
Nur warum? Bei einem Massenangriff würdest Du somit ebenfalls die Datenbank ggf. anhalten, was genau u. a. Sinn des CT war, eben dieses zu vermeiden!
Karsten Ude
-={ Das Mädchen für alles }=-
Kein Support per Messenger, Email oder PN! Unaufgeforderte Nachrichten werden ignoriert!
No support per Messenger, Email or PM. Each unasked message will be ignored!
schmidtedv
Beiträge: 607
Registriert: So 13.Feb, 2005 10:46
Wohnort: St. Blasien (seit 01.06)
Kontaktdaten:

Beitrag von schmidtedv »

okok...dann lass ich es wie es ist. Ich dachte nur, es wäre ein nettes Gimmick, im Admin-Log zu sehen, wer wann versucht auf den Server zu kommen mit unlauteren mitteln. Ich kanns aber auch im Apache-Log nachblättern...
Rettet den Wald, esst mehr Specht!

Forum [ sofern im Beitrag darauf verwiesen :-) ]
Benutzeravatar
oxpus
Administrator
Beiträge: 28737
Registriert: Mo 27.Jan, 2003 22:13
Wohnort: Bad Wildungen
Kontaktdaten:

Beitrag von oxpus »

Ich kanns aber auch im Apache-Log nachblättern...
Oder man packt das in das Log-File mit rein ;)
Karsten Ude
-={ Das Mädchen für alles }=-
Kein Support per Messenger, Email oder PN! Unaufgeforderte Nachrichten werden ignoriert!
No support per Messenger, Email or PM. Each unasked message will be ignored!
schmidtedv
Beiträge: 607
Registriert: So 13.Feb, 2005 10:46
Wohnort: St. Blasien (seit 01.06)
Kontaktdaten:

Beitrag von schmidtedv »

:-) Ja, aber ich könnte mit der anderen Variante mal eben fix von überall im Adminbereich nachschauen, wer wieder welchen Unsinn verzapft...doppelt gemoppelt aber halt bequem.
Rettet den Wald, esst mehr Specht!

Forum [ sofern im Beitrag darauf verwiesen :-) ]
Benutzeravatar
oxpus
Administrator
Beiträge: 28737
Registriert: Mo 27.Jan, 2003 22:13
Wohnort: Bad Wildungen
Kontaktdaten:

Beitrag von oxpus »

doppelt gemoppelt aber halt bequem.
... und kann den Server anhalten ...
Karsten Ude
-={ Das Mädchen für alles }=-
Kein Support per Messenger, Email oder PN! Unaufgeforderte Nachrichten werden ignoriert!
No support per Messenger, Email or PM. Each unasked message will be ignored!
schmidtedv
Beiträge: 607
Registriert: So 13.Feb, 2005 10:46
Wohnort: St. Blasien (seit 01.06)
Kontaktdaten:

Beitrag von schmidtedv »

kann? ich blocke doch...zugleich einen eintrag in die db wäre doch dann ok...aber egal, ich lass es wie es ist und blocke nur :-)
Rettet den Wald, esst mehr Specht!

Forum [ sofern im Beitrag darauf verwiesen :-) ]
Benutzeravatar
oxpus
Administrator
Beiträge: 28737
Registriert: Mo 27.Jan, 2003 22:13
Wohnort: Bad Wildungen
Kontaktdaten:

Beitrag von oxpus »

Langsam:
Wenn Du einzelne "normale" Attacken und falsche/ungewollte Anfragen mit Deinem Script abfangen willst, wäre ein zusätzliches Loggen in der Datenbank okay. Aber nur dann!
Bei Massenanfragen z. B. aus DoS-Attacken würde aber eben genau das sehr schnell zum Stillstand des Servers führen, denn bei einem DoS darf alles passieren, aber eben keine zusätzliche Last für den Server!
Und jedes Schreiben in eine Tabelle in eine Datenbank bedeutet gerade bei DoS-Attacken extreme Lastspitzen bis halt zum Stillstand für den physischen Server.
Denn was passiert bei einer Anfrage gegen Deinen Server (also das Aufrufen einer dort gehosteten Webseite)?
Zum einen nimmt der Webserver die Anfrage zunächst entgegennehmen, wertet diese aus, ruft ggf. entsprechende Scripte auf und schickt die abgerufene (und ggf. zuvor noch berechnete) Webseite letztlich an den User zurück. Wenn eben dann Scripte dazu auch die Datenbank verwenden, arbeitet diese ebenfalls und führt Anweisungen aus = Doppelte Belastung für den Server!
Daher werden gerade DoS-Attacken ja auch bewusst so programmiert und eingesetzt ;)

Wenn man eine DoS/Massen-Attacke z. B. auf einen nicht weiter abgesicherten Webserver mit einem phpBB 2 ausführt, steht der Server binnen Sekunden, wenn nicht noch schneller.
Mit dem CT oder zumindest Deinem Script hält der Server aber deutlich länger durch, wenn gar sogar bis zum Ende der Attacke, ohne wirklich in die Knie gegangen zu sein, weil der Webserver eben lediglich ein PHP-Script (deins eben oder den CT) ausführen und nach dem Ausführen einer einzigen Bedingung im Falle der erkannten Attacke sofort einen Verarbeitungsstop einleiten würde (okay, Log in einer Text-Datei mal eingeschlossen) und damit den Webserver sofort von dieser Anfrage/Attacke wieder entlastet.

Klar, ab einer gewissen Anzahl an Attacken je Zeiteinheit reicht auch das irgendwann nicht mehr aus, um dem Server zu schützen, aber ohne Datenbankzugriffe und das Starten von komplexeren Scripten (gerade PHP-Programme wie eben ein Forum) muss man sich schon sehr anstrengen, einen Server wirklich lahm zu legen, wenn die Hardware nicht gerade von Vorgestern ist.
Und daneben gibt es ja auch noch andere Methoden, gerade auch für die erste Angriffsstelle (den Webserver), DoS-Attacken effektiv zu begegnen. Naja, den meisten jedenfalls...
Karsten Ude
-={ Das Mädchen für alles }=-
Kein Support per Messenger, Email oder PN! Unaufgeforderte Nachrichten werden ignoriert!
No support per Messenger, Email or PM. Each unasked message will be ignored!
schmidtedv
Beiträge: 607
Registriert: So 13.Feb, 2005 10:46
Wohnort: St. Blasien (seit 01.06)
Kontaktdaten:

Beitrag von schmidtedv »

Ok, verstanden...da greift dann höchstens noch die apache.conf mit jeweiligen Optimierungen, die ich eh machen mußte ob meiner kläglichen 733Mhz und 256MB.
Rettet den Wald, esst mehr Specht!

Forum [ sofern im Beitrag darauf verwiesen :-) ]
Benutzeravatar
oxpus
Administrator
Beiträge: 28737
Registriert: Mo 27.Jan, 2003 22:13
Wohnort: Bad Wildungen
Kontaktdaten:

Beitrag von oxpus »

Yepp.
Karsten Ude
-={ Das Mädchen für alles }=-
Kein Support per Messenger, Email oder PN! Unaufgeforderte Nachrichten werden ignoriert!
No support per Messenger, Email or PM. Each unasked message will be ignored!
Antworten