


So implementieren Sie die Analyse der zeitbasierten SQLMAP-Injektion
1. Vorwort
Wie erkennt man eine SQL-Injection?
Meine Antwort lautet: Wenn es um die Sicherheit von Partei A geht, ist die Erkennung von SQL-Injections relativ einfach.
1) Fehlerinjektionserkennung.
2) Fügen Sie keine Bool-Fehlerberichte ein, da die Zahl der Fehlalarme relativ hoch ist.
3) Führen Sie eine zeitbasierte Zeitinjektion durch, kontaktieren Sie den Betrieb und die Wartung, um langsame Protokolldatenbankaufzeichnungen zu erstellen, überwachen Sie den Ruhezustand und führen Sie eine Benchmark-Schlüsselwortüberwachung durch. Sie können die ID-Nummer der Scanaufgabe zum Dezimalpunkt der Ruhezeit hinzufügen, um dies zu erleichtern Positionierung. (P.S.: Diese Methode kann 99 % der SQL-Injektionen finden)
Daher beschränke ich den Zeitfehler bei der zeitbasierten Zeitinjektion sehr streng. Allerdings führt @chengable sicherheitsrelevante Arbeiten an Partei B durch, und eine zeitbasierte Zeitinjektion ist im Allgemeinen nicht möglich. Es versteht sich, dass er hauptsächlich zuerst das Vorhandensein von Injektionspunkten filtert und dann sqlmapapi.py erkennt. Ich habe zuvor auch sqlmap zum Testen verwendet. Das Problem war, dass die Scanzeit zu lang war und die JSON-Formatinjektion nicht unterstützt wurde. . Die Zeitinjektion von sqlmap ist jedoch relativ genau. Was ist, wenn Sie sqlmapapi.py nicht verwenden möchten? Hier werde ich die zeitbasierte Injektionslogik von sqlmap herausarbeiten.
2. Analysieren Sie kurz die zeitbasierte Injektion von sqlmap
Beschweren Sie sich: Der Code von sqlmap ist nicht standardisiert, hässlich und groß. Jemand hat mir empfohlen, den SQLMAP-Quellcode zu lesen und viel zu lernen. Jetzt, wo ich darüber nachdenke, habe ich früh aufgegeben.
Wenn Sie also faul sind und sich den Quellcode nicht ansehen möchten, fügen Sie --technique=T -v 3 hinzu und schauen Sie sich zuerst die Nutzlast der SQLMap-Erkennung an.
Es scheint, dass ich faul war und einige Wege gefunden habe:
Zuerst hat sqlmap die Injektionsnutzlast des Schlafs gestopft:
Erster gefüllter Schlaf (5) , nachdem festgestellt wurde, dass es ausgeführt wird; Sleep(0) wird eingefügt und schließlich wird Sleep(5) eingefügt.
Dann raten Sie, zuerst zu schlafen (5) und dann zu schlafen (0), wenn die zweite Verzögerung erfolgreich ist. Wenn keine Verzögerung festgestellt wird, fahren Sie mit dem Ruhezustand fort (5). Wenn die Verzögerung erneut erfolgreich ist, wird eine Erinnerung angezeigt, dass möglicherweise eine Injektion erfolgt:
Schließlich wird SQLMap sehr geschickt verwendet, um Fehlalarme zu verhindern Wenn die Beurteilungsbedingung verwendet wird, um falsch positive Ergebnisse zu eliminieren, können Sie sehen, dass sqlmap zweimal prüft, ob die Gleichung wahr ist, und zweimal testet, ob die Gleichung falsch positiv ist, basierend auf der zweiten Verzögerung.
3. Analysieren Sie den Quellcode eingehend
Kehren Sie zum Quellcode zurück und werfen Sie einen Blick darauf: Gehen wir basierend auf einigen der vorherigen Schlüsselwörter direkt zum Code, um einen Blick darauf zu werfen. Beispielsweise erscheint *appears to be* vor der Suche. Siehe den Code des ersten Schritts:
sqlmap/lib/controller/checks.py:
Ich habe hier festgestellt, dass es fast so ist das Gleiche, was ich vorher vermutet habe.
Suchen Sie, wo sich die Nutzlast befindet, insbesondere die Nutzlast mit if-Bedingung, und finden Sie sie hier:
sqlmap/xml/payloads/time_blind.xml:
Sie können jeweils sehen, ob die Nutzlast von Die Bedingungen liegen im Vektorfeld.
4. Das Schließen der Zeichen vor dem Injektionspunkt ist der Schlüssel dafür, ob es injiziert werden kann.
Observed tools/sqlmap/xml/boundaries.xml, daher müssen wir hier auch auf die verschiedenen Schließungssituationen verweisen:
5. Bestimmen Sie, ob eine Verzögerung vorliegt
5.1 Methode 1
Beziehen Sie sich auf die Bei der vorherigen awvs-Injektion habe ich mir eine Erkennungsmethode ausgedacht, die einfacher zu verstehen ist. Nehmen Sie die Verbrauchszeit von 6 normalen Tests ohne injizierte Nutzlast und berechnen Sie den Durchschnittswert als native Anforderungszeit (ori_time).
Wenn die Injektionszeit Sleep(5) ist, subtrahiere ori_time von der aktuellen Zeit als Sleep_time. Wenn „sleep_time“ kleiner als 4 ist, wird davon ausgegangen, dass die Verzögerung nicht aufgetreten ist. (Angesichts der Tatsache, dass ori_time vom Netzwerk beeinflusst wird und größer wird, wird der Schwellenwert hier auf vier Sekunden angepasst.)
Wenn die Injektionszeit Sleep (0) ist, subtrahieren Sie ori_time von der aktuellen Zeit als Sleep_time. Wenn „sleep_time“ größer als 2 ist, bedeutet dies, dass in der Verzögerung ein Fehlalarm vorliegt.
5.2 Methode 2
Sehen Sie sich den SQLMap-Code noch einmal an. Sie haben ein mathematisches Problem verwendet, das ich nicht verstehe (Details)
Nachverfolgung: Request.queryPage --->wasLastResponseDelayed Sie können sehen, dass die Logik so ist : Nehmen Sie die Verbrauchszeit von 30 normalen Tests ohne injizierte Nutzlast und geben Sie sie in kb.responseTimes ein. Berechnen Sie die Standardabweichung 30 Mal als Abweichung und berechnen Sie die langsamste Reaktionszeit basierend auf der Abweichung als unteres StdLimit:
Sein Wert ist der Durchschnitt aus dem 30-fachen plus TIME_STDEV_COEFF*Standardabweichung (Abweichung). Wenn Sie TIME_STDEV_COEFF auf 7 setzen, kann die Beurteilungsgenauigkeit 99,999999997440 % betragen.
Beurteilen Sie abschließend, ob die Verbrauchszeit der aktuellen Anforderung größer als das untere StdLimit ist. Wenn sie größer ist, bedeutet dies, dass eine Verzögerung auftritt. Wenn sie kleiner ist, bedeutet dies, dass keine Verzögerung vorliegt (außerdem, wenn das untere StdLimit weniger als 0,5 Sekunden beträgt). , unteresStdLimit dauert 0,5 Sekunden).
Emotion sagt mir, dass ich Methode eins wählen sollte, und Rationalität sagt mir, dass ich Methode zwei wählen sollte. Ich habe mich trotzdem für Methode zwei entschieden und den Einspritzpunkt gemessen (Details). Beim sehr stabilen Scannen wurden Injektionsschwachstellen gefunden.
Das obige ist der detaillierte Inhalt vonSo implementieren Sie die Analyse der zeitbasierten SQLMAP-Injektion. 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



Verwenden Sie sqlmap, um die Injektion in dvwa zu automatisieren, setzen Sie den dvwa-Level auf niedrig, öffnen Sie die SQLInjection (SQLInjection(Blind)) von dvwa, öffnen Sie das Browser-Debugging, geben Sie die Benutzer-ID ein, senden Sie sie und sehen Sie sich die abgefangenen Anforderungen an. Sie können sehen, dass es sich um eine GET-Anfrage handelt, die URL „http://192.168.1.222:8089/dvwa/vulnerabilities/sqli/?id=1&Submit=Submit#“. Wir haben sie direkt in Salmap eingefügt, um sie zu testen, verwenden Sie die - u Befehl -u"http://192.168.1.22

0x00-Übersicht Vor Kurzem bin ich beim Testen der SQLMAP-Injektion auf ein seltsames Phänomen gestoßen. Die höhere Version von SQLMAP kann die Injektion jedoch nicht erkennen, und die Daten können ausgehen, was kein Fehlalarm ist Beim vergleichenden Testen und Anzeigen des SQLMAP-Quellcodes wurden zwei kleine Lücken gefunden. 0x01-Szenarioreproduktion Injektionspunktformat: json..."whereparams":[{"name": "keyWord", "value": "test"}]} Injizierbare Parameter: Valuesqlmap-Befehl: pythonsqlmap.py-rsqlpk.txt– Flush -session-vvsqlmapv1.2.11 kann keine s injizieren

Teil eins: Verwendung von SQLmap 1.1 Einführung in SQLMAP 1. Ich habe einige grundlegende Anweisungen zur SQL-Injektion erwähnt, aber die manuelle Injektion ist sehr mühsam. Wir können SQLMAP, ein leistungsstarkes SQL-Injection-Tool, verwenden, um Daten zu erhalten. 2. Einführung in SQLMAP (1) # sqlmap ist ein Open-Source-Penetrationstest-Tool, das SQL-Injection-Schwachstellen und mit der Datenbank verbundene Server automatisch erkennen und ausnutzen kann. Es verfügt über eine sehr leistungsstarke Erkennungs-Engine, einen Penetrationstester mit mehreren Funktionen, Zugriff auf das zugrunde liegende Dateisystem durch Datenbank-Fingerprinting und Befehlsausführung über eine Out-of-Band-Verbindung. Offizielle Website: sqlmap.org(2)#Unterstützte Datenbanken: MySQL, Oracle, PostgreS

Da Penetrationstests auf externen Websites erforderlich sind, verfügen die meisten Websites über eine Zugriffshäufigkeitskontrolle. Sobald diese Häufigkeit überschritten wird, wird die IP direkt gesperrt. Insbesondere wenn SQLMAP ausgeführt wird, ist es noch „Tantenroter“ und wird mit einem Fehler beendet, bevor die Ausführung von SQLMAP abgeschlossen ist. Deshalb begann ich, den Proxy-Modus von SQLMAP zu untersuchen. SQLMAP verfügt über zwei Proxy-Modi, einen normalen Proxy (HTTP-Proxy) und einen Onion-Proxy. Ich wollte ursprünglich über die Anwendung gewöhnlicher Agenten schreiben, aber Baidu sah, dass dieser Artikel detailliert genug war und hörte auf, Unsinn zu reden. Sqlmap-Erweiterung – Implementierung eines externen IP-Proxy-Pools Konzentrieren wir uns auf den Onion-Proxy. Zu Beginn, als Onion direkt zur Injektion verwendet wurde, gab es keinen „Tante Red“-Bericht. Später, als die Anzahl der eingedrungenen Websites zunahm,

1. Vorwort Wie erkennt man eine SQL-Injection? Meine Antwort lautet: Wenn Partei A sich um die Sicherheit kümmert, ist die Erkennung von SQL-Injections relativ einfach. 1) Fehlerinjektionserkennung. 2) Fügen Sie keine Bool-Fehlerberichte ein, da die Zahl der Fehlalarme relativ hoch ist. 3) Führen Sie eine zeitbasierte Zeitinjektion durch, wenden Sie sich an den Betrieb und die Wartung, um langsame Protokolldatenbankaufzeichnungen zu erstellen, den Ruhezustand zu überwachen und die Schlüsselwortüberwachung durchzuführen. Sie können die ID-Nummer der Scanaufgabe zum Dezimalpunkt der Ruhezeit hinzufügen, um die Positionierung zu erleichtern. (P.S.: Mit dieser Methode können 99 % der SQL-Injektionen gefunden werden.) Daher schränke ich den Zeitfehler bei der zeitbasierten Zeitinjektion sehr streng ein. Allerdings führt @chengable sicherheitsrelevante Arbeiten in Partei B durch, basierend auf t

Es gibt zu wenige verwandte Artikel zur DNS-Injektion für SQLMAP. Sie stellen den Parameter --dns-domain nur kurz vor oder erwähnen ihn in einem Satz, was verwirrend ist (hauptsächlich unehrlich). noch nicht Big Boss). Dann habe ich es noch einmal gemacht, indem ich auf die Methoden im Internet verwiesen habe. Zu den Dingen, die vorbereitet werden müssen, gehören eine SQLMap, Windows Blind Injection, zwei Domänennamen und ein externer Netzwerkserver. Als ich einmal etwas tat, stieß ich auf eine Zeitblindinjektion. Es war zufällig ein Windows-Computer und ich erinnerte mich an die Methode der DNS-Injektion. Bevor ich anfange, habe ich vor, den Befehl --sql-shell von sqlmap zu verwenden, um die DNS-Injection-Nutzlast zu testen. Gehen Sie zunächst zu burpsuite.

Als ich die APP des Unternehmens testete, stellte ich fest, dass wir allen Parameterinhalten ein 32-Bit-Zeichen hinzugefügt und schließlich eine MD5-Verschlüsselung durchgeführt haben. Da der APP-Verarbeitungsprozess zunächst überprüft, ob das Zeichen korrekt ist, kann er überhaupt nicht in die Datenbank gelangen, um SQLMAP zum Testen zu verwenden. Nach dem Abfangen habe ich ein Skript für Proxy-Daten geschrieben Das Datenpaket führt eine verschlüsselte Ersetzung seines Parameterinhalts und 32 Zeichen durch. Hinweis: Dieses Skript ist für das interne System des Unternehmens geeignet, da Sie den Verschlüsselungsprozess kennen oder die Verschlüsselungsmethode des Front-End-JS erhalten können. Zuerst habe ich mit Django ein Programm geschrieben, um das System des Unternehmens zu simulieren. Der Prozess bestand darin, die POST-ID und das Token zu erhalten und ein benutzerdefiniertes verschlüsseltes Wort hinzuzufügen.

sqlmap liest und schreibt Dateien –file-read: liest Dateien aus dem Dateisystem des Back-End-Datenbankverwaltungssystems –file-write: bearbeitet lokale Dateien im Dateisystem des Back-End-Datenbankverwaltungssystems (schreibt von lokal) –file-dest: Der absolute Pfad zu der Datei, die vom Back-End-Datenbankverwaltungssystem geschrieben wird (Schreibzielpfad). Sie können die oben genannten Befehle verwenden, um die Systemdatei nach der SQL-Injection zu lesen und zu schreiben. Voraussetzung ist jedoch, dass Sie über Lese- und Schreibfähigkeiten verfügen Berechtigungen und DBA-Berechtigungen sein, andernfalls können Lese- und Schreibvorgänge nicht erfolgreich ausgeführt werden. Nehmen Sie als Beispiel DVWA und erstellen Sie DVWA unter Kali, um Dateien zu lesen und zu schreiben. Lesen Sie die Datei: Überprüfen Sie die relevanten Informationen in PHPinfo, verwenden Sie -file-r
