Sicherheitsluecke beim Login
Bastian Schnitzler
- php
Hallo!
Gestern hat jemand meine Homepage gehackt, will mir aber nicht sagen, wodran das gelegen hat. Da mir das wichtig ist *gg*, poste ich mal hier den groben Aufbau, wisst ihr, wie man sich da reinhacken kann? Register Globals ist off.
function login($area)
{
global $loginon, $boardon, $boardusercolumn, $boardpwdcolumn, $boardtableteam, $praefix, $tableteam, $tablegroups, $boardpraefix;
if($loginon)
{
$Username = $_SESSION['Username'];
$Passwort = $_SESSION['Passwort'];
$results = sqlquery("SELECT wysiwyg, email, ${praefix}${tablegroups}.*, ${praefix}${tableteam}.ID as memberid from ${praefix}${tableteam} LEFT JOIN ${praefix}${tablegroups} ON ${praefix}${tableteam}.groupid = ${praefix}${tablegroups}.ID WHERE ${praefix}${tablegroups}.${area} != 0 AND username = '$Username' AND password = '$Passwort' AND ${praefix}${tablegroups}.login = 1");
if(mysql_num_rows($results) == 1)
{
$areas = array();
$columns = sqlquery("SHOW COLUMNS FROM ${praefix}${tablegroups}");
while($row = mysql_fetch_assoc($columns))
$areas[] = $row['Field'];
if($row = mysql_fetch_array($results))
{
$_SESSION['email'] = $row['email'];
$_SESSION['memberid'] = $row['memberid'];
$_SESSION['userid'] = $row['memberid'];
$_SESSION['wysiwyg'] = $row['wysiwyg'];
for($i = 2; $i < sizeof($areas); $i++)
{
$_SESSION[$areas[$i]] = $row[$areas[$i]];
}
}
sqlquery("UPDATE ${praefix}${tableteam} SET lastlogin = NOW() WHERE ID = ".$_SESSION['userid']);
include($folder_templates."loginmenu.php");
return 1;
} else {
echo "<h1>Achtung!</h1><p>Dieser Bereich ist für Sie gesperrt.</p>";
return 0;
}
} else {
echo "<h1>Achtung!</h1><p>Dieser Bereich ist für Sie gesperrt.</p>";
return 0;
}
}
Die Username und Passwortdaten wurden vorher aus einem POST-Formular in die SESSION eingelesen, wobei das Passwort schon mit md5 verschluesselt ist.
Der Parameter der login funktion gibt einen bestimmten bereich an, zb. articles. Nun werden alle Rechte aus der Tabelle tablegroups ausgelesen und ist das Recht dort vorhanden, wird 1 zurueckgegeben.
mfg,
Bastian Schnitzler
echo $begrüßung;
Gestern hat jemand meine Homepage gehackt, ...
Wenn du jetzt noch sagen würdest, was du konkret unter "gehackt" verstehst...
global $loginon, $boardon, $boardusercolumn, $boardpwdcolumn, $boardtableteam, $praefix, $tableteam, $tablegroups, $boardpraefix;
... und dann auch noch sagst, wo diese Variablen herkommen, dann könnte man vielleicht was konkretes sagen ... ansonsten nur raten.
Hast du mal probiert, was passiert, wenn du einen Usernamen mit einem ' drin eingibst?
Hast du schon mal das Kapitel Database Security gelesen?
Kennst du den Befehl mysql_real_escape_string()?
echo "$verabschiedung $name";
Hello,
ob er auch schon weiß, dass man den Code zur Not auch in eine einzige Zeile schreiben kann?
*scnr*
Harzliche Grüße aus http://www.annerschbarrich.de
Tom