Informations : °°°°°°°°°°°°°° Langage : PHP Website : http://www.tefonline.net/ Version : 3.0 Problèmes : - XSS -> récuperation du login/pass admin - Accès à la partie administration Developpement : °°°°°°°°°°°°°°° Myguestbook est un livre d'or avec une partie administration. Le fichier permettant d'envoyer des messages est form.php. Aucune des trois données entrées par l'utilisateur (pseudo, e-mail et message) ne sont filtrées. On peut donc y insérer du code, qui pourra être executé depuis plusieurs pages. La première de ces pages est index.php, où sont affichés tout les messages, de façon à permettre à tous de les lire. On peut voir dans ce fichier le code suivant : ------------------------------------------------------------------------------------------------------------------ [...] if ($ligne[email]<>"") echo "$ligne[pseudo]"; else echo "$ligne[pseudo]"; [...] echo"
"; [...] ------------------------------------------------------------------------------------------------------------------ $ligne[email], $ligne[pseudo] et $ligne[message] son bien sûr respectivement les emails, pseudos et messages entrés. Si on entre comme pseudo un script, il sera directement executé. Pour en faire executer un dans l'email et le message, il faudra fermer les balises ouvertes avant de noter le script. Pour l'email, il faudra fermer la balise de cette façon : ">[SCRIPT] et pour le message la balise [SCRIPT]. Les autres pages où peut être executé un script sont des pages de l'administration. Dans le code html de /admin/user_modif.php, on verra : -------------------------------------------------------------------------------------------------------------------- [...]
[...] Message de :
Email :
[...]
[...] -------------------------------------------------------------------------------------------------------------------- Pour faire executer un script sur cette page, il faudra taper : dans le pseudo et dans l'email : >[SCRIPT] dans le message : [SCRIPT][SCRIPT][SCRIPT] Cette faille cross site scripting est extrêmement dangereuse à cause d'une ligne qu'on peut voir dans /admin/confirm_connect.php : --------------------------------------------- SetCookie("Myguestbook","$name:$password"); --------------------------------------------- Quand un admin s'authentifie, son login et password non-crypté sont envoyés par cookie. [SCRIPT] pourrait alors être un script récuperant ce cookie. Et comme l'admin n'a d'autres choix que de se rendre sur une page executant le script, il le fera quoi qu'il se passe si il se connecte sur son guestbook. On a vu qu'on cookie nommé "Myguestbook" étant envoyé quand un admin se loggait. On peut voir dans le dossier /admin/, dans les fichier admin_pass.php, admin_index.php, admin_modif.php et admin_suppr.php, les lignes de vérification suivantes : -------------------------------------------------------------------- -------------------------------------------------------------------- Il n'y a aucune vérification du contenu du cookie, on vérifie juste que le cookie existe bien. N'importe qui peut donc accèder à chacune de ces pages avec une url du type : http://[target]/admin/admin_index.php?Myguestbook=1 Enfin, il n'y a aucune vérification tout court de l'authentification dans le fichier /admin/user_modif.php. Chaque message du livre d'or pourra être modifié avec une url du type : http://[target]/admin/user_modif.php?id=[ID] [ID] étant le numéro du message. Patch : °°°°°°° Un patch est disponible sur http://www.phpsecure.info . Credits : °°°°°°°°° Auteur : frog-m@n E-mail : leseulfrog at hotmail dot com Websites : http://www.frog-man.org, http://www.phpsecure.org Date : 16/02/03