Sicherheitscheck-Login

punktespiel.de

PHP-Programmierer
13 September 2007
93
5
Könnte mal jemand meinen Login zu übergehen, probieren, einfach mit username und passwort. Anscheinend hab ich da irgendwas übersehen.

Es gibts da ja die möglichkeit die SQL-Querys mit "diversen Eingaben" zu überlisten, jedoch hatte ich da keinen Erfolg.

Bitte keine Klammlose klauen wenn ihr erfolgt habt, werde euch dann schon belohnen.

Zum testen könnt ihr "homer" oder "Firefox" probieren, des sind 2 freunde von mir.
 
PHP:
        $tempUser = $_POST["user"];
        $tempPass = $_POST["pass"];

        $result = mysql_query("SELECT * FROM users WHERE username = '$tempUser'");

        $found = false;
        while ($row = mysql_fetch_array($result)) {
            $found = true;
if ($row["password"] == md5($tempPass)) {
// Unwichtig (Session zuweisungen) 
                // Cookie setzen start
                setcookie("pktspieluid", $row["id"], Time() + 2419200);
                setcookie("pktspielident", md5(md5($row["username"]) . md5($row["password"])), Time() + 2419200);
                // Cookie setzen ende
                $login = true;
                mysql_query("UPDATE users SET time = '$newTime', ip = '$aktIP' WHERE username = '$tempUser'");
            } else {
                $temp_meldung = 'Falscher Benutzername oder Passwort!';
                $login = false;
            }
        }
        if (!$found) {
            $temp_meldung = 'Falscher Benutzername oder Passwort!';
            $login = false;
        }
    } else {
        // Kein Benutzername oder Passwort eingegeben also ein Gast!
        $login = false;
        if ($_GET["refid"] != "") {
            sess('ref', $_GET["refid"]);
        }
        // Einträge die älter sind als 5 Minuten löschen
    }

dass ist jetzt nur der login selbst, dass cookie wird erst dann abgefragt wenn keine session-daten mehr vorhanden sind.
 
  • SQL-Injection
Code:
SELECT * FROM users WHERE username = '[COLOR=Red]$tempUser[/COLOR]'
$tempUser kommt direkt vom (bösen) Clienten.
Code:
SELECT * FROM users WHERE username = '[B][COLOR=Red]admin' OR 'foo'='foo[/COLOR][/B]'
Klar, was der Fehler is ? Mit diesem Beispiel kann man nicht wirklich was anstellen, aber die Lücke ist da.

Gilt für die anderen Querys entsprechend. Im FAQ-Forum findest du ne Lösung, wie du diese Lücke einfach schließen kannst.​
  • SELECT * is böse. Selektiere nur das, was du brauchst.