Page cover

💣Drupal - Ataques

Ahora que hemos confirmado que nos enfrentamos a Drupal y hemos identificado la versión, veamos qué configuraciones erróneas y vulnerabilidades podemos descubrir para intentar obtener acceso a la red interna.

A diferencia de algunos CMS, obtener un shell en un host Drupal a través de la consola de administración no es tan fácil como simplemente editar un archivo PHP que se encuentra dentro de un tema o cargar un script PHP malicioso.


Aprovechar el módulo de PHP Filter

En versiones anteriores de Drupal (antes de la versión 8), era posible iniciar sesión como administrador y habilitar el módulo PHP filter que "Permite evaluar fragmentos/código PHP incrustados".

Desde aquí, podemos marcar la casilla de verificación junto al módulo y desplazarnos hacia abajo hasta Save configuration. A continuación, podemos ir a Contenido --> Agregar contenido y crear una Basic page.

Ahora podemos crear una página con un fragmento de código PHP malicioso como el que se muestra a continuación. Hemos nombrado el parámetro con un hash md5 en lugar del común cmd para ponernos en práctica y no dejar una puerta abierta a un atacante durante nuestra evaluación. Si usamos el estándar, system($_GET['cmd']);nos exponemos a un posible ataque "de pasada" que se cruce con nuestro webshell. Aunque es poco probable, ¡más vale prevenir que curar!

También queremos asegurarnos de configurar el menú desplegable Text format en PHP code. Después de hacer clic en guardar, seremos redirigidos a la nueva página, en este ejemplo http://drupal-qa.inlanefreight.local/node/3. Una vez guardado, podemos solicitar la ejecución de comandos en el navegador agregando ?dcfdd5e021a869fcc6dfaef8bf31377e=id al final de la URL para ejecutar el comando id o usar cURL en la línea de comandos. Desde aquí, podríamos usar un comando bash de una sola línea para obtener acceso al reverse shell.

A partir de la versión 8, el módulo Filtro PHP no se instala de forma predeterminada. Para aprovechar esta funcionalidad, tendríamos que instalar el módulo nosotros mismos. Dado que estaríamos modificando y añadiendo algo a la instancia Drupal del cliente, es posible que queramos consultarlo primero con ellos. Comenzaremos descargando la versión más reciente del módulo desde el sitio web de Drupal.

Una vez descargado vamos a Administration>> .ReportsAvailable updates

Nota: La ubicación puede variar según la versión de Drupal y puede estar en el menú Extender.

Desde aquí, haz clic en Browse, selecciona el archivo del directorio donde lo descargamos y luego haz clic en Install.

Una vez instalado el módulo, podemos hacer clic en el Content y crear una nueva página básica, de forma similar a como lo hicimos en el ejemplo de Drupal 7. Nuevamente, asegúrese de seleccionar PHP code en el menú desplegable Text format.

Con cualquiera de estos ejemplos, debemos mantener informado a nuestro cliente y obtener su permiso antes de realizar este tipo de cambios. Además, una vez que hayamos terminado, debemos eliminar o deshabilitar el módulo PHP Filter y eliminar todas las páginas que hayamos creado para obtener la ejecución remota del código.


Cómo cargar un módulo con un backdoor

Drupal permite a los usuarios con los permisos adecuados cargar un nuevo módulo. Se puede crear un módulo con puerta trasera añadiendo un shell a un módulo existente. Los módulos se pueden encontrar en el sitio web drupal.org. Elijamos un módulo como CAPTCHA . Desplácese hacia abajo y copie el enlace del archivo tar.gz.

Descargue el archivo y extraiga su contenido.

Cree un shell web PHP con el contenido:

A continuación, debemos crear un archivo .htaccess para darnos acceso a la carpeta. Esto es necesario porque Drupal niega el acceso directo a la carpeta /modules.

La configuración anterior aplicará reglas para la carpeta / cuando solicitemos un archivo en /modules. Copie ambos archivos en la carpeta captcha y cree un archivo.

Suponiendo que tenemos acceso administrativo al sitio web, haga clic en Manage y luego en Extend en la barra lateral. A continuación, haga clic en el botón + Install new module y seremos llevados a la página de instalación, como:

Busque el archivo Captcha con backdoor y haga clic en Install.

Una vez que la instalación se realice correctamente, busque /modules/captcha/shell.php para ejecutar comandos.


Vulnerabilidades conocidas

A lo largo de los años, el núcleo de Drupal ha sufrido algunas vulnerabilidades graves de ejecución remota de código, cada una de ellas denominada Drupalgeddon. Al momento de escribir este artículo, existen 3 vulnerabilidades de Drupalgeddon.

  • CVE-2014-3704 , conocida como Drupalgeddon, afecta a las versiones 7.0 a 7.31 y se corrigió en la versión 7.32. Se trataba de una falla de inyección SQL autenticada previamente que podía utilizarse para cargar un formulario malicioso o crear un nuevo usuario administrador.

  • CVE-2018-7600 , también conocida como Drupalgeddon2, es una vulnerabilidad de ejecución remota de código que afecta a las versiones de Drupal anteriores a 7.58 y 8.5.1. La vulnerabilidad se produce debido a una limpieza de entrada insuficiente durante el registro del usuario, lo que permite la inyección maliciosa de comandos a nivel del sistema.

  • CVE-2018-7602 , también conocida como Drupalgeddon3, es una vulnerabilidad de ejecución remota de código que afecta a varias versiones de Drupal 7.x y 8.x. Esta falla aprovecha una validación incorrecta en la API de formularios.

Veamos cómo explotar cada uno de ellos.


Drupalgeddon

Como se indicó anteriormente, esta falla se puede explotar aprovechando una inyección SQL previa a la autenticación que se puede utilizar para cargar código malicioso o agregar un usuario administrador. Intentemos agregar un nuevo usuario administrador con este script de prueba de concepto . Una vez que se agrega un usuario administrador, podemos iniciar sesión y habilitar el PHP Filtermódulo para lograr la ejecución remota de código.

Al ejecutar el script con la flag -h nos muestra el menú de ayuda.

Aquí vemos que debemos proporcionar la URL de destino y un nombre de usuario y contraseña para nuestra nueva cuenta de administrador. Ejecutemos el script y veamos si obtenemos un nuevo usuario administrador.

Ahora veamos si podemos iniciar sesión como administrador. ¡Podemos! Ahora, desde aquí, podemos obtener un shell a través de los diversos medios que se comentaron anteriormente en esta sección.

También podríamos usar el módulo Metasploit exploit/multi/http/drupal_drupageddon para explotar esto.


Drupageddon2

Podemos usar esta PoC para confirmar esta vulnerabilidad.

Podemos comprobarlo rápidamente con cURL y ver que el archivo hello.txt realmente se ha cargado.

Ahora modifiquemos el script para obtener ejecución de código remoto cargando un archivo PHP malicioso.

A continuación, reemplacemos el echocomando en el script de explotación con un comando para escribir nuestro script PHP malicioso.

A continuación, ejecute el script de explotación modificado para cargar nuestro archivo PHP malicioso.

Finalmente, podemos confirmar la ejecución remota de código usando cURL.


Drupageddon3

Drupalgeddon3 es una vulnerabilidad de ejecución remota de código autenticado que afecta a varias versiones del núcleo de Drupal. Requiere que un usuario tenga la capacidad de eliminar un nodo. Podemos explotar esto usando Metasploit, pero primero debemos iniciar sesión y obtener una cookie de sesión válida.

imagen

Una vez que tenemos la cookie de sesión, podemos configurar el módulo de exploit en metasploit de la siguiente manera.

Si tiene éxito, obtendremos un shell en el host de destino.


Caso práctico

Trabaja con todos los ejemplos de esta sección y obtén RCE de múltiples maneras a través de las distintas instancias de Drupal en el host de destino. Cuando hayas terminado, envía el contenido del archivo flag.txt en el directorio /var/www/drupal.inlanefreight.local.

Vamos a usar drupaggedon

Vamos al directorio /var/www:

Accedemos a drupal.inlanefreight.local:

Leemos la flag:

Última actualización

¿Te fue útil?