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.
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
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
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 = 1LIMIT 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
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
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
- 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.
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
- SQLMap โ http://sqlmap.org/
- JSQL-Injection โ https://tools.kali.org/vulnerability-analysis/jsql
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
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.








