Skip to main content

Testen auf Sicherheitsanfälligkeiten in SQL-Injection

Superbike Vergleichstest 2018 - MOTORRAD und PS testen auf der Rennstrecke | ENGL Subs (Juni 2025)

Superbike Vergleichstest 2018 - MOTORRAD und PS testen auf der Rennstrecke | ENGL Subs (Juni 2025)
Anonim

SQL-Injection-Angriffe stellen ein enormes Risiko für Webanwendungen dar, die von einem Datenbank-Backend abhängen, um dynamische Inhalte zu generieren. Bei dieser Art von Angriff manipulieren Hacker eine Webanwendung, um ihre eigenen SQL-Befehle in die von der Datenbank ausgegebenen Befehle einzufügen. Ein Beispiel finden Sie im Artikel SQL Injection-Angriffe auf Datenbanken. In diesem Artikel betrachten wir verschiedene Möglichkeiten, wie Sie Ihre Webanwendungen testen können, um festzustellen, ob sie für SQL Injection-Angriffe anfällig sind.

Automatisiertes SQL-Injection-Scanning

Eine Möglichkeit ist die Verwendung eines automatisierten Scanners für Webanwendungs-Schwachstellen, wie beispielsweise HP WebInspect, IBM AppScan oder Cenzic's Hailstorm. Alle diese Tools bieten einfache und automatisierte Methoden zur Analyse Ihrer Webanwendungen auf mögliche SQL Injection-Schwachstellen. Sie sind jedoch recht teuer und kosten bis zu 25.000 US-Dollar pro Sitzplatz.

Manuelle SQL-Injektionstests

Was ist ein schlechter Anwendungsentwickler? Sie können einige grundlegende Tests durchführen, um Ihre Webanwendungen auf Schwachstellen in Bezug auf SQL Injection zu überprüfen, indem Sie lediglich einen Webbrowser verwenden. Zunächst ein Wort der Vorsicht: Bei den von uns beschriebenen Tests werden nur grundlegende SQL-Injektionsfehler gesucht. Sie erkennen keine fortgeschrittenen Techniken und sind etwas mühsam zu bedienen. Wenn Sie es sich leisten können, entscheiden Sie sich für einen automatisierten Scanner. Wenn Sie mit diesem Preis jedoch nicht fertig werden können, ist das manuelle Testen ein guter erster Schritt.Der einfachste Weg, um zu beurteilen, ob eine Anwendung anfällig ist, besteht im Experimentieren mit harmlosen Injektionsangriffen, die Ihrer Datenbank keinen Schaden zufügen, wenn sie erfolgreich sind. Sie erhalten jedoch den Nachweis, dass Sie ein Problem beheben müssen. Angenommen, Sie hatten eine einfache Webanwendung, die eine Person in einer Datenbank nachschlägt und als Ergebnis Kontaktinformationen bereitstellt. Diese Seite verwendet möglicherweise das folgende URL-Format:

http://myfakewebsite.com/directory.asp?lastname=chapple&firstname=mike

Wir können davon ausgehen, dass diese Seite eine Datenbanksuche durchführt, wobei eine Abfrage ähnlich der folgenden verwendet wird:

WÄHLEN Sie das Telefon aus

FROM-Verzeichnis

WHERE lastname = 'chapple' und firstname = 'mike'

Lass uns ein bisschen damit experimentieren. Mit unserer obigen Annahme können wir eine einfache Änderung an der URL vornehmen, die auf SQL-Injection-Angriffe getestet wird:

http://myfakewebsite.com/directory.asp?lastname=chapple&firstname=mike'+AND+(select+count(*)+from+fake)+%3e0+OR+'1%5d1

Wenn die Webanwendung nicht ordnungsgemäß gegen die SQL-Injection geschützt wurde, fügt sie diesen gefälschten Vornamen einfach in die SQL-Anweisung ein, die sie für die Datenbank ausführt, und führt dazu:

WÄHLEN Sie das Telefon aus

FROM-Verzeichnis

WHERE lastname = 'chapple' und firstname = 'mike'

AND (Anzahl (*) von Fälschung auswählen)> 0

ODER '1' = '1'

Sie werden feststellen, dass die obige Syntax ein wenig anders ist als in der ursprünglichen URL. Wir haben uns die Freiheit genommen, die URL-kodierte Variable für ihre ASCII-Äquivalente zu konvertieren, um die Einhaltung des Beispiels zu erleichtern. Zum Beispiel ist% 3d die URL-Kodierung für das Zeichen '='. Wir haben auch einige Zeilenumbrüche für ähnliche Zwecke hinzugefügt.

Auswertung der Ergebnisse

Der Test wird ausgeführt, wenn Sie versuchen, die Webseite mit der oben aufgelisteten URL zu laden. Wenn sich die Webanwendung gut verhält, werden die einzelnen Anführungszeichen aus der Eingabe entfernt, bevor die Abfrage an die Datenbank übergeben wird. Dies führt einfach zu einer seltsamen Suche nach jemandem mit einem Vornamen, der eine Reihe von SQL enthält. In der Anwendung wird eine Fehlermeldung ähnlich der folgenden angezeigt:

Fehler: Es wurde kein Benutzer mit dem Namen Mike + AND + gefunden (wählen Sie + count (*) + from + fake) +% 3e0 + OR + 1% 3d1

Chapple!

Wenn die Anwendung jedoch anfällig für die SQL-Injection ist, wird sie die Anweisung direkt an die Datenbank übergeben, was zu einer von zwei Möglichkeiten führt. Wenn auf Ihrem Server detaillierte Fehlermeldungen aktiviert sind (was Sie nicht tun sollten), wird Folgendes angezeigt:

Microsoft OLE DB-Provider für ODBC-Treiberfehler "80040e37"

Microsoft ODBC SQL Server-Treiber SQL Server Ungültiger Objektname "Fake".

/directory.asp Zeile 13

Wenn auf dem Webserver keine detaillierten Fehlermeldungen angezeigt werden, erhalten Sie einen allgemeineren Fehler, z.

interner ServerfehlerDer Server hat einen internen Fehler oder eine falsche Konfiguration festgestellt und konnte Ihre Anfrage nicht abschließen.

Wenden Sie sich an den Serveradministrator, um den Zeitpunkt des Auftretens des Fehlers und alle mögliche Maßnahmen, die den Fehler verursacht haben, zu informieren.

Weitere Informationen zu diesem Fehler sind möglicherweise im Serverfehlerprotokoll verfügbar.

Wenn Sie einen der beiden oben genannten Fehler erhalten, ist Ihre Anwendung für einen SQL-Injektionsangriff anfällig. Einige Schritte, die Sie ergreifen können, um Ihre Anwendungen vor SQL Injection-Angriffen zu schützen, sind:

  • Implementieren Sie die Parameterüberprüfung für alle Anwendungen. Wenn Sie beispielsweise jemanden zur Eingabe einer Kundennummer auffordern, stellen Sie sicher, dass die Eingabe numerisch ist, bevor Sie die Abfrage ausführen.
  • Begrenzen Sie die Berechtigungen des Kontos, das SQL-Abfragen ausführt. Es gilt die Regel des geringsten Privilegs. Wenn das zur Ausführung der Abfrage verwendete Konto keine Berechtigung zum Ausführen der Abfrage hat, schlägt es fehl.
  • Verwenden Sie gespeicherte Prozeduren (oder ähnliche Techniken), um zu verhindern, dass Benutzer direkt mit SQL-Code interagieren.