ForamiX ******* Produit : ********* ForamiX http://www.ptitphp.com Versions : ********** 1.1 [12/03/2002] (et moins?) Date : ****** 11/04/02 Prolemes : ********** - Accès admin - XSS Developpement : *************** ForamiX est un forum PHP. Voyons d'abord la premiere faille permettant d'être admin, dûe aux cookies. Dans la source de /admin/index.php on peut voir : ------------------------------------------------------------------------------------- if($admin_user!="" && $admin_pass!=""){ for($i=0;$i<$count_login;$i++){ if($login_reg[$i]==$admin_user && $pass_reg[$i]==$admin_pass){ setcookie("admin_login","1"); setcookie("admin_level","$level_reg[$i]"); header("Location: index.php"); //--Ces Cookies sont détruits automatiquement après la fermeture du navigateur break; } } ------------------------------------------------------------------------------------- Le site repere donc son admin via les cookies. Il suffirait d'envoyer le cookie avec comme nom 'admin_login', comme valeur 1 et le cookie avec comme nom 'admin_level', comme valeur $level_reg[$i] pour etre admin. Il faut neanmoins trouver ce que vaut $level_reg[$i]. On peut le voir a plusieur endroit. D'abord dans admin/acces/acces.fx.php où on voit, par defaut : $login_reg[0]="admin"; $pass_reg[0]="pass"; $level_reg[0]="2"; puis dans /admin/access/administrators.fx.php où on voit : if($admin_level==2){ enfin dans la soyurce html de /admin/?page=home&administrator=1 on peut voir : La valeur de $level_reg[$i] pour un Administrateur principal sera donc 2. On est donc admin en envoyant les cookies "admin_login,1" et "admin_level,2" sur la page /admin/index.php . Il y a une autre façon de devenir admin. Cette url : /admin/?page=home&administrator=1&make=1&login_reg[1]=NICK&pass_reg[1]=PASS&level_reg[1]=2 supprimera tout les admins, et ajoutera l'admin avec comme pseudo NICK et password PASS (à condition que celui qui visite cette url soit admin). Il faut donc trouver un moyen de faire visiter cette url par le webmaster. Il y a un trou XSS dans l'ecriture des messages. Si on met comme site web ">, on aura bien une alert sur le forum. Petite precision : un cookie est envoyé : Visitor_info=PSEUDO#ADRESSE@EMA.IL#%5CLE+MESSAGE+ENVOYé Petit probleme qui se pose souvent : le ' est remplacé par \' et le " par \" . Pourquoi est-ce un probleme ? Imaginons que l'on veuille faire une alert avec du texte. On mettre alors : . ne fera rien d'autre qu'une erreur de script. Même chose pour location='http://www.url.com'; qui deviendra location=\'http://www.url.com\'; ou encore window.open('http://www.url.com'); qui deviendra window.open(\'http://www.url.com\'); . Voici un moyen pour contourner ce petit probleme. Il y en a surement d'autres, mais c'est celui que j'ai trouvé, je n'ai cherché nulle part d'autres moyens. Pour faire alert('youpi yeaaaaah'), il suffira de rentrer le code :
On remarque qu'aucun caractere ' ou " ne se trouve dans ces 2 lignes de code. Le script que le webmaster devra lire sera donc :
et le script à poster dans la case destinée à mettre son website (sur une ligne) : ">
Patch : ******* / Greetz : ******** / Credits : ********* frog-m@n leseulfrog@hotmail.com