Ich hatte dem Admin schon geschrieben incl. 2 Fixxes.
Wollte das eigentlich auch schon veröffentlichen, hab es aber gelassen.
Aber wenn das so ist:
Wie ihr diese Lücken ausnutzen könntet, schreibe ich vielleich irgendwann mal hier rein, wenn das CMS gefixxt wurde. Bitte benutzt diese Bugfixes, damit euer System sicher wird und gebt mir - falls möglich - die Kontaktdaten vom dem Ersteller des CMS, damit ich diesen über die Sicherheitslücken aufklären kann.
Als erstes die connexion.php:
- Einloggen als unregistrierter oder unakzeptierter User möglich (Auch als Admin einloggen möglich)
- Einloggen als vorhandener Admin möglich
- ...
Der Scriptersteller hat anscheinend schon mitgedacht - hat letzendes aber schlicht und einfach die falschen Variablen benutzt. Wir ändern das Script daher wie folgt ab:
PHP Code:
if((isset($_POST['login']))&&(isset($_POST['password']))){
$pseudo=htmlentities($_POST['login']);
$passe=htmlentities($_POST['password']);
}
//au minimum
$login=$_POST['login'];
$password2=$_POST['password'];
$password = md5($password2);
// On va chercher le mot de passe afférent à ce login
$req = mysql_query("SELECT id, username, password, email, rank FROM membres WHERE username='$login'") or die (mysql_error());
$data = mysql_fetch_assoc($req);
wird zu:
PHP Code:
if((isset($_POST['login']))&&(isset($_POST['password']))){
$pseudo=mysql_real_escape_string($_POST['login']);
$passe=mysql_real_escape_string($_POST['password']);
}
$password = md5($passe);
// On va chercher le mot de passe afférent à ce login
$req = mysql_query("SELECT id, username, password, email, rank FROM membres WHERE username='" . $pseudo ."'") or die (mysql_error());
$data = mysql_fetch_assoc($req);
Somit haben wir das Login gefixxt. Wer sich das Script genauer anschaut, wird wohl wissen, wo genau der Fehler lag.
(Wichtig: Diese Datei gibt es sowohl in dem Hauptverzeichnis, als auch im Admin-Verzeichnis!!!!)
Kommen wir zur 2ten und 3ten Lücke:
Diese liegen in der "membres_email2" sowie "membres_pass2" Datei.
- Umändern beliebiger Daten eines beliebigen Users
membres_email2.php:
Einfach öffnen und folgendes abändern:
PHP Code:
$sql="UPDATE membres SET email='$email' WHERE username='$pseudo'";
zu
PHP Code:
$sql="UPDATE membres SET email='" . mysql_real_escape_string($email)."' WHERE username='" . mysql_real_escape_string($pseudo)."'";
membres_pass2.php:
PHP Code:
if((isset($_POST['login']))&&(isset($_POST['password']))){
$pseudo=htmlentities($_POST['login']);
$passe=htmlentities($_POST['password']);
}
//au minimum
$login=$_POST['pseudo'];
$password2=$_POST['pass1'];
$password = md5($password2);
$newpass = md5($_POST['pass2']);
// On va chercher le mot de passe afférent à ce login
$req = mysql_query("SELECT id, username, password, email, rank FROM membres WHERE username='$login'") or die (mysql_error());
$data = mysql_fetch_assoc($req);
zu...
PHP Code:
if((isset($_POST['login']))&&(isset($_POST['password']))){
$pseudo=mysql_real_escape_string($_POST['login']);
$passe=mysql_real_escape_string($_POST['password']);
}
$password = md5($passe);
// On va chercher le mot de passe afférent à ce login
$req = mysql_query("SELECT id, username, password, email, rank FROM membres WHERE username='" . $pseudo ."'") or die (mysql_error());
$data = mysql_fetch_assoc($req);
und
PHP Code:
mysql_query("UPDATE membres SET password='$newpass' WHERE username='$login'") or die (mysql_error());
zu
PHP Code:
mysql_query("UPDATE membres SET password='" . mysql_real_escape_string($newpass)."' WHERE username='".mysql_real_escape_string($login)."'") or die (mysql_error());
Danke für euer Verständnis
Ich hatte dem Admin schon geschrieben incl. 2 Fixxes.
Wollte das eigentlich auch schon veröffentlichen, hab es aber gelassen.
Aber wenn das so ist:
Wie ihr diese Lücken ausnutzen könntet, schreibe ich vielleich irgendwann mal hier rein, wenn das CMS gefixxt wurde. Bitte benutzt diese Bugfixes, damit euer System sicher wird und gebt mir - falls möglich - die Kontaktdaten vom dem Ersteller des CMS, damit ich diesen über die Sicherheitslücken aufklären kann.
Als erstes die connexion.php:
- Einloggen als unregistrierter oder unakzeptierter User möglich (Auch als Admin einloggen möglich)
- Einloggen als vorhandener Admin möglich
- ...
Der Scriptersteller hat anscheinend schon mitgedacht - hat letzendes aber schlicht und einfach die falschen Variablen benutzt. Wir ändern das Script daher wie folgt ab:
PHP Code:
if((isset($_POST['login']))&&(isset($_POST['password']))){
$pseudo=htmlentities($_POST['login']);
$passe=htmlentities($_POST['password']);
}
//au minimum
$login=$_POST['login'];
$password2=$_POST['password'];
$password = md5($password2);
// On va chercher le mot de passe afférent à ce login
$req = mysql_query("SELECT id, username, password, email, rank FROM membres WHERE username='$login'") or die (mysql_error());
$data = mysql_fetch_assoc($req);
wird zu:
PHP Code:
if((isset($_POST['login']))&&(isset($_POST['password']))){
$pseudo=mysql_real_escape_string($_POST['login']);
$passe=mysql_real_escape_string($_POST['password']);
}
$password = md5($passe);
// On va chercher le mot de passe afférent à ce login
$req = mysql_query("SELECT id, username, password, email, rank FROM membres WHERE username='" . $pseudo ."'") or die (mysql_error());
$data = mysql_fetch_assoc($req);
Somit haben wir das Login gefixxt. Wer sich das Script genauer anschaut, wird wohl wissen, wo genau der Fehler lag.
(Wichtig: Diese Datei gibt es sowohl in dem Hauptverzeichnis, als auch im Admin-Verzeichnis!!!!)
Kommen wir zur 2ten und 3ten Lücke:
Diese liegen in der "membres_email2" sowie "membres_pass2" Datei.
- Umändern beliebiger Daten eines beliebigen Users
membres_email2.php:
Einfach öffnen und folgendes abändern:
PHP Code:
$sql="UPDATE membres SET email='$email' WHERE username='$pseudo'";
zu
PHP Code:
$sql="UPDATE membres SET email='" . mysql_real_escape_string($email)."' WHERE username='" . mysql_real_escape_string($pseudo)."'";
membres_pass2.php:
PHP Code:
if((isset($_POST['login']))&&(isset($_POST['password']))){
$pseudo=htmlentities($_POST['login']);
$passe=htmlentities($_POST['password']);
}
//au minimum
$login=$_POST['pseudo'];
$password2=$_POST['pass1'];
$password = md5($password2);
$newpass = md5($_POST['pass2']);
// On va chercher le mot de passe afférent à ce login
$req = mysql_query("SELECT id, username, password, email, rank FROM membres WHERE username='$login'") or die (mysql_error());
$data = mysql_fetch_assoc($req);
zu...
PHP Code:
if((isset($_POST['login']))&&(isset($_POST['password']))){
$pseudo=mysql_real_escape_string($_POST['login']);
$passe=mysql_real_escape_string($_POST['password']);
}
$password = md5($passe);
// On va chercher le mot de passe afférent à ce login
$req = mysql_query("SELECT id, username, password, email, rank FROM membres WHERE username='" . $pseudo ."'") or die (mysql_error());
$data = mysql_fetch_assoc($req);
und
PHP Code:
mysql_query("UPDATE membres SET password='$newpass' WHERE username='$login'") or die (mysql_error());
zu
PHP Code:
mysql_query("UPDATE membres SET password='" . mysql_real_escape_string($newpass)."' WHERE username='".mysql_real_escape_string($login)."'") or die (mysql_error());
Danke für euer Verständnis