13.07.2015 Aufrufe

Verteidigung gegen SQL-Injection-Angriffe - ETH Zürich

Verteidigung gegen SQL-Injection-Angriffe - ETH Zürich

Verteidigung gegen SQL-Injection-Angriffe - ETH Zürich

MEHR ANZEIGEN
WENIGER ANZEIGEN

Erfolgreiche ePaper selbst erstellen

Machen Sie aus Ihren PDF Publikationen ein blätterbares Flipbook mit unserer einzigartigen Google optimierten e-Paper Software.

Das Feld für das Passwort kann dabei einen beliebigen Wert haben, inklusive einen Leerstring.Mit der Eingabe von ’ or für den Benutzernamen wird erreicht, dass das <strong>SQL</strong>-Statement syntaktisch unkorrektwird. Es sieht dann folgendermassen aus:SELECT * FROM usersWHERE username = ’’ or’AND password = ’’Es ist klar ersichtlich, dass dieses Statement syntaktisch fehlerhaft ist. Dies wird von Tomcat resp. H<strong>SQL</strong>DBmit einer entsprechenden Fehlermeldung quittiert:org.apache.jasper.JasperException:SELECT * FROM usersWHERE username = ’’ or’AND password = ’’: Unexpected end of command in statement [SELECT * FROM usersWHERE username = ’’ or’AND password = ’’]Das ganze <strong>SQL</strong>-Statement ist widergegeben, und der Angreifer kann es ausführlich analysieren. Er kann nundie am Anfang dieses Kapitels aufgeführten <strong>Angriffe</strong> durchführen.4.2 Einloggen als willkürlicher BenutzerDer einfachste Fall ist, als willkürlicher Benutzer einzuloggen. Dazu kann ein Angreifer für die Felder Usernameund Password die folgenden Werte eingeben:Username: (leer)Password: ’ or ’’ = ’Daraus resultiert das folgende <strong>SQL</strong>-Statement:SELECT * FROM usersWHERE username = ’’AND password = ’’ or ’’ = ’’Um die Bindungen von AND und OR besser zu erkennen (AND bindet stärker als OR), sind im folgenden <strong>SQL</strong>-Statement Klammern gesetzt:SELECT * FROM usersWHERE (username = ’’AND password = ’’) or (’’ = ’’)Massgebend für die Erfüllung der Bedingungen ist der letzte Ausdruck ’’ = ’’. Dadurch wird erreicht, dassdie Bedingungen für sämtliche Datensätze erfüllt sind, weil die Felder username und password keine Rolle mehrspielen. Nach der Abfrage überprüft die Applikation, ob mindestens ein Datensatz zurückgeliefert wurde. Fallsdies nicht der Fall ist, existiert der Benutzer nicht und erhält keinen Zugang.Falls mindestens ein Datensatz zurückgeliefert wurde, verwendet die Applikation den ersten dieser Datensätze.Man ist dann als der entsprechende Benutzer eingeloggt. Dieser kann möglicherweise Administratorrechtebesitzen, denn die Benutzer mit Administratorrechten sind in der gleichen Tabelle gespeichert wie dienormalen Benutzer, und die Datensätze werden in unbestimmter Reihenfolge zurückgeliefert.16

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!