Drupal RCE
Last updated
Last updated
Aprenda e pratique Hacking AWS:HackTricks Training AWS Red Team Expert (ARTE) Aprenda e pratique Hacking GCP: HackTricks Training GCP Red Team Expert (GRTE)
Em 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 códigos/snippets PHP incorporados sejam avaliados." Mas a partir da versão 8, este módulo não é instalado por padrão.
Vá para /modules/php e se um erro 403 for retornado, então o plugin PHP filter está instalado e você pode continuar
Se não, vá para Modules
e marque a caixa de PHP Filter
e depois em Save configuration
Então, para explorá-lo, clique em Add content
, selecione Basic Page
ou Article
e escreva a backdoor PHP, depois selecione PHP
como formato de texto e finalmente selecione Preview
Para acioná-lo, basta acessar o nó recém-criado:
Nas versões atuais, não é mais possível instalar plugins apenas tendo acesso à web após a instalação padrão.
A partir da versão 8, o PHP Filter não é instalado por padrão. Para aproveitar essa funcionalidade, teríamos que instalar o módulo nós mesmos.
Baixe a versão mais recente do módulo no site do Drupal.
wget https://ftp.drupal.org/files/projects/php-8.x-1.1.tar.gz
Após o download, vá para Administração
> Relatórios
> Atualizações disponíveis
.
Clique em Procurar
, selecione o arquivo do diretório para o qual o baixamos e clique em Instalar
.
Uma vez que o módulo esteja 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
.
Nas versões atuais, não é mais possível instalar plugins apenas tendo acesso à web após a instalação padrão.
Era possível baixar um módulo, adicionar um backdoor a ele e instalá-lo. Por exemplo, baixando o módulo Trurnstile em formato comprimido, criando um novo arquivo de backdoor PHP dentro dele, permitindo o acesso ao arquivo PHP com um arquivo .htaccess
:
E então indo para http://drupal.local/admin/modules/install
para instalar o módulo com backdoor e acessar /modules/turnstile/back.php
para executá-lo.
Post compartilhado por Coiffeur0x90
No menu Extend (/admin/modules), você pode ativar o que parecem ser plugins já instalados. Por padrão, os plugins Media e Media Library não parecem estar ativados, então vamos ativá-los.
Antes da ativação:
Após a ativação:
Vamos aproveitar o recurso Sincronização de Configuração para despejar (exportar) e fazer upload (importar) entradas de configuração do Drupal:
/admin/config/development/configuration/single/export
/admin/config/development/configuration/single/import
Patch system.file.yml
Vamos começar patchando a primeira entrada allow_insecure_uploads
de:
Arquivo: system.file.yml
Para:
Arquivo: system.file.yml
Patch field.field.media.document.field_media_document.yml
Em seguida, aplique o patch na segunda entrada file_extensions
de:
Arquivo: field.field.media.document.field_media_document.yml
Para:
Arquivo: field.field.media.document.field_media_document.yml
Eu não uso isso neste post do blog, mas é importante notar que é possível definir a entrada
file_directory
de maneira arbitrária e que é vulnerável a um ataque de traversal de caminho (então podemos voltar dentro da árvore do sistema de arquivos do Drupal).
A última etapa é a mais simples e é dividida em dois subpassos. O primeiro é fazer o upload de um arquivo no formato .htaccess para aproveitar 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
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 LICENSE.txt?
Simplesmente porque se pegarmos o seguinte arquivo, por exemplo core/LICENSE.txt (que já está presente no núcleo do Drupal), temos um arquivo de 339 linhas e 17,6 KB de tamanho, que é perfeito para adicionar um pequeno trecho de código PHP no meio (já que o arquivo é grande o suficiente).
Arquivo: LICENSE.txt corrigido
Primeiro, aproveitamos o recurso Adicionar Documento (/media/add/document) para fazer o upload do nosso arquivo contendo as diretivas do Apache (.htaccess).
Parte 3.2 (upload arquivo LICENSE.txt)
Em seguida, aproveitamos novamente o recurso Adicionar Documento (/media/add/document) para fazer o upload de um Webshell oculto dentro de um arquivo de licença.
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 Web.
Quando o atacante define o cookie, ele pode interagir com o Webshell e executar quaisquer 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 ele ajude você a obter alguns shells.
Aprenda e pratique Hacking AWS:HackTricks Training AWS Red Team Expert (ARTE) Aprenda e pratique Hacking GCP: HackTricks Training GCP Red Team Expert (GRTE)