SQL Injection Tutorial: Lernen Sie mit Beispiel

Inhaltsverzeichnis:

Anonim

Daten sind eine der wichtigsten Komponenten von Informationssystemen. Datenbankbasierte Webanwendungen werden von der Organisation verwendet, um Daten von Kunden abzurufen. SQL ist die Abkürzung für Structured Query Language. Es wird zum Abrufen und Bearbeiten von Daten in der Datenbank verwendet.

Was ist eine SQL-Injection?

SQL Injection ist ein Angriff, der dynamische SQL-Anweisungen vergiftet, um bestimmte Teile der Anweisung auskommentieren oder eine Bedingung anhängen zu können, die immer wahr ist. Es nutzt die Designfehler in schlecht gestalteten Webanwendungen aus, um SQL-Anweisungen zur Ausführung von schädlichem SQL-Code auszunutzen.

In diesem Tutorial lernen Sie SQL Injection-Techniken und wie Sie Webanwendungen vor solchen Angriffen schützen können.

  • So funktioniert SQL Injection
  • Hacking-Aktivität: SQL Injizieren einer Webanwendung
  • Andere SQL Injection-Angriffstypen
  • Automatisierungstools für SQL Injection
  • So verhindern Sie SQL Injection-Angriffe
  • Hacking-Aktivität: Verwenden Sie Havji für SQL Injection

So funktioniert SQL Injection

Die Arten von Angriffen, die mit SQL Injection ausgeführt werden können, hängen vom Typ des Datenbankmoduls ab. Der Angriff funktioniert mit dynamischen SQL-Anweisungen . Eine dynamische Anweisung ist eine Anweisung, die zur Laufzeit mithilfe des Parameterkennworts aus einem Webformular oder einer URI-Abfragezeichenfolge generiert wird.

Betrachten wir eine einfache Webanwendung mit einem Anmeldeformular. Der Code für das HTML-Formular wird unten angezeigt.

HIER,

  • Das obige Formular akzeptiert die E-Mail-Adresse und das Passwort sendet sie dann an eine PHP-Datei mit dem Namen index.php.
  • Es besteht die Möglichkeit, die Anmeldesitzung in einem Cookie zu speichern. Wir haben dies aus dem Kontrollkästchen Remember_me abgeleitet. Es verwendet die Post-Methode, um Daten zu senden. Dies bedeutet, dass die Werte nicht in der URL angezeigt werden.

Angenommen, die Anweisung im Backend zum Überprüfen der Benutzer-ID lautet wie folgt

SELECT * FROM Benutzer WHERE email = $ _POST ['email'] AND password = md5 ($ _ POST ['password']);

HIER,

  • Die obige Anweisung verwendet die Werte des Arrays $ _POST [] direkt, ohne sie zu bereinigen.
  • Das Passwort wird mit dem MD5-Algorithmus verschlüsselt.

Wir werden den SQL-Injection-Angriff mit sqlfiddle veranschaulichen. Öffnen Sie die URL http://sqlfiddle.com/ in Ihrem Webbrowser. Sie erhalten das folgende Fenster.

Hinweis: Sie müssen die SQL-Anweisungen schreiben

Schritt 1) Geben Sie diesen Code in das linke Fenster ein

CREATE TABLE `users` (`id` INT NOT NULL AUTO_INCREMENT,`email` VARCHAR(45) NULL,`password` VARCHAR(45) NULL,PRIMARY KEY (`id`));insert into users (email,password) values ('This email address is being protected from spambots. You need JavaScript enabled to view it.',md5('abc'));

Schritt 2) Klicken Sie auf Schema erstellen

Schritt 3) Geben Sie diesen Code in das rechte Fenster ein

Wählen Sie * aus den Benutzern.

Schritt 4) Klicken Sie auf SQL ausführen. Sie sehen das folgende Ergebnis

Angenommen, Benutzer liefert Diese E-Mail-Adresse wird vor Spambots geschützt! JavaScript muss aktiviert werden, damit sie angezeigt werden kann. und 1234 als Passwort. Die Anweisung, die für die Datenbank ausgeführt werden soll, wäre

SELECT * FROM users WHERE email = ' Diese E-Mail-Adresse wird vor Spambots geschützt! JavaScript muss aktiviert werden, damit sie angezeigt werden kann. ' AND Passwort = md5 ('1234');

Der obige Code kann ausgenutzt werden, indem der Kennwortteil auskommentiert und eine Bedingung angehängt wird, die immer wahr ist. Angenommen, ein Angreifer gibt die folgende Eingabe in das Feld für die E-Mail-Adresse ein.

Diese E-Mail-Adresse ist vor Spambots geschützt! JavaScript muss aktiviert werden, damit sie angezeigt werden kann. ' ODER 1 = 1 GRENZE 1 - ']

xxx für das Passwort.

Die generierte dynamische Anweisung lautet wie folgt.

SELECT * FROM users WHERE email = ' Diese E-Mail-Adresse wird vor Spambots geschützt! JavaScript muss aktiviert werden, damit sie angezeigt werden kann. ' OR 1 = 1 LIMIT 1 - '] AND password = md5 (' 1234 ');

HIER,

  • Diese E-Mail-Adresse ist vor Spambots geschützt! JavaScript muss aktiviert werden, damit sie angezeigt werden kann. endet mit einem einfachen Anführungszeichen, das das Zeichenfolgenzitat vervollständigt
  • OR 1 = 1 LIMIT 1 ist eine Bedingung, die immer erfüllt ist und die zurückgegebenen Ergebnisse auf nur einen Datensatz beschränkt.
  • - 'AND… ist ein SQL-Kommentar, der den Kennwortteil entfernt.

Kopieren Sie die obige SQL-Anweisung und fügen Sie sie wie unten gezeigt in das SQL FiddleRun SQL-Textfeld ein

Hacking-Aktivität: SQL Injizieren einer Webanwendung

Wir haben eine einfache Webanwendung unter http://www.techpanda.org/ , die nur zu Demonstrationszwecken für SQL Injection-Angriffe anfällig ist. Der obige HTML-Formularcode stammt von der Anmeldeseite. Die Anwendung bietet grundlegende Sicherheit, z. B. das Bereinigen des E-Mail-Felds. Dies bedeutet, dass unser obiger Code nicht verwendet werden kann, um die Anmeldung zu umgehen.

Um dies zu umgehen, können wir stattdessen das Passwortfeld ausnutzen. Das folgende Diagramm zeigt die Schritte, die Sie ausführen müssen

Angenommen, ein Angreifer liefert die folgenden Eingaben

  • Schritt 1: Eingabe Diese E-Mail-Adresse wird vor Spambots geschützt! JavaScript muss aktiviert werden, damit sie angezeigt werden kann. als E-Mail-Adresse
  • Schritt 2: Geben Sie xxx ein ') ODER 1 = 1 -]
  • Klicken Sie auf die Schaltfläche Senden
  • Sie werden zum Dashboard weitergeleitet

Die generierte SQL-Anweisung lautet wie folgt

SELECT * FROM users WHERE email = ' Diese E-Mail-Adresse wird vor Spambots geschützt! JavaScript muss aktiviert werden, damit sie angezeigt werden kann. ' AND Passwort = md5 ('xxx') ODER 1 = 1 -] ');

Das folgende Diagramm zeigt, dass die Anweisung generiert wurde.

HIER,

  • Die Anweisung geht intelligent davon aus, dass die MD5-Verschlüsselung verwendet wird
  • Vervollständigt das einfache Anführungszeichen und die schließende Klammer
  • Hängt eine Bedingung an die Aussage an, die immer wahr ist

Im Allgemeinen versucht ein erfolgreicher SQL Injection-Angriff eine Reihe verschiedener Techniken, wie die oben gezeigten, um einen erfolgreichen Angriff auszuführen.

Andere SQL Injection-Angriffstypen

SQL Injections können mehr Schaden anrichten, als nur die Anmeldealgorithmen zu übergeben. Einige der Angriffe umfassen

  • Daten löschen
  • Daten aktualisieren
  • Daten einfügen
  • Ausführen von Befehlen auf dem Server, mit denen schädliche Programme wie Trojaner heruntergeladen und installiert werden können
  • Exportieren wertvoller Daten wie Kreditkartendaten, E-Mails und Kennwörter auf den Remote-Server des Angreifers
  • Abrufen von Benutzeranmeldedaten usw.

Die obige Liste erhebt keinen Anspruch auf Vollständigkeit. Es gibt Ihnen nur eine Vorstellung davon, was SQL Injection ist

Automatisierungstools für SQL Injection

Im obigen Beispiel haben wir manuelle Angriffstechniken verwendet, die auf unseren umfassenden SQL-Kenntnissen basieren. Es gibt automatisierte Tools, mit denen Sie die Angriffe effizienter und in kürzester Zeit ausführen können. Diese Tools umfassen

  • SQLSmack - https://securiteam.com/tools/5GP081P75C
  • SQLPing 2 - http://www.sqlsecurity.com/downloads/sqlping2.zip?attredirects=0&d=1
  • SQLMap - http://sqlmap.org/

So verhindern Sie SQL Injection-Angriffe

Eine Organisation kann die folgenden Richtlinien anwenden, um sich vor SQL Injection-Angriffen zu schützen.

  • Benutzereingaben sollten niemals als vertrauenswürdig eingestuft werden. Sie müssen immer bereinigt werden, bevor sie in dynamischen SQL-Anweisungen verwendet werden.
  • Gespeicherte Prozeduren - Diese können die SQL-Anweisungen kapseln und alle Eingaben als Parameter behandeln.
  • Vorbereitete Anweisungen - Vorbereitete Anweisungen für die Arbeit, indem zuerst die SQL-Anweisung erstellt und dann alle übermittelten Benutzerdaten als Parameter behandelt werden. Dies hat keine Auswirkungen auf die Syntax der SQL-Anweisung.
  • Reguläre Ausdrücke - Diese können verwendet werden, um potenziell schädlichen Code zu erkennen und zu entfernen, bevor die SQL-Anweisungen ausgeführt werden.
  • Benutzerzugriffsrechte für Datenbankverbindungen - Konten, die für die Verbindung mit der Datenbank verwendet werden, sollten nur die erforderlichen Zugriffsrechte erteilt werden. Dies kann dazu beitragen, die Leistung der SQL-Anweisungen auf dem Server zu verringern.
  • Fehlermeldungen - Diese sollten keine vertraulichen Informationen enthalten und genau angeben, wo ein Fehler aufgetreten ist. Einfache benutzerdefinierte Fehlermeldungen wie „Es treten leider technische Fehler auf. Das technische Team wurde kontaktiert. Bitte versuchen Sie es später noch einmal “kann verwendet werden, anstatt die SQL-Anweisungen anzuzeigen, die den Fehler verursacht haben.

Hacking-Aktivität: Verwenden Sie Havij für SQL Injection

In diesem praktischen Szenario verwenden wir das Havij Advanced SQL Injection-Programm, um eine Website nach Schwachstellen zu durchsuchen.

Hinweis: Ihr Antivirenprogramm kann es aufgrund seiner Natur kennzeichnen. Sie sollten es zur Ausschlussliste hinzufügen oder Ihre Antivirensoftware anhalten.

Das Bild unten zeigt das Hauptfenster für Havij

Das obige Tool kann verwendet werden, um die Sicherheitsanfälligkeit einer Website / Anwendung zu bewerten.

Zusammenfassung

  • SQL Injection ist ein Angriffstyp, der fehlerhafte SQL-Anweisungen ausnutzt
  • SQL Injection kann verwendet werden, um Anmeldealgorithmen zu umgehen, Daten abzurufen, einzufügen, zu aktualisieren und zu löschen.
  • Zu den SQL-Injection-Tools gehören SQLMap, SQLPing und SQLSmack usw.
  • Eine gute Sicherheitsrichtlinie beim Schreiben einer SQL-Anweisung kann dazu beitragen, SQL-Injection-Angriffe zu reduzieren.