EN

Blind SQL-Injection-Schwachstelle

In diesem Artikel:

Injection Schwachstellen ermöglichen es Angreifern, über eine böswillige Abfrage/einen böswilligen Befehl nicht vertrauenswürdige Daten in ein System oder eine Anwendung einzuschleusen. Der bösartige Code wird in der Regel verwendet, um sowohl die Clients als auch die Backend-Systeme der Anwendung zu kompromittieren. 

In diesem Artikel werden eine Blind SQL-Injection-Schwachstelle, verschiedene Arten von Angriffen und bewährte Verfahren zu deren Vermeidung erläutert.

Was ist eine SQL-Injektion?

Die SQL-Injection (SQLi)-Schwachstelle ermöglicht es Angreifern, böswillige Eingaben an eine Anwendung zu senden, indem sie Datenbankabfragen ändern. Durch SQLi-Schwachstellen, können Hacker das Backend der Anwendung mit evtl. durch schadhaft ersetzen Anweisungen manipulieren, die den Datenbankserver steuern. So können die Hacker auf den gesamten Datenbankinhalt zugreifen oder die Sicherheitsprüfungen der Anwendung mithilfe von SQL-Injection-Schwachstellen umgehen. 

Angreifer können auch gefährliche SQL-Abfragen verwenden, um entfernte Datenbankeinträge zu löschen, zu ändern oder hinzuzufügen und so die Integrität der von der anfälligen Webanwendung verarbeiteten Daten zu beeinträchtigen. 

Um einen SQL-Injection-Angriff durchzuführen, muss der Hacker die Anwendung auf Benutzereingabe-Schnittstellen scannen, die für Injektionen anfällig sind. Anschließend erstellt er mit SQL-Anweisungen eine bösartige Payload, die von der Datenbank der Anwendung ausgeführt werden soll. Neben dem Zugriff auf Datentabellen und Benutzeranmeldeinformationen können Angreifer auch bösartige SQL-Abfragen erstellen, um über den Datenbankserver auf das Betriebssystem zuzugreifen. 

SQL-Injection ist eine der ältesten, am weitesten verbreiteten und gefährlichsten Sicherheitslücken im Internet. Sie betrifft jede Anwendung oder Website, die sich auf eine relationale SQL-Datenbank wie den SQL-Server stützt. 

SQL-Injection-Angriffe können auf verschiedene Arten erfolgen. Dazu gehören:

  • In-Band-SQLi-Angriffe
  • Out-of-band SQLi-Angriffe
  • Blinde SQLi-Angriffe
Blind SQL Injection Vulnerability - Crashtest Security

Blind SQLi erklärt

Hierbei handelt es sich um eine Art von SQLi-Injection-Angriff, bei dem der Angreifer böswillige Abfragen an den Server sendet und dann dessen Antwort verwendet, um Rückschlüsse auf die Konfiguration der Anwendung zu ziehen. Blinde SQLi-Angriffe werden hauptsächlich auf Websites durchgeführt, die für SQL-Injection anfällig sind, und zeigen für jede Fehlermeldung allgemeine Informationen an. Diese Art von Angriff wird als Blind/Inferential SQLi bezeichnet. Der Server gibt die abgefragten Daten nicht auf der Weboberfläche des Angreifers aus, so dass dieser eine Reihe von Folgeabfragen einsetzt, um auf seine Antworten und Verhaltensmuster zu schließen. Da die HTTP-Antwort des Datenbankservers in der Regel keine Details zu Datenbankfehlern oder relevanten SQL-Abfrageergebnissen enthält, sind blinde SQLi-Angriffe zwar schwierig, aber möglich.

Blinde SQLi-Angriffe werden hauptsächlich in folgende Kategorien eingeteilt:

1. Boolesche/inhaltliche Blind-SQL-Injection-Angriffe

Bei dieser Art von Blind SQLi-Angriffen wird der Datenbankserver auf Schwachstellen getestet, indem Abfragen erstellt werden, die der Datenbank objektive Fragen vom Typ TRUE oder FALSE stellen. Ein Angreifer prüft dann, ob jede Abfrage die Informationen in der HTTP-Antwort verändert, um Rückschlüsse auf das Datenbankschema und die Konfiguration des Servers zu ziehen. 

2. Zeitbasierte SQL-Injection-Angriffe

Bei einem zeitbasierten Angriff erstellen die Hacker einen SQL-Befehl, der den Server zwingt, eine bestimmte Zeit zu warten, bevor er antwortet. Sie senden diese Datenbankabfrage an den Server und beobachten dann, wie lange es dauert, bis dieser antwortet. Je nachdem, ob die Antwort sofort oder erst nach einer gewissen Zeit erfolgt, stellt der Hacker fest, ob es sich bei den böswilligen Abfragen um TRUE- oder FALSE-Anweisungen handelt, ohne sich auf die vom Server gesendeten Daten zu verlassen. Diese Art des Angriffs ist sehr zeitaufwändig, da jeder Datenbankeintrag Zeichen für Zeichen aufgezählt werden muss.

SQL Injection Prävention Guide

Leitfaden

SQL Injection Präventionsguide

Erfahren Sie, wie Sie SQL Injektionen erkennen und verhindern und so Ihre Web-Assets schützen können.

Leitfaden herunterladen

Wie verhindert man Blind Injection Attacks und wie wichtig ist das für die Sicherheit?

Jede Anwendung mit SQL-Injection-Schwachstellen ist anfällig für Blind-SQL-Injection-Angriffe. In diesem Abschnitt wird beschrieben, wie man sich vor Blind SQL-Injection-Angriffen in modernen Websites und Webanwendungen schützen kann.

Vermeidung von Blind-SQL Injection – Best Practices

Parametrisieren Sie SQL-Anweisungen

Eine parametrisierte Abfrage ist eine vorgefertigte SQL-Anweisung, bei der der Benutzer nur Werte/Parameter in die Anweisung eingeben muss, damit die Datenbank sie ausführt. Entwickler sollten alle Benutzereingaben für dynamische Abfragen parametrisieren, um eine strenge und zuverlässige Kontrolle darüber zu ermöglichen, welche Abfragen die Datenbank ausführen soll. 

Neben der Verhinderung von Injektionsangriffen ermöglichen parametrisierte Abfragen (Prepared Statements) der Datenbank, dieselbe Anweisung mehrfach auszuführen, ohne sie erneut kompilieren, parsen oder optimieren zu müssen. Dies verbessert die Antwortzeiten des Datenbankservers und damit die Effizienz der Anwendung. 

Verwenden Sie sichere Programmierpraktiken

Nutzen Sie die eingebauten Mechanismen Ihrer Webplattform zur Verhinderung von Injektionen, um Ihre Anwendung vor Blind SQLi-Angriffen zu schützen. Das OWASP SQL Injection Cheat Sheet enthält mehrere Präventions- und Abhilfemaßnahmen für Blind SQLi-Fehler. Entwickler sollten eine ordnungsgemäße Eingabevalidierung an den Stellen der Abfrageeingabe sicherstellen. 

Zusätzlich können Entwickler in Datenbanksystemen, die gespeicherte Prozeduren unterstützen, diese verwenden, um erwartete Abfragen zu definieren und so bösartige, vom Benutzer kontrollierbare Eingaben zu vermeiden. Das Filtern und Escapen von Sonderzeichen für alle Datenbankeingaben stellt sicher, dass der Server nur zulässige Abfragen ausführt. Eine oft übersehene Best Practice ist die Vermeidung allgemeiner Fehlermeldungen, die dem Hacker Informationen liefern könnten. 

Verwenden Sie einen automatischen Schwachstellenscanner.

Ein automatischer Schwachstellen-Scanner hilft funktionsübergreifenden Teams, Injektionslücken innerhalb einer Webanwendung zu identifizieren, bevor Hacker sie durch kontinuierliche, autonome Tests ausnutzen können. Die Crashtest Security Suite enthält einen Schwachstellen-Scanner, der ein- und mehrseitige Webanwendungen und APIs scannt, um tote Winkel in der Sicherheit zu beseitigen, ohne dass es zu falschen Positiv- oder Negativmeldungen kommt. Der Scanner vergleicht die Sicherheitslage der Website kontinuierlich mit den OWASP Top 10 und ermöglicht es den Sicherheitsteams, Injektionsschwachstellen zu erkennen und zu beheben, sobald sie während des SDLC auftauchen.

Warum ist es wichtig für Ihr Unternehmen?

Es ist von entscheidender Bedeutung, Blind SQLi-Schwachstellen zu verhindern, da sie Angreifern Zugriff auf die Datenbank einer anfälligen Anwendung gewähren, was erhebliche Folgen haben kann. Dazu gehören:

  • Diebstahl von sensiblen Kundendaten wie Kreditkartendaten und anderen personenbezogenen Informationen (PII)
  • Ausführen von Administration Befehlen durch Datenbankmanipulation
  • Nichtverfügbarkeit von Anwendungen aufgrund geänderter oder fehlender Datenbankeinträge
  • Datenbank-Fingerprinting, das es dem Angreifer ermöglicht, die Empfänger von Daten zu identifizieren

Blind SQL Injection Beispiel

Einige gängige Beispiele für Blind SQLi-Angriffe sind:

Aufzählung von Passwörtern mit zeitbasierter Blind SQL Injection

Zeitbasierte Angriffe sind stark von der Art der Datenbank abhängig, auf die zugegriffen wird. Bei solchen Angriffen können Angreifer eine Anweisung erstellen, die Benutzerpasswörter mit einer ähnlichen Logik aufzählt:

Wenn der erste Buchstabe ein „A“ ist, warte 10 Sekunden

Wenn der erste Buchstabe ein „B“ ist, warte 15 Sekunden… und so weiter.

Der Angreifer kann eine SQL-Abfrage wie die folgende verwenden:

SELECT IF(expression, true, false)

Kombiniert mit einer zeitraubenden Operation wie BENCHMARK(), die die Antwort der Datenbank verzögert, wenn der Ausdruck wahr ist. Der Hacker stellt sicher, dass die BENCHMARK-Operation genügend Funktionswiederholungen angibt, um eine spürbare Verzögerung der Antwort des Servers zu erreichen. Eine Verzögerung von 5 Sekunden kann erreicht werden, indem die Funktion wie gezeigt 5000000 Mal ausgeführt wird:

BENCHMARK(5000000,ENCODE('MSG','by 5 seconds'))

Der Angreifer kombiniert dann beide Abfragen:

1 UNION SELECT IF(SUBSTRING(user_password,1,1) = CHAR(50),BENCHMARK(5000000,ENCODE('MSG','by 5 seconds')),null) FROM users WHERE user_id = 1;

Wenn es eine Verzögerung bei der Antwortzeit der Datenbank gibt, dann ist das erste Zeichen des Passworts von Benutzer-id1 eine 2:

(CHAR(50) == '2')

Angreifer können diese Methode für den Rest der Zeichen verwenden, um alle Passwörter in einer Datenbank aufzuzählen und ihre Konten zu kompromittieren.

Inhaltsbasierte Angriffe

Hacker verwenden in der Regel boolesche Angriffe, um SQLi-Schwachstellen in einer Anwendung aufzudecken. Angenommen, eine E-Commerce-Website zeigt Artikel zum Verkauf an, die von einem Datenbankserver mit der URL:

http://www.darwin.com/item.php?id=05

Die für den Zugriff auf die Ressourcen- und Spaltennamen verwendete SQL-Abfrage lautet:

SELECT columnName, columnName2 FROM table-name WHERE id = 05

Ein Angreifer kann die folgende bösartige Abfrage eingeben, um die SQLi-Schwachstelle auszunutzen:

http://www.darwin.com/item.php?id=05 und 1=2

Dadurch wird die Abfrage so geändert, dass sie wie folgt aussieht:

SELECT columnName2 FROM tableName WHERE ID = 14 and 1=2SELECT name, description, price FROM StoreTable WHERE ID = 05 and 1=2

Wenn dies eine FALSE-Antwort zurückgibt und die Liste keine Einträge anzeigt, ändert der Angreifer der Payload zu:

http://www.darwin.com/item.php?id=05 und 1=1

In diesem Fall sieht die SQL-Abfrage wie folgt aus:

SELECT columnName, columnName2 FROM tableName WHERE ID = 05 and 1=1

Da die Abfrage den Wert TRUE zurückgibt, zeigt die Datenbank in ihrer Antwort die Details von Artikel 05 an.

Lesen Sie unseren Leitfaden zur Vermeidung von SQLi-Schwachstellen

FAQs

Die Unterschiede: Blind SQL-Injektion vs. SQL-Injektion

SQL-Injection-Angriffe sind breit gefächert und können in Blind-, In-Band- und Out-of-Band-SQLi-Angriffe unterteilt werden. Bei Blind-SQLi-Angriffen hat der Hacker keinen Zugriff auf die Daten, die in-band verfügbar sind, da die Daten nicht von der Datenbank an den Angreifer gesendet werden. Blind-SQLi-Angriffe sind in der Regel langsamer als allgemeine SQL-Injection-Angriffe, da der Angriff auf den Verhaltens- und Antwortmustern des Datenbankservers beruht.

Ist der UNION-Angriff ein Blind-SQL-Angriff?

Hacker können den UNION-Angriff nutzen, um die Ergebnisse einer ursprünglichen Abfrage zu erweitern und Informationen aus einem Datenbankfehler zu extrahieren. Bei blinden SQL-Angriffen hingegen verwenden Hacker in der Regel den UNION-Operator, um bösartige Nutzdaten mit legitimen Abfragen zu kombinieren, die die gleiche Struktur aufweisen.

Erhalten Sie jetzt kostenlos einen schnellen Sicherheitsbericht für Ihre Website

Wir analysieren derzeit http://example.com
Wir scannen derzeit http://example.com
Status des Scans: In Bearbeitung
Scan target: http://example.com/laskdlaksd/12lklkasldkasada.a
Datum: 27/05/2022
Crashtest Security Suite prüft auf:
Information disclosure Known vulnerabilities SSL misconfiguration Open ports
Scanauftrag ausfüllen
Bitte geben Sie Ihre Daten ein, um die schnelle Sicherheitsüberprüfung zu erhalten.
Ein Sicherheitsspezialist analysiert gerade Ihren Scan-Bericht.
Bitte geben Sie Ihre Telefon-/Handynummer an, damit wir Ihre Identität überprüfen können:
Ihren Bericht anfordern
Vielen Dank.
Wir haben Ihren Antrag erhalten.
Sobald Ihr Sicherheitsaudit fertig ist, werden wir Sie benachrichtigen.