Prise d’empreinte de CMS – Drupal – DPScan

avril 18th, 2013 | Posted by Cervoise in Français

Cet article est le premier d’un série de trois articles sur des outils d’audit de CMS, chaque outil étant spécifique à un CMS.

Dans ce premier article j’aborderai DPScan, outil d’audit pour Drupal. Dans les deux prochains articles j’analyserai WPScan, outil d’audit pour WordPress, puis joomscan, pour Joomla!. Je ferai d’ailleurs une présentation de ces outils au cours des RMLL 2013.

Les outils seront tous testés sous une machine Ubuntu 12.04.

DPScan

Lors de sa publication, beaucoup de sites ont relayé l’information. Cependant, le lien proposé par ceux-ci n’existe plus. L’outil est toujours disponible sous BackTrack ainsi que sur d’autres dépôts github ().

Cet outil n’est en fait qu’un simple script analysant le contenu de la page web à la recherche du pattern modules/nom_de_module. Il retourne comme résultat la liste, non exhaustive, des modules découverts.

Fonctionnement de l’outil

DRUPAL Modules Enumerator v0.1beta-- written by Ali Elouafiq 2012
scriptname [filename.txt]
scriptname [URL]
scriptname [URL] user password // FOR HTTP AUTHORIZATION

Deux options pour analyser une page, soit on analyse l’URL en utilisant la commande :

python DPScan.py www.example.tld

Soit on analyse une page en HTML de la manière suivante (attention le nom de fichier doit se terminer par .txt) :

python DPScan.py filename.txt

Une fonctionnalité supplémentaire permet de supporter l’authentification HTTP.

Pour mieux comprendre l’outil, travaillons maintenant sur un exemple concret, la distribution Commerce Kickstart de Drupal. Il s’agit d’un Drupal optimisé et préconfiguré pour créer un site de commerce. Nous utiliserons la version commerce_kickstart-7.x-2.0-rc4-core.tar.gz.

Voici le résultat du scan :

cervoise@computer:~$ python DPScan.py localhost/drupal_commerce
comment
node
contrib\
system
commerce_kickstart
user
contrib

Au delà du manque d’exhaustivité qui sera montré plus loin, on constate deux points négatifs : un module qui sort en doublon et les modules ne sont pas par ordre alphabétique. L’apparition d’un module en double est lié à l’utilisation de JQuery (la ligne complète est disponible sur Pastebin) :

<!--//--><![CDATA[//><!--jQuery.extend(Drupal.settings, {"basePath":"\/drupal_commerce\/",[...] and (orientation:landscape)"}}}});//--><!]]>

Passons maintenant à l’analyse des résultat, si l’on va voir dans les répertoires contenant les modules on constate que l’on est loin du compte :

cervoise@computer:/var/www/drupal_commerce/modules$ ls -l
total 164
drwxrwxrwx 3 cervoise cervoise 4096 nov.   9 15:31 aggregator
drwxrwxrwx 3 cervoise cervoise 4096 nov.   9 15:31 block
drwxrwxrwx 2 cervoise cervoise 4096 nov.   9 15:31 blog
drwxrwxrwx 2 cervoise cervoise 4096 nov.   9 15:31 book
drwxrwxrwx 3 cervoise cervoise 4096 nov.   9 15:31 color
drwxrwxrwx 2 cervoise cervoise 4096 nov.   9 15:31 comment
drwxrwxrwx 2 cervoise cervoise 4096 nov.   9 15:31 contact
drwxrwxrwx 3 cervoise cervoise 4096 nov.   9 15:31 contextual
drwxrwxrwx 2 cervoise cervoise 4096 nov.   9 15:31 dashboard
drwxrwxrwx 2 cervoise cervoise 4096 nov.   9 15:31 dblog
drwxrwxrwx 5 cervoise cervoise 4096 nov.   9 15:31 field
drwxrwxrwx 2 cervoise cervoise 4096 nov.   9 15:31 field_ui
drwxrwxrwx 4 cervoise cervoise 4096 nov.   9 15:31 file
drwxrwxrwx 3 cervoise cervoise 4096 nov.   9 15:31 filter
drwxrwxrwx 2 cervoise cervoise 4096 nov.   9 15:31 forum
drwxrwxrwx 2 cervoise cervoise 4096 nov.   9 15:31 help
drwxrwxrwx 3 cervoise cervoise 4096 nov.   9 15:31 image
drwxrwxrwx 3 cervoise cervoise 4096 nov.   9 15:31 locale
drwxrwxrwx 2 cervoise cervoise 4096 nov.   9 15:31 menu
drwxrwxrwx 3 cervoise cervoise 4096 nov.   9 15:31 node
drwxrwxrwx 3 cervoise cervoise 4096 nov.   9 15:31 openid
drwxrwxrwx 3 cervoise cervoise 4096 nov.   9 15:31 overlay
drwxrwxrwx 2 cervoise cervoise 4096 nov.   9 15:31 path
drwxrwxrwx 2 cervoise cervoise 4096 nov.   9 15:31 php
drwxrwxrwx 2 cervoise cervoise 4096 nov.   9 15:31 poll
drwxrwxrwx 2 cervoise cervoise 4096 nov.   9 15:31 profile
drwxrwxrwx 3 cervoise cervoise 4096 nov.   9 15:31 rdf
-rwxrwxrwx 1 cervoise cervoise  448 nov.   9 15:31 README.txt
drwxrwxrwx 3 cervoise cervoise 4096 nov.   9 15:31 search
drwxrwxrwx 2 cervoise cervoise 4096 nov.   9 15:31 shortcut
drwxrwxrwx 4 cervoise cervoise 4096 nov.   9 15:31 simpletest
drwxrwxrwx 2 cervoise cervoise 4096 nov.   9 15:31 statistics
drwxrwxrwx 2 cervoise cervoise 4096 nov.   9 15:31 syslog
drwxrwxrwx 2 cervoise cervoise 4096 nov.   9 15:31 system
drwxrwxrwx 2 cervoise cervoise 4096 nov.   9 15:31 taxonomy
drwxrwxrwx 2 cervoise cervoise 4096 nov.   9 15:31 toolbar
drwxrwxrwx 2 cervoise cervoise 4096 nov.   9 15:31 tracker
drwxrwxrwx 3 cervoise cervoise 4096 nov.   9 15:31 translation
drwxrwxrwx 3 cervoise cervoise 4096 nov.   9 15:31 trigger
drwxrwxrwx 3 cervoise cervoise 4096 nov.   9 15:31 update
drwxrwxrwx 3 cervoise cervoise 4096 nov.   9 15:31 user
cervoise@computer:/var/www/drupal_commerce/profiles/commerce_kickstart/modules$ ls -l
total 8
drwxrwxrwx 23 cervoise cervoise 4096 nov. 9 14:55 commerce_kickstart
drwxrwxrwx 67 cervoise cervoise 4096 nov. 9 15:31 contrib

Ce listing montre qu’il est important de tenter une simple requête HTTP sur ces répertoires avant de lancer l’outil. En effet, s’il est possible de lister le contenu, on obtiendra alors plus d’informations d’une manière plus simple et plus rapide.

Une fois la liste de module obtenue, on peut essayer de récupérer plus d’informations sur chaque module manuellement afin d’obtenir des informations sur leur version, et ainsi rechercher si des failles existent. Il reste donc une bonne partie du travail à faire à la main.

L’outil n’est donc pas à la hauteur de la présentation effectuée par plusieurs sites !

Pour finir, les problèmes d’ordre alphabétique et de doublon sont assez simples à corriger. Il suffit de remplacer la ligne 48 :

Modules_List.append(line[1].split("/")[1])

par :

Modules_List.append(line[1].split("/")[1].split("\\")[0])

et la ligne 50 :

Modules_List=list(set(Modules_List))

par :

Modules_List=sorted(list(set(Modules_List)))

Une version 0.2 du script est d’ailleurs disponible ici.

You can follow any responses to this entry through the RSS 2.0 You can leave a response, or trackback.

Leave a Reply

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Time limit is exhausted. Please reload the CAPTCHA.