SQLi: Injektionsangriff
Was ist SQL-Injection?
SQLi ist eine Art Angriff in webbasierten Anwendungen, bei denen der Angreifer böswillige Abfragen in der Datenbank einer Website ausführen kann. SQL ist eine Code-Injection-Technik, mit der böswillige SQL-Anweisungen ausgeführt werden.
Wenn Sie sich beispielsweise auf der Website anmelden möchten und den Benutzernamen und das Passwort vergessen haben, können wir uns mithilfe der SQLi-Injektion anmelden oder auf die Webseite zugreifen, ohne das Passwort zu kennen.
Wie funktioniert die SQL-Injection?
SQL-Injection enthält das Einfügen oder Injizieren der SQL-Abfrage durch die Eingabedaten vom Client in die Anwendung. Diese werden in die Datenebene injiziert, die sich auf vordefinierte SQL-Befehle auswirken.
SQL-Injection-Angriffe zielen auf Schwachstellen in dynamischen SQL-Anweisungen ab. Stellen Sie sich eine dynamische SQL-Anweisung wie eine multivariate mathematische Funktion vor, deren Parameter fest sind, während das Ergebnis durch die in den unabhängigen Variablen platzierten Werte bestimmt wird.
Ebenso besteht eine dynamische SQL-Anweisung auch aus einem vordefinierten Satz von Parametern (z. B. einem Webformular), und die vollständige Anweisung wird nur generiert, wenn der Benutzer eine Eingabe macht.
Siehe folgendes Beispiel einer SQL-Anweisung eines Anmeldeformulars:
SELECT * FROM users WHERE username = '$username' AND password = bcrypt ('$password')
Wenn in einer dynamischen SQL-Anweisung eine Schwachstelle vorhanden ist, könnte ein Angreifer ein komplexes Skript in ein Formular eingeben, um vorhandene Parameter zu beschädigen und die Bedeutung der gesamten Anweisung zu ändern.
Arten der SQL-Injection:
In-Band-SQLi: In-Band-SQL-Injection ist eine Art von SQL-Injection, bei der der Angreifer das Ergebnis als direkte Antwort über denselben Kommunikationskanal erhält. Wenn ein Angreifer beispielsweise manuell einen Angriff über seinen Webbrowser startet, werden die Ergebnisse des Angriffs in demselben Webbrowser angezeigt. In-Band-SQL-Injection wird auch als traditionelle SQL-Injection bezeichnet.
Fehlerbasierte SQL-Injektion – Hier führt der Angreifer bestimmte Aktionen aus, die dazu führen, dass die Datenbank eine Fehlermeldung generiert. Anhand der Fehlermeldung können Sie feststellen, welche Datenbank verwendet wird, welche Serverversion der Handler verwendet usw.
Union- Based SQL Injection – Eine von der Datenbank generierte Anweisung, um eine einzelne HTTP-Antwort zu erhalten. Sie können die Abfrage in der URL erstellen oder mehrere Anweisungen im Eingabefeld kombinieren, um zu versuchen, die Antwort zu generieren
Blind SQLi: Blind SQL Injection ist eine Art der SQL Injection, bei der der Angreifer keine explizite Antwort von der angegriffenen Datenbank erhält, sondern stattdessen das Verhalten des Datenbankservers und der Anwendung beobachtet, um die Datenbankstruktur inkrementell zu rekonstruieren. Blinde SQL-Injection wird auch als inferentielle SQL-Injection bezeichnet.
Boolean Based – Hier sendet der Angreifer eine SQL-Abfrage an die Datenbank und fordert die Anwendung auf, unterschiedliche Ergebnisse zurückzugeben, je nachdem, ob die Abfrage True oder False zurückgibt.
Zeitbasiert – Bei diesem Angriff sendet ein Angreifer eine SQL-Abfrage an eine Datenbank und veranlasst die Datenbank, eine bestimmte Zeit zu warten, bevor die Ergebnisse geteilt werden. Die Antwortzeit hilft einem Angreifer festzustellen, ob eine Abfrage wahr oder falsch ist.
Out-of-Band-SQLi: Out-of-Band-SQL-Injection (OOB-SQLi) ist eine Art SQL-Injection, bei der der Angreifer keine Antwort von der angegriffenen Anwendung über denselben Kommunikationskanal erhält, sondern zum Senden verleitet werden kann Daten an einen entfernten Endpunkt, der vom Angreifer kontrolliert wird. Out-of-Band-SQL-Injection ist nur möglich, wenn der von Ihnen verwendete Server über Befehle verfügt, die DNS- oder HTTP-Anforderungen auslösen. Dies gilt jedoch für alle gängigen SQL-Server.
Beispiel auf SQLi
Das erste Beispiel ist sehr einfach. Es zeigt, wie ein Angreifer eine SQL-Injection-Schwachstelle nutzen kann, um die Anwendungssicherheit zu umgehen und sich als Administrator zu authentifizieren.
Das folgende Skript ist Pseudocode, der auf einem Webserver ausgeführt wird. Es ist ein einfaches Beispiel für die Authentifizierung mit einem Benutzernamen und einem Passwort. Die Beispieldatenbank hat eine Tabelle usersmit den folgenden Spalten: usernameund password.
# Define POST variables
uname = request.POST['username']
passwd = request.POST['password']
# SQL query vulnerable to SQLi
sql = “SELECT id FROM users WHERE username=’” + uname + “’ AND password=’” + passwd + “’”
# Execute the SQL statement
database.execute(sql)
password' OR 1=1
SELECT id FROM users WHERE username='username' AND password='password' OR 1=1'
-- MySQL, MSSQL, Oracle, PostgreSQL, SQLite
' OR '1'='1' --
' OR '1'='1' /*
-- MySQL
' OR '1'='1' #
-- Access (using null characters)
' OR '1'='1' %00
' OR '1'='1' %16
Organisationen können die folgenden Richtlinien anwenden, um sich vor SQL-Injection-Angriffen zu schützen.
- Vertrauen Sie niemals Benutzereingaben. Sie sollten immer bereinigt werden, bevor sie in dynamischen SQL-Anweisungen verwendet werden.
Gespeicherte Prozeduren – Ermöglicht es Ihnen, SQL-Anweisungen zu kapseln und alle Eingaben als Parameter zu behandeln. - Vorbereitete Anweisungen – Vorbereitete Anweisungen, die funktionieren, indem sie zuerst eine SQL-Anweisung erstellen und dann die übermittelten Benutzerdaten als Parameter verarbeiten. Dies wirkt sich nicht auf die Syntax von SQL-Anweisungen aus.
Reguläre Ausdrücke – können verwendet werden, um potenziell schädlichen Code zu erkennen und ihn zu entfernen, bevor eine SQL-Anweisung ausgeführt wird. - Benutzerberechtigungen für die Datenbankverbindung – Dem Konto, das zum Herstellen einer Verbindung mit der Datenbank verwendet wird, sollten nur die erforderlichen Berechtigungen erteilt werden. Dadurch wird die Leistung von SQL-Anweisungen auf dem Server verringert.
- Fehlermeldungen – Diese geben keine vertraulichen Informationen oder den genauen Ort des Fehlers preis. „Leider ist ein technischer Fehler aufgetreten. Ich habe das technische Team kontaktiert. Versuchen Sie es später erneut“, anstatt die SQL-Anweisung anzuzeigen, die den Fehler verursacht hat.
Genau das macht eine Web Application Firewall (WAF). Analysieren Sie alle Benutzereingaben in Ihre Webanwendung auf Übereinstimmungen mit verdächtigem Code.
Wir hoffen, Sie haben den Vergleich verstanden und sind mit den Konzepten klar.
Hinterlasse einen Kommentar und teile deine Gedanken !!
Autor:
Akash Shekhavat, Madhuri Shelke, Chetan Shinde, Swarali Sole
Verweise:
https://learn.microsoft.com/en-us/sql/relational-databases/security/sql-injection?view=sql-server-ver16
https://systemweakness.com/sql-injection-attacks-53e942aae1f8
https://qawerk.com/blog/what-is-sql-injection/
https://brightsec.com/blog/sql-injection-attack/

![Was ist überhaupt eine verknüpfte Liste? [Teil 1]](https://post.nghiatu.com/assets/images/m/max/724/1*Xokk6XOjWyIGCBujkJsCzQ.jpeg)



































