Detaillierte Erklärung der Funktionen outfile, dumpfile und load_file bei der MySQL-Injektion

Detaillierte Erklärung der Funktionen outfile, dumpfile und load_file bei der MySQL-Injektion

Im späteren Stadium der Ausnutzung von SQL-Injection-Schwachstellen besteht die gängigste Methode darin, die Dateiserienfunktionen von MySQL zum Lesen vertraulicher Dateien oder Schreiben von Webshells zu verwenden. Die folgenden drei Funktionen werden häufig verwendet:

  • in dumpfile()
  • in outfile()
  • lade_datei()

Unsere Testdaten sind dieses Mal wie folgt

Einschränkungen beim Aufrufen von Funktionen zum Lesen und Schreiben von Dateien

Da es sich dabei um das Schreiben von Dateien auf den Server handelt, wird die erfolgreiche Ausführung der obigen Funktion durch den Parameter secure_file_priv beeinflusst. Die Beschreibung im offiziellen Dokument lautet wie folgt

Übersetzt:

  • Wenn der Parameter secure_file_priv leer ist, gibt es keine Einschränkungen beim Import und Export.
  • Wenn der Wert ein angegebenes Verzeichnis ist, können Sie nur in das angegebene Verzeichnis importieren und exportieren.
  • Wenn der Wert auf NULL gesetzt ist, sind die Import- und Exportfunktionen deaktiviert.

Dieser Wert kann mit dem Befehl select @@secure_file_priv abgefragt werden. Da dieser Parameter nicht dynamisch geändert werden kann, kann er nur in der MySQL-Konfigurationsdatei geändert und dann neu gestartet werden, damit er wirksam wird.

Der Unterschied zwischen Dumpfile und Outfile

Unterschiede beim Exportieren von Datenbankszenarien

wählen Sie ... in Ausgabedatei

Schauen wir uns zunächst die Erklärung dieser beiden Funktionen in der offiziellen MySQL-Dokumentation an

Es gibt zwei nennenswerte Fallstricke:

Die Funktion „outfile“ kann mehrere Zeilen exportieren, während „dumpfile“ nur eine Datenzeile exportieren kann.
Die Funktion outfile verfügt über eine spezielle Formatkonvertierung beim Schreiben von Daten in eine Datei, während dumpfile das ursprüngliche Datenformat beibehält.

Als nächstes werden wir uns die Details hier ansehen, indem wir den Test exportieren

Verwenden Sie zunächst den Outfile-Exportbefehl select * from test into outfile '/tmp/test.txt'

Sie können sehen, dass alle Daten in der Datei /tmp/test.txt gespeichert werden und die Zeile am Ende einer Datenzeile automatisch umbrochen wird.

Wenn Sie sich die offizielle Dokumentation ansehen, können Sie sehen, dass das Format mit den folgenden Parametern angepasst werden kann

FIELDS ESCAPED BY kann zum Escapen bestimmter Zeichen verwendet werden, FIELDS [OPTIONALLY] ENCLOSED BY wird zum Umschließen von Feldwerten verwendet FIELDS TERMINATED BY wird zum Trennen von Feldwerten verwendet.

Verwenden Sie beispielsweise den folgenden Befehl: select * from test into outfile '/tmp/test.txt FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY ' " 'LINES TERMINATED BY '\n'

Die resultierende Exportdatei sieht wie folgt aus

wählen Sie ... in Dumpdatei

Verwenden Sie dann den Befehl select * from test into dumpfile '/tmp/test.txt' , um mithilfe der Dumpdatei zu exportieren

Sie können sehen, dass dieser Befehl bei seiner Ausführung mehr als eine Ausgabezeile erzeugt.

Dateiinhalte anzeigen

Es ist ersichtlich, dass zwischen den von dumpfile exportierten Datenzeilen kein Zeilenumbruch vorhanden ist und nur ein Teil der Daten exportiert wird

Schreiben Sie den Unterschied zwischen Webshell und UDF

wählen Sie ... in Ausgabedatei

Wir verwenden den Befehl select 'a\naa\raaaa' into outfile '/tmp/test.txt' um die Ergebnisse im allgemeinen Szenario zum Schreiben von Dateien anzuzeigen.

Sie können sehen, dass outfile Sonderzeichen wie \n im exportierten Inhalt maskiert und am Ende des Dateiinhalts eine neue Zeile hinzufügt.

Verwenden wir den Befehl select 'a\naa\raaaa' into dumpfile '/tmp/test.txt' um einen Blick darauf zu werfen

Es ist ersichtlich, dass Dumpfile den Dateiinhalt so schreibt, wie er ist, ohne jegliche Übertragung oder Hinzufügung. Aus diesem Grund我們在平常的UDF提權中使用dumpfile進行dll文件

Ein weiterer Punkt, der beachtet werden muss, ist, dass auf outfile kein Pfad folgen kann, der mit 0x beginnt, oder ein Pfad nach einer Zeichenkonvertierung, sondern nur ein Pfad in einfachen Anführungszeichen sein kann. Dieses Problem ist bei PHP-Injection problematischer, da einfache Anführungszeichen automatisch in \' umgewandelt werden. Dann wird grundsätzlich GG verwendet. Hinter load_file kann der Pfad jedoch einfache Anführungszeichen, 0x und Zeichenkonvertierungszeichen enthalten, aber der Schrägstrich im Pfad ist / statt \.

Zusammenfassen

Oben finden Sie eine ausführliche Erläuterung der vom Herausgeber eingeführten Funktionen outfile, dumpfile und load_file in der MySQL-Injection. Ich hoffe, dass sie für alle hilfreich sein wird. Wenn Sie Fragen haben, hinterlassen Sie mir bitte eine Nachricht und der Herausgeber wird Ihnen rechtzeitig antworten. Ich möchte auch allen für ihre Unterstützung der Website 123WORDPRESS.COM danken!

Das könnte Sie auch interessieren:
  • Zusammenfassung der MySQL-Funktionsmethode LOAD_FILE()

<<:  Das WeChat-Applet ermöglicht das Aufnehmen von Fotos und Auswählen von Bildern aus Alben

>>:  Docker + Daocloud realisiert die automatische Erstellung und Bereitstellung von Front-End-Projekten

Artikel empfehlen

Zwei Möglichkeiten, das WeChat-Miniprogramm mit Tencent Maps zu verbinden

Ich habe kürzlich ein WeChat-Applet geschrieben u...

Umfassende Erklärung zu dynamischem SQL von MyBatis

Inhaltsverzeichnis Vorwort Dynamisches SQL 1. Sch...

Ein Artikel zum Lösen des Echarts-Kartenkarussell-Highlights

Inhaltsverzeichnis Vorwort Aufgabenliste tun Sie ...

XHTML-Tags haben ein schließendes Tag

<br />Ursprünglicher Link: http://www.dudo.o...

Detaillierte Erklärung des strikten Modus in JavaScript

Inhaltsverzeichnis Einführung Verwenden des strik...

Erste Schritte Tutorial für Anfänger ⑨: So erstellen Sie eine Portal-Website

Darüber hinaus wird eine mit einem Blog-Programm e...

So verwenden Sie den VIM-Editor unter Linux

Als leistungsstarker Editor mit umfangreichen Opt...