SQL-Injection-Tutorial: Lernen anhand von Beispielen

Was ist eine SQL-Injection?

SQL-Injection ist ein Angriff, der dynamische SQL-Anweisungen vergiftet, um bestimmte Teile der Anweisung auszukommentieren oder eine Bedingung anzuhรคngen, die immer wahr ist. Es nutzt die Designfehler schlecht gestalteter Webanwendungen aus, um SQL-Anweisungen zur Ausfรผhrung bรถsartigen SQL-Codes auszunutzen.

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.

SQL Injection

Wie funktioniert ein SQL-Injection-Angriff?

Die Arten von Angriffen, die mithilfe der SQL-Injection durchgefรผhrt werden kรถnnen, variieren je nach Art der Datenbank-Engine. Der Angriff funktioniert auf dynamische SQL-Anweisungen. Eine dynamische Anweisung ist eine Anweisung, die zur Laufzeit mithilfe der Parameter โ€žPasswortโ€œ aus einem Webformular oder einer URI-Abfragezeichenfolge generiert wird.

Beispiel fรผr eine SQL-Injection

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

<form action=โ€˜index.phpโ€™ method="post">

<input type="email" name="email" required="required"/>

<input type="password" name="password"/>

<input type="checkbox" name="remember_me" value="Remember me"/>

<input type="submit" value="Submit"/>

</form>

HIER,

  • Das obige Formular akzeptiert die E-Mail-Adresse und das Passwort und sendet sie dann an eine PHP Datei mit dem Namen index.php.
  • Es besteht die Mรถglichkeit, die Anmeldesitzung in einem Cookie zu speichern. Dies haben wir aus der Checkbox โ€žremember_meโ€œ abgeleitet. Zum Senden von Daten wird die Post-Methode verwendet. Dies bedeutet, dass die Werte nicht in der URL angezeigt werden.

Nehmen wir an, die Anweisung im Backend zur รœberprรผfung der Benutzer-ID lautet wie folgt

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

HIER,

  • Die obige Anweisung verwendet die Werte von $_POST[] Array direkt, ohne es zu desinfizieren.
  • 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

SQL-Injection funktioniert

Schritt 1) Geben Sie diesen Code im linken Bereich 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 ('m@m.com',md5('abc'));

Schritt 2) Klicken Sie auf Schema erstellen

Schritt 3) Geben Sie diesen Code im rechten Bereich ein

select * from users;

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

SQL-Injection funktioniert

Angenommen, Benutzerlieferungen admin@admin.sys und 1234 als Passwort. Die Anweisung, die fรผr die Datenbank ausgefรผhrt werden soll, wรคre

SELECT * FROM users WHERE email = 'admin@admin.sys' AND password = md5('1234');

Der obige Code kann ausgenutzt werden, indem der Passwortteil auskommentiert und eine Bedingung angehรคngt wird, die immer erfรผllt ist. Nehmen wir an, ein Angreifer gibt die folgende Eingabe in das E-Mail-Adressfeld ein.

xxx@xxx.xxx' OR 1 = 1 LIMIT 1 -- ' ]

xxx fรผr das Passwort.

Die generierte dynamische Anweisung sieht wie folgt aus.

SELECT * FROM users WHERE email = 'xxx@xxx.xxx' OR 1 = 1 LIMIT 1 -- ' ] AND password = md5('1234');

HIER,

  • xxx@xxx.xxx endet mit einem einfachen Anfรผhrungszeichen, das das String-Anfรผhrungszeichen vervollstรคndigt
  • OR 1 = 1 LIMIT 1 ist eine Bedingung, die immer wahr ist und die zurรผckgegebenen Ergebnisse auf nur einen Datensatz beschrรคnkt.
  • โ€” ' AND โ€ฆ ist ein SQL-Kommentar, der den Passwortteil eliminiert.

Kopieren Sie die obige SQL-Anweisung und fรผgen Sie sie ein SQL FiddleFรผhren Sie das SQL-Textfeld wie unten gezeigt aus

SQL-Injection funktioniert

Hacking-Aktivitรคt: SQL-Inject einer Webanwendung

Wir haben eine einfache Webanwendung unter http://www.techpanda.org/ das nur zu Demonstrationszwecken anfรคllig fรผr SQL-Injection-Angriffe ist. Der obige HTML-Formularcode stammt von der Anmeldeseite. Die Anwendung bietet grundlegende Sicherheit, wie z. B. die Bereinigung 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 befolgen mรผssen

SQL-Injektion einer Webanwendung

Nehmen wir an, ein Angreifer gibt folgende Eingabe ein

  • Schritt 1: Geben Sie xxx@xxx.xxx als E-Mail-Adresse ein
  • Schritt 2: Geben Sie xxx') ODER 1 = 1 โ€” ] ein

SQL-Injektion einer Webanwendung

  • Klicken Sie auf die Schaltflรคche Senden
  • Sie werden zum Dashboard weitergeleitet

Die generierte SQL-Anweisung sieht wie folgt aus

SELECT * FROM users WHERE email = 'xxx@xxx.xxx' AND password = md5('xxx') OR 1 = 1 -- ]');

Das Diagramm unten zeigt, dass die Anweisung erstellt wurde.

SQL-Injektion einer Webanwendung

HIER,

  • Die Aussage geht intelligenterweise davon aus, dass MD5-Verschlรผsselung verwendet wird
  • Vervollstรคndigt das einfache Anfรผhrungszeichen und die schlieรŸende Klammer
  • Fรผgt der Aussage eine Bedingung hinzu, die immer wahr ist

Im Allgemeinen werden bei einem erfolgreichen SQL-Injection-Angriff verschiedene Techniken wie die oben gezeigten ausprobiert, um einen erfolgreichen Angriff durchzufรผhren.

Andere Arten von SQL-Injection-Angriffen

SQL-Injections kรถnnen mehr Schaden anrichten als nur die Anmeldealgorithmen zu umgehen. Einige der Angriffe umfassen

  • Lรถschen von Daten
  • Daten aktualisieren
  • Daten einfรผgen
  • Ausfรผhren von Befehlen auf dem Server, die Schadprogramme wie Trojaner herunterladen und installieren kรถnnen
  • Exportieren wertvoller Daten wie Kreditkartendaten, E-Mails und Passwรถrter auf den Remote-Server des Angreifers
  • Abrufen von Benutzeranmeldedaten usw.
  • SQL-Injection basierend auf Cookies
  • Fehlerbasierte SQL-Injection
  • Blinde SQL-Injection

Die obige Liste ist nicht vollstรคndig; 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, die Ihnen helfen kรถnnen, die Angriffe effizienter und innerhalb kรผrzester Zeit durchzufรผhren. Zu diesen Tools gehรถren

So verhindern Sie SQL-Injection-Angriffe

Eine Organisation kann die folgende Richtlinie รผbernehmen, um sich vor SQL-Injection-Angriffen zu schรผtzen.

  • Benutzereingaben sollten niemals vertrauenswรผrdig sein โ€“ Es muss immer bereinigt werden, bevor es in dynamischen SQL-Anweisungen verwendet wird.
  • Gespeicherte Prozeduren - Diese kรถnnen die SQL-Anweisungen kapseln und alle Eingaben als Parameter behandeln.
  • Vorbereitete Stellungnahmen โ€“ Vorbereitete Anweisungen funktionieren, 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 ihn vor der Ausfรผhrung der SQL-Anweisungen zu entfernen.
  • Benutzerzugriffsrechte fรผr Datenbankverbindungen โ€“ Fรผr gewohnte Konten sollten nur die erforderlichen Zugriffsrechte vergeben werden Verbindung zur Datenbank herstellen. Dies kann dazu beitragen, die Leistung der SQL-Anweisungen auf dem Server zu reduzieren.
  • Fehlermeldungen - Diese sollten keine vertraulichen Informationen preisgeben und auch nicht angeben, wo genau ein Fehler aufgetreten ist. Einfache benutzerdefinierte Fehlermeldungen wie โ€žLeider treten technische Fehler auf. Das technische Team wurde kontaktiert. Bitte versuchen Sie es spรคter erneutโ€œ kรถnnen 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 auf Schwachstellen zu scannen.

Hinweis: Ihr Antivirus Programm kann es aufgrund seiner Natur markieren. Sie sollten es zur Ausschlussliste hinzufรผgen oder Ihre Antivirensoftware pausieren.

Das Bild unten zeigt das Hauptfenster fรผr Havij

Verwenden Sie Havij fรผr SQL-Injection

Das oben genannte Tool kann verwendet werden, um die Verwundbarkeit einer Website/Anwendung zu bewerten.

Zusammenfassung

  • SQL-Injection ist ein Angriffstyp, der fehlerhafte SQL-Anweisungen ausnutzt
  • Mithilfe von SQL-Injection kรถnnen Anmeldealgorithmen umgangen und Daten abgerufen, eingefรผgt, aktualisiert und gelรถscht werden.
  • Zu den SQL-Injection-Tools zรคhlen SQLMap, SQLPing, SQLSmack usw.
  • Eine gute Sicherheitsrichtlinie beim Schreiben von SQL-Anweisungen kann dazu beitragen, SQL-Injection-Angriffe zu reduzieren.

Fassen Sie diesen Beitrag mit folgenden Worten zusammen: