IcrediBB
********
Produit :
*********
IcrediBB Bulletin Board System
http://www.icredibb.com
Versions :
**********
1.1 Beta
Date :
******
12/04/02
Problemes :
***********
- Accès aux comptes users/admins
- XSS
Developpement :
***************
Voici ce qu'on peut lire dans index.php, à la partie du code pour se logger :
--------------------------------------------------------------------------
//sets cookies with the login information (not the password though)
setcookie("userstuffid", $PHPSESSID, time()+$cookies);
setcookie("sessionuser", $sessionuser, time()+$cookies);
setcookie("count", $count, time()+$cookies);
setcookie("sessionstatus", $sessionstatus, time()+$cookies);
setcookie("date", $ttime, time()+$cookies);
--------------------------------------------------------------------------
et dans la partie log out :
--------------------------------------------------------------------------
setcookie("userstuffid", "", "");
setcookie("sessionuser", "", "");
setcookie("sessionstatus", "", "");
setcookie("userstuffid", "", "");
setcookie("sessionuser", "", "");
setcookie("sessionstatus", "", "");
--------------------------------------------------------------------------
Le service repere donc ses membres grâce aux cookies, notre but va donc être de les récuperer.
La façon la plus facile à utiliser pour récuperer des cookies sur des services style guestbook,
forum ou autre est d'inscrire du javascript sur une page.
Commençons par l'endroit qui dans les services contient generalement beaucoup de failles : la
messagerie privée.
On n'est pas déçu : on peut ecrire du javascript comme message, il sera lu sans
probleme.
Par exemple,
fonctionnera très bien.
Pour recuperer le cookie, j'ai bien sûr essayé de le faire renvoyer
par le service lui-même, mais il se pose un petit probleme sur lequel nous reviendrons :
dans l'url de renvois, ce qui est après un ';' est supprimé.
On aura donc que le premier cookie, sessionuser, qui ne nous donne que le pseudo
de la personne.
En sachant que l'url de l'envois de message se forme comme ceci :
/pm.php?function=sendpm&to=DESTINATAIRE&subject=SUJET&images=images/mad.gif
&message=MESSAGE&submitpm=Submit PM
On aurait pu creer le script :
Par le biais de la lecture d'un message piégé, on pourrait aussi utiliser une autre insécurité.
Dans icrediBB, on ne doit pas entrer son ancien password pour le changer.
Un script :
serait fatal à un membre. Il changerait le password en PASS puis se loggerai out, ne
permettant pas à l'user de remettre son vrai pass.
Il est aussi à savoir qu'on peut faire executer directement du javascript sur la page principale
de l'Inbox, car le suejt accepte aussi le javascript, mais moins de caracteres.
Revenons maintenant sur l'url d'envois de messages, qui est :
/pm.php?function=sendpm&to=DESTINATAIRE&subject=SUJET&images=images/mad.gif
&message=MESSAGE&submitpm=Submit PM
On peut remarquer que la variable images est directement l'url de l'image qui va être
inscrite dans la source de l'Inbox de cette façon :
Donc, si on ne vaut pas afficher d'image, on executera l'url :
/pm.php?function=sendpm&to=DESTINATAIRE&subject=SUJET&images=" width=0>
Donc deux balises images vides avec 0 de longueur de cotés.
Même chose, pour inserer deux images :
/pm.php?function=sendpm&to=DESTINATAIRE&subject=SUJET&images=images/mad.gif">
La façon de contourner ce probleme que j'ai trouvé est de remplacer / par %2F et
; par %3B .
Donc par exemple :
/pm.php?function=sendpm&to=DESTINATAIRE&subject=SUJET&images=
javascript:window.open('http:%2F%2Fwww.url.com')&message=MESSAGE&submitpm=Submit PM
ou :
/pm.php?function=sendpm&to=DESTINATAIRE&subject=SUJET&images=
javascript:a='http:%2F%2Fwww.url.com'%3Bwindow.open(a)%3B&message=MESSAGE&submitpm=Submit PM
Voilà, c'est tout pour la messagerie privée.
Il reste au moins une autre faille, qui se trouve dans le profil.
A l'url /usercp.php?function=avataroptions, on peut choisir sont "avatar", images/noavatar.gif
par defaut, qui s'affichera sur son profil, dans son compte et quand quelqu'un lire un de vos
messages publics.
Etant donné que ce logo s'affichera à chaque fois dans la source de cet façon :
, inutile de chercher bien loin la faille.
Si on met comme url d'image javascript:alert(document.cookie), chaque personne visitant
votre profil, lisant un de vos messages, ou vous a chaque ouverture d'une des pages
de votre compte, verra une popup contenant son cookie.
Il y a néanmoins un probleme : ' est remplacé par \' et " par \". Nous allons donc
le regler de la même façon que plus haut, en remplacant le ' par %27.
Si insere, à la place d'une image, le script javascript:alert(%27HeLLo%27) ,
une popup avec ce texte apparaitra bien aux endroits cités plus haut.
Il est tout de même à preciser qu'une fois ce code entré, il n'est plus possible de l'enlever,
on a donc droit qu'a un seul essais, et le compte est inutilisable par la suite, ou du
moins difficilement utilisable.
Patch :
*******
/
Greetz :
********
/
Credits :
*********
frog-m@n
leseulfrog@hotmail.com