So implementieren Sie die Analyse der zeitbasierten SQLMAP-Injektion

WBOY
Freigeben: 2023-05-12 12:10:06
nach vorne
735 Leute haben es durchsucht

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.

如何实现sqlmap time-based inject的分析

如何实现sqlmap time-based inject的分析

如何实现sqlmap time-based inject的分析

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:

如何实现sqlmap time-based inject的分析

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:

如何实现sqlmap time-based inject的分析

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:

如何实现sqlmap time-based inject的分析

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:

如何实现sqlmap time-based inject的分析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:

如何实现sqlmap time-based inject的分析

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!

Verwandte Etiketten:
Quelle:yisu.com
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!