SudBox Boutique v1.2 (PHP) Accès Admin

 Date de Publication: 2003-05-20
 Titre:
SudBox Boutique v1.2 (PHP) Accès Admin
 K-Otik ID : 0095
 Exploitable à distance : Oui
 Exploitable en local : Oui

 
 * Description Technique - Exploit *
 
"Votre propre boutique de commerce électronique. Le script comprend en mode administration différents modules: création et gestion de la boutique (configuration complète en mode admin. Mot de passe, login, devises, tva....) Mise en page des fiches produits avec: Prix, TVA, frais de port, photos, gestion des stocks, gestion des articles épuisés, gestion des commandes en ligne..). Installation rapide. (création automatique des
tables dans votre base de données MySQL.)"

Le mode administration dont on parle dans cette description a un problème de sécurité. Dans les fichiers admin, ou peut voir des lignes de code vérifiant que c'est bien l'admin loggé qui les visite :
---------------------------------------------
<?
session_start();

if (!session_is_registered('login')) {
header("Location:page_centrale.php");
}
?>
---------------------------------------------
On est donc considéré comme admin si la session "login" est enregistrée.
Voyons maintenant la page d'authentification, admin/login.php :
-----------------------------------------------------------------
<?
session_start();

include "../configuration.php";

$query = mysql_query("SELECT admin,motdepasse FROM $sbbadmin");


while ($row = mysql_fetch_row($query)) {
if (($row[0] == $admin) && ($row[1] == $motdepasse)) {
$check = "ok";
}
}


if (IsSet($check)) {
$login = $admin;
session_register('login');
include("nav.php");
exit;
} else {
header("Location: page_centrale.php");
}

?>
-----------------------------------------------------------------
Le fichier extrait d'abord le mot de passe et le login administrateur de la base de données, et les compare au mot de passe et au login entré dans le formulaire par l'utilisateur. Si ce sont les mêmes, $check vaut "ok".
On regarde ensuite si $check est vide, et si ce n'est pas le cas, on enregistre la session "login". Le problème est qu'on peut définir nous-même la variable $check sans que les informations entrées soient correctes. Pour entrer dans la partie admin, il suffira donc de taper l'url :
http://[target]/admin/login.php?check=1&admin=1


  * Versions Vulnérables *

SudBox Boutique v1.2
 

  * Solution *

Un patch est disponible sur http://www.phpsecure.info .
Il suffit d'ajouter, après la ligne :
-------------------------------
include "../configuration.php";
-------------------------------
la ligne suivante :
------------
$check = "";
------------
Qui définit par défaut la variable $check comme étant vide.


  * Crédits *
 
Faille découverte par Frog-Man (Mai 2003).