Hier wird beschrieben, wie man mit einer bestimmten Eingabe, sich als Admin einloggen kann.
Dies dient als Lernmittel. Suiss-IT übernimmt keine Haftung für Schäden, welche durch diese Informationen entstanden sind. Das ausführen eines Auth. Bypass an fremden Seiten, welche Sie keine Berechtigung haben, ist nicht erlaubt und kann bis zu einer Strafanzeige vom Betreiber der betroffenen Webseite führen.
Nun wie kann es passieren, dass man einen Login Bypassen kann? Schauen wir uns das mal in einem Beispiel Source an:
1 2 3 4 |
<?php $sql = "SELECT * FROM users WHERE username='" . $_POST['username'] . "' AND password='" . $POST_['password'] . "'"; response = mysql_query($sql); ?> |
Nun wie kann es passieren, dass man einen Login Bypassen kann? Schauen wir uns das mal in einem Beispiel Source an:
Sollte soweit verwundbar sein. Doch warum? Ganz einfach, da nun ein MySQL Query durchgefuehrt wird ohne die User eingaben zu pruefen. Das heißt ohne zu testen ob der User das Query manipulieren will. Dieser Fehler kann schnell mal passieren. Unser MySQL-Query sieht im Moment ja so aus:
Was kann nun passieren bzw. wie kann man dies nun Ausnutzen/Exploiten?
So tragen wir mal als Usernamen einen Nicknamen ein der dort existiert,oft isses admin
Als Passwort tragen wir nun ‘ OR ‘a’ = ‘a ein.
Wie sieht nun unser MySQL Query aus?
‘a’ = ‘a ist ergibt den Wert True, also Richtig/Wahr. wuerde auch mit 1 = 1 gehen oder ‘abc’ = ‘abc gehen. Muss eben etwas gleichsetzen um den Wert True zu geben.
Wie sieht das nun genau aus?
Username=’admin’ UND Passwort=” OR ‘a’ = ‘a’
-> Username admin und Passwort TRUE
Wie sieht das nun in unserem MySQL Query aus?
Was passiert nun also?
Vielen Dank fuer Ihre Anmeldung, admin. Wenn sie nicht weitergeleitet werden......
Das heißt wir haben uns eingeloggt ohne auch nur ein Passwort eingeben zu muessen und zwar ganz einfach in dem wir das Query so manipuliert haben das es uns als Admin einloggt. Vorraussetzung ist, dass auf dem Server ist magic_quotes off ist, d.h. Das ein Hochkomma nicht “gebackslasht” wird. Waeren magic_quotes on, dann waere das Hochkomma “gebackslasht” und das wuerde in etwa so aussehen /’
Das ist nur einige Moeglichkeit wie man das Bypassen kann.
Doch wie verhindert man sowas?
Dafuer gibts ein paar Moeglichkeiten, u.a. magic_quotes aufm Server anzustellen oder das Script so zu umschreiben, dass es escaped wird mithilfe von mysql_real_escape_string.
Beispiel:
1 2 3 4 5 6 |
<?php $username = mysql_real_escape_string($_POST["username"]); $password = mysql_real_escape_string($_POST["password"]); $sql = "SELECT * FROM users WHERE username='" . $username . "' AND password='" . $password . "'"; $response = mysql_query($sql); ?> |
Dieses Beispiel sollte denk ich, gegen Login / Auth Bypass schuetzen. Gibt noch andere Moeglichkeiten, aber ich denk das reicht erstmal.
Wer mehr ueber die Schutzweise von mysql_real_escape_string wissen moechte, kann sich die Funktion hier genauer anschauen, auch ein paar Beispiele sind dort: http://de3.php.net/mysql_real_escape_string
Von J0hnX3r