OpenBB ****** Produit : ********* OpenBB http://www.prolixmedia.com Versions : ********** 1.0.0 RC3 (et moins ?) Date : ****** 23/05/02 Problèmes : *********** - XSS - Accès aux options modérateur Developpement : *************** Commençons par un premier trou cross site scripting non permanent : /myhome.php?action=messages&box= Le problème est que les ' sont remplacé par \' et les " par \". On va donc utiliser la balise
pour donner quelque chose du genre : /myhome.php?action=messages&box= Voyons maintenant le XSS permanent. On va utiliser pour cela les BBcodes. Dans faq.php on peut voir : --------------------------------------------------------------------------------------------- Que sont les BBcodes ? Les BBcodes sont utilisés à la place du HTML pour créer des liens, inserer des images, etc. [...] --------------------------------------------------------------------------------------------- Le fichier qui s'occupe de filtrer les messages et de remplacer les BBcodes par du html est lib/codeparse.php. Dedans on peut voir : ----------------------------------------------- [...] $pattern[6] = "#\[img\]http://(.*?)\?(.*?)\[/img\]#si"; [...] $replacement[6] = 'http://\1'; [...] ------------------------------------------------ Il n'est pas possible d'inserer du javascript avec le code [img]javascript:SCRIPT[/img], car l'argument d'[img] doit commencer par http://. On pourrait aussi essayer de fermer la balise pour executer un script comme ceci : [img]http://">[/img] mais il y a un filtre qui l'empechera, le même qui empeche le html, qui remplacera > par >. Mais le " n'est pas filtré dans les balises. Pour executer un javascript, on utilisera alors ce code ci : [img]http://" onerror="ANYSCRIPT"[/img] Ce qui donnera dans la source : http:// La balise sera bien transformée, car elle commence par http:// et le script sera bien executé, car l'image http:// n'existe pas. Il y a aussi une autre balise qui n'est pas annoncée, mais qui existe néanmoins dans OpenBB : ------------------------------------------------------------------------------------ [...] $pattern[22] = "#\[glow tcolor=(.*?), fcolor=(.*?), size=(.*?)\](.*?)\[/glow\]#si"; [...] $replacement[22] = '
\4
'; [...] ------------------------------------------------------------------------------------ Le BBcode : [glow tcolor=')" onmouseover="[SCRIPT]" nothing="('hop, fcolor=red, size=100]HUHUHU[/glow] donnera dans la source HTML :
HUHUHU
et le script sera executé si le lecteur passe sa souris au-dessus du tableau. Le dernier trou permet un accès à tous aux options modérateurs suivantes : - Fermer/ouvrir une partie du forum - Mettre en mode sticky ou l'enlever - Mettre en mode important ou l'enlever On utilise le fichier moderator.php Dans ce fichier, on peut voir comme sécurité une ligne du genre "if (!$ismod) {...". L'url pour fermer une partie du forum sera : http://www.site.com/moderator.php?action=lock&TID=LIDDUFORUM&ismod=1 ou action=sticky ou action=important. Pour faire le contraire ou annuler l'action, il suffit de rajouter &status=1 à l'url. Patch : ******* Les créateurs ont été avertit. Greetz : ******** / Credits : ********* frog-m@n leseulfrog@hotmail.com