.

Qu'est-ce que Droopescan et comment l'utiliser efficacement

La reconnaissance de site Web est l'un des éléments d'un audit de sécurité. Cette tâche peut être automatisée dans une certaine mesure en choisissant l'un des programmes gratuits et open-source disponibles sur le web. Un de ces outils est Droopescan.

Qu'est-ce que Droopescan ?

Droopescan est un script permettant d'accélérer la reconnaissance initiale du site audité s’il utilise l’un des CMS listés ci-dessous. Le script permet de définir vos propres plugins, ce qui peut permettre une automatisation encore plus poussée du processus d’examen initial. Vous pouvez trouver plus d'informations sur la création de vos propres plugins, qui étendent la fonctionnalité du script, dans le fichier README.md sur la page de l'outil précédemment liée sur Github.

Fonctionnalités du scanner Drupal

Les capacités de Droopescan varient en fonction du système de gestion de contenu.

Dans Drupal, ce sont les fonctions qui permettent d'identifier :

  • les plugins installés
  • les thèmes installés
  • les chemins d’intérêt pour un attaquant potentiel (comme le panneau de connexion ou le fichier de changelog)
  • la version de Drupal utilisée

Dans Joomla et WordPress, vous pouvez identifier les chemins d'intérêt pour un attaquant, ainsi que la version de ces systèmes utilisée. Dans un autre CMS, Moodle, l'outil Droopescan peut reconnaître les plugins et thèmes installés, ainsi que la version du système de gestion de contenu en cours d'utilisation.

Dans le système Silverstripe, nous identifierons :

  • les plugins installés,
  • les thèmes installés,
  • les chemins d’intérêt pour un attaquant,
  • la version de Silverstripe utilisée.

Méthodes d'installation du script

Les développeurs ont préparé plusieurs méthodes d'installation du script. Nous pouvons choisir la façon la plus appropriée, selon nos préférences.

Utilisation de pip

C'est la méthode d'installation recommandée par les créateurs :

apt-get install python-pip pip install droopescan

Installation manuelle

Pour installer le script manuellement, exécutez les commandes suivantes :

git clone https://github.com/droope/droopescan.git cd droopescan pip install -r requirements.txt ./droopescan scan --help

Sur la distribution BlackArch

Pour l'installation sur la distribution BlackArch, les créateurs recommandent d'utiliser pacman :

sudo pacman -S droopescan

Docker

Droopescan peut également être installé en tant que conteneur Docker :

git clone https://github.com/droope/droopescan.git cd droopescan docker build -t droope/droopescan . # afficher l'aide docker run --rm droope/droopescan # exemple de scan d'un site Drupal docker run --rm droope/droopescan scan drupal -u https://drupal.example.com

Déballage

Le script Droopescan est très flexible et permet de configurer le scan selon vos souhaits. Grâce aux paramètres, nous pouvons changer le type de scan, en choisissant l’un des cadres disponibles, fournir une adresse ou une liste d'adresses à scanner, et bien plus encore. Voici une liste complète des options configurables.

Commandes

droopescan scan --help

Ouvre une liste des commandes disponibles.

droopescan scan

{drupal|joomla|moodle|silverstripe|wordpress}

Exécute les scripts responsables du scan du site web utilisant le CMS sélectionné.

droopescan scan --debug

Exécute la sortie de débogage.

droopescan scan --quiet

Active le mode silencieux qui ne montre pas les informations sur le scan pendant son exécution.

droopescan scan -u {URL} et droopescan scan --url {URL}

Ils permettent de définir la cible du scan.

droopescan scan -U {URL_FILE} et droopescan scan --url-file {URL_FILE}

Ils permettent de définir le chemin du fichier où se trouvent les sites à scanner. La structure du fichier devrait ressembler à ceci :

> cat example.txt http://localhost/drupal/8.9.0/ http://localhost/drupal/8.7.1/ http://localhost/drupal/8.9.13/ http://example.com

droopescan scan -e {a, t, p, v, i} et droopescan scan --enumerate {a, t, p, v, i}

Ils permettent de définir ce que le script doit scanner :

  • p - plugins,
  • t - thèmes,
  • v - version,
  • i - liens utiles,
  • a (par défaut) - tous.

droopescan scan --method {not_found, forbidden, ok}

Permet de spécifier quel type d'erreur est traité comme un indicateur et si un certain chemin existe. Pour certains serveurs, c’est 403, pour d’autres – 404. Par défaut, le script essaie de le déduire lui-même.

droopescan scan --verb {head, get}

Permet de spécifier le type de requête que le script utilisera. L'option par défaut est head.

droopescan scan --number {NUMBER} droopescan scan -n {NUMBER}

Spécifie le nombre de mots à vérifier à partir du dictionnaire de plugins ou de thèmes. C'est mille par défaut. Pour utiliser tout ce qui est disponible, vous devriez taper all.

droopescan scan --plugins-base-url {PLUGINS_BASE_URL}

Permet de spécifier le chemin où les plugins sont stockés dans le CMS. Sans fournir ce paramètre, le script vérifie le chemin par défaut pour un système donné.

droopescan scan --themes-base-url {THEMES_BASE_URL}

Permet de spécifier le chemin où les thèmes sont stockés dans le CMS. Sans fournir ce paramètre, le script vérifie le chemin par défaut pour un système donné.

droopescan scan --timeout {TIMEOUT}

Spécifie combien de temps le script doit attendre une réponse HTTP en secondes.

droopescan scan --no-follow-redirects

Activer ce drapeau empêche de suivre les redirections.

droopescan scan --host {HOST}

Écrase l'en-tête de requête d'hôte avec la valeur fournie.

droopescan scan --user-agent {USER_AGENT}

Écrase l'en-tête User Agent de la requête.

droopescan scan --massscan-override

Utiliser ce drapeau remplace les valeurs par défaut par celles pratiques pour le scan de masse des hôtes.

droopescan scan --threads {THREADS} et droopescan scan -t {THREADS}

Un nombre de threads utilisés pour le scan. C'est 4 par défaut.

droopescan scan --threads-identify {THREADS_IDENTIFY}

Un nombre de threads utilisés pour l'identification du CMS.

droopescan scan --threads-scan {THREADS_SCAN}

Un nombre de threads utilisés pour le scan de masse des hôtes.

droopescan scan --threads-enumerate {THREADS_ENUMERATE}

Un nombre de threads utilisés pour l'identification des plugins.

droopescan scan --output {standard, json} et droopescan scan -o {standard, json}

Permet de spécifier le format de sortie retourné par le script.

droopescan scan --hide-progressbar

L'activation de ce drapeau permet de désactiver la barre de progression.

droopescan scan --debug-requests

L'activation de ce drapeau introduit dans la console le contenu de toutes les requêtes HTTP faites par le script, ainsi que la réponse reçue du serveur. L'activation de ce drapeau désactive le threading du scan et les barres de progression.

droopescan scan --error-log {ERROR_LOG}

Permet de définir le fichier dans lequel toutes les erreurs de scan seront consignées.

droopescan scan --resume

Retourne le scan au stade où il a été terminé pour la dernière fois. C'est une option utile lors de l'utilisation du scan de masse.

Exemple d'utilisation de Droopescan

Notre page de test utilise Drupal 8.9.15 et contient une liste de nombreux modules populaires. Elle utilise un thème personnalisé, et la connexion au panneau d'administration est effectuée avec le chemin par défaut.

Pour commencer le scan, nous utiliserons la commande :

droopescan scan drupal -u example.com

Vous pouvez voir le résultat du scan ci-dessous.

➜  droopescan git:(master) docker run --rm droope/droopescan scan drupal -u example.com
modules [ ===                                                ] 224/4000 (5%)[+]  Got an HTTP 500 response.
modules [ ====                                               ] 287/4000 (7%)[+]  Got an HTTP 500 response.
modules [ ====                                               ] 288/4000 (7%)[+]  Got an HTTP 500 response.
modules [ ========                                           ] 626/4000 (15%)[+]  Got an HTTP 500 response.
modules [ ==============                                     ] 1053/4000 (26%)[+]  Got an HTTP 500 response.
modules [ ==============                                     ] 1056/4000 (26%)[+]  Got an HTTP 500 response.
modules [ ================                                   ] 1272/4000 (31%)[+]  Got an HTTP 500 response.
modules [ ============================                       ] 2227/4000 (55%)[+]  Got an HTTP 500 response.
modules [ ================================                   ] 2509/4000 (62%)[+]  Got an HTTP 500 response.
modules [ ===============================================    ] 3746/4000 (93%)[+]  Got an HTTP 500 response.
[+] Accepted redirect to https://www.example.com/
[+] Plugins found:
    image_widget_crop https://www.example.com/sites/all/modules/image_widget_crop/
    flexslider_views_slideshow https://www.example.com/sites/all/modules/flexslider_views_slideshow/
    service_links https://www.example.com/sites/all/modules/service_links/
    compact_forms https://www.example.com/sites/all/modules/compact_forms/
    strongarm https://www.example.com/sites/default/modules/strongarm/
    video_embed_field https://www.example.com/sites/default/modules/video_embed_field/
    tablefield https://www.example.com/sites/default/modules/tablefield/
    ctools https://www.example.com/modules/contrib/ctools/
        https://www.example.com/modules/contrib/ctools/README.txt
        https://www.example.com/modules/contrib/ctools/LICENSE.txt
    token https://www.example.com/modules/contrib/token/
        https://www.example.com/modules/contrib/token/README.md
        https://www.example.com/modules/contrib/token/LICENSE.txt
    pathauto https://www.example.com/modules/contrib/pathauto/
        https://www.example.com/modules/contrib/pathauto/README.md
        https://www.example.com/modules/contrib/pathauto/LICENSE.txt
    metatag https://www.example.com/modules/contrib/metatag/
        https://www.example.com/modules/contrib/metatag/CHANGELOG.txt
        https://www.example.com/modules/contrib/metatag/README.txt
        https://www.example.com/modules/contrib/metatag/LICENSE.txt
    field_group https://www.example.com/modules/contrib/field_group/
        https://www.example.com/modules/contrib/field_group/CHANGELOG.txt
        https://www.example.com/modules/contrib/field_group/README.txt
        https://www.example.com/modules/contrib/field_group/LICENSE.txt
    google_analytics https://www.example.com/modules/contrib/google_analytics/
        https://www.example.com/modules/contrib/google_analytics/README.md
        https://www.example.com/modules/contrib/google_analytics/LICENSE.txt
    redirect https://www.example.com/modules/contrib/redirect/
        https://www.example.com/modules/contrib/redirect/README.txt
        https://www.example.com/modules/contrib/redirect/LICENSE.txt
    colorbox https://www.example.com/modules/contrib/colorbox/
        https://www.example.com/modules/contrib/colorbox/README.txt
        https://www.example.com/modules/contrib/colorbox/LICENSE.txt
    features https://www.example.com/modules/contrib/features/
        https://www.example.com/modules/contrib/features/LICENSE.txt
    devel https://www.example.com/modules/contrib/devel/
        https://www.example.com/modules/contrib/devel/README.txt
        https://www.example.com/modules/contrib/devel/LICENSE.txt
    admin_toolbar https://www.example.com/modules/contrib/admin_toolbar/
        https://www.example.com/modules/contrib/admin_toolbar/CHANGELOG.txt
        https://www.example.com/modules/contrib/admin_toolbar/README.txt
        https://www.example.com/modules/contrib/admin_toolbar/LICENSE.txt
    better_exposed_filters https://www.example.com/modules/contrib/better_exposed_filters/
        https://www.example.com/modules/contrib/better_exposed_filters/README.txt
        https://www.example.com/modules/contrib/better_exposed_filters/LICENSE.txt
    paragraphs https://www.example.com/modules/contrib/paragraphs/
        https://www.example.com/modules/contrib/paragraphs/README.txt
        https://www.example.com/modules/contrib/paragraphs/LICENSE.txt
    smtp https://www.example.com/modules/contrib/smtp/
        https://www.example.com/modules/contrib/smtp/README.txt
        https://www.example.com/modules/contrib/smtp/LICENSE.txt
    search_api https://www.example.com/modules/contrib/search_api/
        https://www.example.com/modules/contrib/search_api/CHANGELOG.txt
        https://www.example.com/modules/contrib/search_api/README.md
        https://www.example.com/modules/contrib/search_api/LICENSE.txt
    entity_reference_revisions https://www.example.com/modules/contrib/entity_reference_revisions/
        https://www.example.com/modules/contrib/entity_reference_revisions/LICENSE.txt
    linkit https://www.example.com/modules/contrib/linkit/
        https://www.example.com/modules/contrib/linkit/README.md
        https://www.example.com/modules/contrib/linkit/LICENSE.txt
    eu_cookie_compliance https://www.example.com/modules/contrib/eu_cookie_compliance/
        https://www.example.com/modules/contrib/eu_cookie_compliance/README.md
        https://www.example.com/modules/contrib/eu_cookie_compliance/LICENSE.txt
    scheduler https://www.example.com/modules/contrib/scheduler/
        https://www.example.com/modules/contrib/scheduler/README.md
        https://www.example.com/modules/contrib/scheduler/LICENSE.txt
    simple_sitemap https://www.example.com/modules/contrib/simple_sitemap/
        https://www.example.com/modules/contrib/simple_sitemap/README.md
        https://www.example.com/modules/contrib/simple_sitemap/LICENSE.txt
    google_tag https://www.example.com/modules/contrib/google_tag/
        https://www.example.com/modules/contrib/google_tag/README.md
    addtoany https://www.example.com/modules/contrib/addtoany/
        https://www.example.com/modules/contrib/addtoany/README.txt
        https://www.example.com/modules/contrib/addtoany/LICENSE.txt
    advagg https://www.example.com/modules/contrib/advagg/
        https://www.example.com/modules/contrib/advagg/README.md
        https://www.example.com/modules/contrib/advagg/LICENSE.txt
    config_update https://www.example.com/modules/contrib/config_update/
        https://www.example.com/modules/contrib/config_update/README.txt
        https://www.example.com/modules/contrib/config_update/LICENSE.txt
    robotstxt https://www.example.com/modules/contrib/robotstxt/
        https://www.example.com/modules/contrib/robotstxt/README.txt
        https://www.example.com/modules/contrib/robotstxt/LICENSE.txt
    config_filter https://www.example.com/modules/contrib/config_filter/
        https://www.example.com/modules/contrib/config_filter/README.md
        https://www.example.com/modules/contrib/config_filter/LICENSE.txt
    menu_link_attributes https://www.example.com/modules/contrib/menu_link_attributes/
        https://www.example.com/modules/contrib/menu_link_attributes/README.md
        https://www.example.com/modules/contrib/menu_link_attributes/LICENSE.txt
    migrate_plus https://www.example.com/modules/contrib/migrate_plus/
        https://www.example.com/modules/contrib/migrate_plus/README.txt
        https://www.example.com/modules/contrib/migrate_plus/LICENSE.txt
    checklistapi https://www.example.com/modules/contrib/checklistapi/
        https://www.example.com/modules/contrib/checklistapi/README.md
        https://www.example.com/modules/contrib/checklistapi/LICENSE.txt
    config_split https://www.example.com/modules/contrib/config_split/
        https://www.example.com/modules/contrib/config_split/README.md
        https://www.example.com/modules/contrib/config_split/LICENSE.txt
    migrate_tools https://www.example.com/modules/contrib/migrate_tools/
        https://www.example.com/modules/contrib/migrate_tools/README.txt
        https://www.example.com/modules/contrib/migrate_tools/LICENSE.txt
    config_ignore https://www.example.com/modules/contrib/config_ignore/
    schema_metatag https://www.example.com/modules/contrib/schema_metatag/
        https://www.example.com/modules/contrib/schema_metatag/README.txt
        https://www.example.com/modules/contrib/schema_metatag/LICENSE.txt
    tvi https://www.example.com/modules/contrib/tvi/
        https://www.example.com/modules/contrib/tvi/README.txt
        https://www.example.com/modules/contrib/tvi/LICENSE.txt
    svg_image https://www.example.com/modules/contrib/svg_image/
        https://www.example.com/modules/contrib/svg_image/README.md
        https://www.example.com/modules/contrib/svg_image/LICENSE.txt
    link_attributes https://www.example.com/modules/contrib/link_attributes/
        https://www.example.com/modules/contrib/link_attributes/README.md
        https://www.example.com/modules/contrib/link_attributes/LICENSE.txt
    facets https://www.example.com/modules/contrib/facets/
        https://www.example.com/modules/contrib/facets/README.txt
        https://www.example.com/modules/contrib/facets/LICENSE.txt
    yoast_seo https://www.example.com/modules/contrib/yoast_seo/
        https://www.example.com/modules/contrib/yoast_seo/README.txt
        https://www.example.com/modules/contrib/yoast_seo/LICENSE.txt
    panels_everywhere https://www.example.com/modules/contrib/panels_everywhere/
    stage_file_proxy https://www.example.com/modules/contrib/stage_file_proxy/
        https://www.example.com/modules/contrib/stage_file_proxy/README.md
        https://www.example.com/modules/contrib/stage_file_proxy/LICENSE.txt
    entity_reference_display https://www.example.com/modules/contrib/entity_reference_display/
        https://www.example.com/modules/contrib/entity_reference_display/README.md
        https://www.example.com/modules/contrib/entity_reference_display/LICENSE.txt
    we_megamenu https://www.example.com/modules/contrib/we_megamenu/
        https://www.example.com/modules/contrib/we_megamenu/README.md
        https://www.example.com/modules/contrib/we_megamenu/LICENSE.txt
    ckeditor_codemirror https://www.example.com/modules/ckeditor_codemirror/

[+] Aucun thème trouvé.

[+] Version(s) possible(s) :
    8.9.10
    8.9.11
    8.9.12
    8.9.13
    8.9.14
    8.9.15
    8.9.16
    8.9.17
    8.9.6
    8.9.7
    8.9.8
    8.9.9


[+] URL intéressantes trouvées :
    Admin par défaut - https://www.example.com/user/login
    Fichier de changelog par défaut - https://www.example.com/CHANGELOG.txt

[+] Scan terminé (0:16:25.708460 écoulé)

Scan CMS - analyse des résultats

L'outil Droopescan a permis d'identifier bon nombre des modules utilisés sur le site et a fourni des liens vers les fichiers qui ont rendu cette identification possible. Le script a identifié la version de Drupal utilisée comme étant une version avec une mise à jour mineure, de 8.9.6 à 8.9.17, et a détecté le chemin vers le panneau de connexion et le fichier CHANGELOG.txt. Malheureusement, dans le cas du site audité, il n'a pas été possible d'identifier le thème utilisé.

Droopescan - résumé

Le script Droopescan accélère la reconnaissance initiale du site audité. C'est une solution rapide, stable, constamment mise à jour qui permet d'utiliser le threading pour scanner plusieurs sites web simultanément et nécessite seulement Python. Le résultat du scan est présenté de manière conviviale. Il est possible de sauvegarder les résultats au format JSON, qui peut ensuite être traité de manière libre pour, par exemple, utiliser une application spécialement conçue à cet effet pour visualiser les résultats de manière encore plus conviviale ou pour utiliser les résultats dans les étapes suivantes de l'audit. Si vous êtes intéressé par le sujet du contrôle de la sécurité des applications, notre équipe de support Drupal peut vous aider grâce à leur expertise.

As part of Drupal support, we maintain existing websites and expand them with new functionalities