it-swarm-eu.dev

Wie teste ich auf einer Site mit Eingabefeldern auf SQL-Injection-Schwachstellen?

Welche Methoden stehen zum Testen von SQL-Injection-Schwachstellen zur Verfügung?

48
John S

Es gibt verschiedene Möglichkeiten, eine Anwendung auf Schwachstellen wie SQL Injection zu testen. Die Tests gliedern sich in drei verschiedene Methoden:

Blind Injection:

MySQL-Beispiel:

http://localhost/test.php?id=sleep(30)

Wenn diese SQL-Anweisung von der Datenbank interpretiert wird, dauert das Laden der Seite 30 Sekunden.

Fehlermeldungen :

http://localhost/test.php?id='"

Wenn die Fehlerberichterstattung aktiviert ist und diese Anforderung für die SQL-Injektion anfällig ist, wird der folgende Fehler ausgegeben:

Sie haben einen Fehler in Ihrer SQL-Syntax. Überprüfen Sie das Handbuch, das Ihrer MySQL-Serverversion entspricht, auf die richtige Syntax für die Verwendung in der Nähe von "" in Zeile 5

Tautology Based Injection :

http://localhost/test.php?username=' or 1=1 /*&password=1

In diesem Fall liefert die Angabe von Tautology oder einer Aussage, die immer wahr ist, ein vorhersehbares Ergebnis. In diesem Fall würde das vorhersehbare Ergebnis darin bestehen, den Angreifer mit dem ersten Benutzer in der Datenbank anzumelden, bei dem es sich normalerweise um den Administrator handelt.

Es gibt Tools, die die Verwendung der oben genannten Methoden zum Erkennen von SQL Injection in einer Webanwendung automatisieren. Es gibt kostenlose und Open-Source-Tools wie Wapiti und Skipfish , die dies tun. Sitewatch bietet einen kostenlosen Service, der viel besser ist als diese Open Source-Tools. Ich kann das sagen, weil ich Entwickler für Sitewatch bin.

52
rook

Es ist am besten, Ihre Site nicht auf SQL-Injection zu testen. Es ist am besten, nur die mögliche SQL-Injection zu vermeiden. Bilden Sie niemals SQL-Abfragen, indem Sie die Zeichenfolgenverarbeitung selbst durchführen, wenn Benutzereingaben vorliegen. Verwenden Sie gebundene Parameter in allen Abfragen (bereinigen Sie auch alle Benutzerdaten, wenn diese auf schädliche Weise verwendet werden könnten, und begrenzen Sie Abfragen sinnvoll). Das ist die Abfrage sql_execute("select user from user_db where id="+input_id) ist unsicher (stellen Sie sich vor, es ist input_id = "1 OR 1==1 --"), Aber stored_procedure = "select user from user_db where id = ? LIMIT 1;", sql_execute_with_param(stored_procedure, input_id); ist sicher.

Dies ist natürlich nur möglich, wenn Sie versuchen, Ihre eigene Website sicher zu machen. Wenn Sie versuchen, Fehler in anderen Anwendungen zu finden, ist dies eine andere Geschichte und möglicherweise gegen die FAQ, die besagt, dass diese Site nicht für schwarze Hüte gedacht ist. Aber OWASP hat einen sehr guten Artikel zum Testen auf - SQL-Injection .

13
dr jimbob

Wenn Sie bei Null beginnen, würde ich eine der folgenden Möglichkeiten vorschlagen:

  1. Stellen Sie jemanden ein, der weiß, was er tut
  2. Verwenden Sie ein automatisiertes Tool als erste Lücke. Einige Optionen umfassen Burp Pro, ZAP und SQL Map.

Beachten Sie jedoch, dass Sie beim Senden seltsamer und potenziell gefährlicher Eingaben an eine Webanwendung eine erhebliche Wahrscheinlichkeit haben, die Integrität Ihrer Anwendung zu beeinträchtigen.

Sie können Ihre Webanwendung sofort beschädigen oder seltsame Eingaben in der Datenbank der Anwendung speichern, die später auf irgendeine Weise abgerufen und analysiert werden - und möglicherweise sogar nicht von Ihrer Anwendung.

Die allgemeine Regel für diese Art von Tests ist einfach: Sie sind erst mit dem Testen fertig, wenn Sie ein bekanntermaßen funktionsfähiges Backup wiederhergestellt haben. Sie sollten Ihre Anwendung nach automatisierten Injektionstests erst dann in einem normalen Betriebszustand betrachten, wenn Sie dies getan haben.

5
Daniel Miessler