D-Book ****** Produit : ********* D-Book http://www.smartbb.net Versions : ********** 1.4 (et moins ?) Date : ****** 12/04/02 Problemes : *********** - XSS (+récuperation du pass admin) - Accès à l'administration Developpement : *************** Dans login.php, au niveau de l'authentification, on peut lire : -------------------------------------------------------------- if($pass == "$password") { header ("Set-Cookie: logged=$pass; expires=Friday, 16-Jan-2037 00:00:00 GMT; path=/;"); header ("Refresh: 1; url=admin.php"); -------------------------------------------------------------- Le site reconnait donc apparemment l'admin si il a un cookie nommé 'logged' et contenant le pass admin. Pour acceder à la partie admin, il faudrait donc recuperer ce pass admin, par exemple par ce cookie. Mais si on regarde dans admin.php, on voit : if (isset ($logged)) { !!!!!! Pour authentifié, le service ne verifie pas si le $pass du cookie logged est bon, il verifie simplement si le cookie logged a bien été envoyé et n'est pas vide. Il suffit donc d'envoyer un cookie nommé 'logged', avec nimporte quelle valeur (sauf vide) sur la page admin.php pour avoir l'accès admin. L'autre moyen d'être admin serait de recuperer le cookie et donc le password. On va donc essayer d'inserer du javascript dans la page du guestbook. Si l'option de la balise [img], pour inserer des images, est active, voyons ce qui doit se passer : post.php : ----------------------------------------------------------------------- if ($images == "yes") { $comment = preg_replace("'\[img=(.*)\]'",'',$comment); } ----------------------------------------------------------------------- On va donc essayer de reproduire le code html : pour le guestbook, ce qui donnera : [img=javascript:alert(document.domain)] et qui fonctionne très bien. Hèlas, les ' sont remplacés par \' et les " par \". Un moyen pour contourner ceci, comme on ne peut pas inscrire de < ou >, et pour executer le code javascript:alert('hum'); est de remplacer ce caractere ' par %27. Ce qui nous donnera donc la balise : [img=javascript:alert(%27hum%27)] Je tiens à preciser le fait de remplacer ' par %27 fonctionne uniquement parce qu'on fait appel au protocol javascript:, comme dans une url http:// où %2F serait compris comme / . Une petite astuce astuce : le caractere > peux être ecrit grâce à > ou > , le caractere " grâce à " , le caractere ' grâce à ' et le caractere < grâce à < (encodage Latin-1). De là il n'y a plus qu'un pas pour faire un script qui recupererai le pass admin contenu dans le cookie. Patch : ******* / Greetz : ******** / Credits : ********* frog-m@n leseulfrog@hotmail.com