Drupal RCE
Last updated
Last updated
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
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 que se evalúe el código/snippets PHP incrustados." Pero a partir de la versión 8, este módulo no se instala por defecto.
Necesitas que el plugin php esté instalado (verifícalo accediendo a /modules/php y si devuelve un 403 entonces, existe, si no se encuentra, entonces el plugin php no está instalado)
Ve a Modules -> (Check) PHP Filter -> Save configuration
Luego haz clic en Add content -> Selecciona Basic Page o Article -> Escribe php shellcode en el cuerpo -> Selecciona PHP code en Text format -> Selecciona Preview
Finalmente, solo accede al nodo recién creado:
En las versiones actuales, ya no es posible instalar plugins solo teniendo acceso a la web después de la instalación predeterminada.
A partir de la versión 8, el Módulo PHP Filter no está instalado por defecto. Para aprovechar esta funcionalidad, tendríamos que instalar el módulo nosotros mismos.
Descargue la versión más reciente del módulo desde el sitio web de Drupal.
wget https://ftp.drupal.org/files/projects/php-8.x-1.1.tar.gz
Una vez descargado, vaya a Administración
> Informes
> Actualizaciones disponibles
.
Haga clic en Examinar
, seleccione el archivo del directorio al que lo descargó y luego haga clic en Instalar
.
Una vez que el módulo esté instalado, podemos hacer clic en Contenido
y crear una nueva página básica, similar a como lo hicimos en el ejemplo de Drupal 7. Nuevamente, asegúrese de seleccionar Código PHP
del menú desplegable Formato de texto
.
En las versiones actuales, ya no es posible instalar plugins solo teniendo acceso a la web después de la instalación predeterminada.
Un módulo con puerta trasera se puede crear agregando 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 para el tar.gz archivo.
Descargue el archivo y extraiga su contenido.
Crea un PHP web shell con el contenido:
A continuación, necesitamos crear un .htaccess
archivo para darnos acceso a la carpeta. Esto es necesario ya que Drupal niega el acceso directo a la /modules
carpeta.
La configuración anterior aplicará reglas para la carpeta / cuando solicitamos 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 http://drupal-site.local/admin/modules/install
. Navegue hasta el archivo comprimido de Captcha con puerta trasera y haga clic en Install
.
Una vez que la instalación sea exitosa, navegue a /modules/captcha/shell.php
para ejecutar comandos.
Publicación compartida por Coiffeur0x90
En el menú Extend (/admin/modules), puede activar lo que parecen ser complementos ya instalados. Por defecto, los complementos Media y Media Library no parecen estar activados, así que activémoslos.
Antes de la activación:
Después de la activación:
Aprovecharemos la función Configuration synchronization para volcar (exportar) y subir (importar) entradas de configuración de Drupal:
/admin/config/development/configuration/single/export
/admin/config/development/configuration/single/import
Parchear system.file.yml
Comencemos parcheando la primera entrada allow_insecure_uploads
de:
Archivo: system.file.yml
A:
Archivo: system.file.yml
Parchear field.field.media.document.field_media_document.yml
Luego, parchea la segunda entrada file_extensions
de:
Archivo: field.field.media.document.field_media_document.yml
A:
Archivo: field.field.media.document.field_media_document.yml
No lo uso en esta publicación del blog, pero se señala que es posible definir la entrada
file_directory
de manera arbitraria y que es vulnerable a un ataque de traversal de ruta (así que podemos retroceder dentro del árbol del sistema de archivos de Drupal).
El último paso es el más simple y se descompone en dos sub-pasos. El primero es subir un archivo en formato .htaccess para aprovechar las directivas de Apache y permitir que los archivos .txt sean interpretados por el motor PHP. El segundo es subir un archivo .txt que contenga nuestra carga útil.
Archivo: .htaccess
¿Por qué es genial este truco?
Porque una vez que el Webshell (que llamaremos LICENSE.txt) se coloca en el servidor web, podemos transmitir nuestros comandos a través de $_COOKIE
y en los registros del servidor web, esto aparecerá como una solicitud GET legítima a un archivo de texto.
¿Por qué nombrar nuestro Webshell LICENSE.txt?
Simplemente porque si tomamos el siguiente archivo, por ejemplo core/LICENSE.txt (que ya está presente en el núcleo de Drupal), tenemos un archivo de 339 líneas y 17.6 KB de tamaño, que es perfecto para agregar un pequeño fragmento de código PHP en el medio (ya que el archivo es lo suficientemente grande).
Archivo: LICENSE.txt parcheado
Primero, aprovechamos la función Agregar Documento (/media/add/document) para subir nuestro archivo que contiene las directivas de Apache (.htaccess).
Parte 3.2 (subir archivo LICENSE.txt)
Luego, aprovechamos nuevamente la función Agregar Documento (/media/add/document) para subir un Webshell oculto dentro de un archivo de licencia.
La última parte consiste en interactuar con el Webshell.
Como se muestra en la siguiente captura de pantalla, si la cookie esperada por nuestro Webshell no está definida, obtenemos el resultado subsiguiente al consultar el archivo a través de un navegador web.
Cuando el atacante establece la cookie, puede interactuar con el Webshell y ejecutar cualquier comando que desee.
Y como puedes ver en los registros, parece que solo se ha solicitado un archivo txt.
Gracias por tomarte el tiempo de leer este artículo, espero que te ayude a obtener algunas shells.
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)