Skip to content
KitploitKITPLOIT
工具博客
提交
工具博客
提交

黑客、渗透测试和网络安全工具,武装您的安全武器库!

Kitploit 是一个黑客、网络安全和渗透测试工具的目录。发现最新的项目更新,查找漏洞、分析系统、自动化测试并加强你的安全。

··订阅源·联系·隐私·© 2026 Kitploit

工具目录

分类

查看所有分类
Loading categories
drupalgeddon2-cli — Drupalgeddon2 (CVE-2018-7600) PoC 的 CLI 重写版 — 用于授权测试/教育 | Kitploit
工具/GitHubGitHub/nayem-m/drupalgeddon2-cli
Payload生成漏洞利用Web应用程序漏洞利用渗透测试学习与教育实验室与实践
GitHubnayem-m/drupalgeddon2-cli

drupalgeddon2-cli

Drupalgeddon2 (CVE-2018-7600) PoC 的 CLI 重写版 — 用于授权测试/教育

查看仓库
2个月前尚未审核

最受欢迎

查看全部 →

发现我们社区最常用的工具。

探索所有工具

浏览我们的工具集合

查看所有工具 →
分享

drupalgeddon2-cli

一个命令行版本的 Drupalgeddon2 (CVE-2018-7600) 概念验证工具,作为学习练习在完成 Hack The Box Academy Attacking Common Applications 模块时编写。

[!WARNING] 仅限授权的安全测试和教育用途。 在非您拥有的或未经明确书面许可的系统上运行此工具,在大多数司法管辖区属于违法行为。请参阅 法律与负责任使用。

[!NOTE] 实现借助 AI 辅助编写。 请参阅 关于作者身份的说明。


背景——我为何构建此工具

Drupal 是 HTB Academy 的 Attacking Common Applications 模块中涵盖的“常见应用程序”之一,而 CVE-2018-7600(“Drupalgeddon2”)是其典型的未授权 RCE 示例。我没有简单地复制粘贴一次性脚本并继续前进,而是希望真正理解导致该漏洞的 Form API 注入——因此我重新构建了公开的 PoC,将其作为一种学习练习。

广泛引用的原始 PoC a2u/CVE-2018-7600(由 Vitalii Rudnykh 编写)非常适合演示该漏洞,但它要求您每次运行时都直接编辑 payload。在实验室/CTF 工作流程中——针对不同目标重复运行,希望获得可重复的立足点——这会变得繁琐。此版本将其转变为合适的 CLI 工具:

  • 目标和命令作为参数传递;无需每次运行修改源代码
  • 自动部署一个微型 PHP webshell(易受攻击的服务器自行写入文件),提供稳定、可重复使用的立足点
  • 您可以执行单个命令、进入交互式伪 shell,或者仅部署 shell 后退出
  • shell 文件名和命令参数每次运行都会随机化,因此重复运行不会冲突,并且您不会留下可预测的 cmd= 后门

它特意限定在已知且早已修补的漏洞(于 2018 年披露)范围内。目标是理解技术并提供一个清晰、有文档记录的参考实现——而非新颖的攻击能力。

关于作者身份的说明

本仓库中的代码是在我完成 HTB 模块时,借助 AI 辅助(Anthropic 的 Claude) 编写的。我设定了设计目标和需求——CLI 人机工程学、自动部署 webshell、交互模式、随机化 shell 名称和参数——并审查和测试了结果。我公开这一点是因为这是诚实之举,也因为这些代码的价值在于理解和工程决策,而非每一行的作者身份。

功能

  1. 利用 CVE-2018-7600 的 Form API 注入在目标上放置一个小型 PHP webshell。易受攻击的服务器自行解码并写入文件,从而避免了注入命令中的引号/转义问题。
  2. 通过 --cmd 在该 shell 上运行命令,或通过 --shell 进入交互式伪 shell。
  3. 在报告成功之前,验证 shell 确实已落地并可执行(它会回显一个随机令牌并检查返回结果)。

受影响版本

CVE-2018-7600 影响:

  • Drupal 7.x 早于 7.58
  • Drupal 8.x 早于 8.5.1(以及 8.3.x < 8.3.9 和 8.4.x < 8.4.6)

此实现针对 Drupal 8 的 Form API 向量(user/register AJAX 端点)。Drupal 7 可通过不同的端点/payload 利用,此处未涵盖。

已修补的版本(7.58 / 8.5.1 及更高版本)不受影响。

要求

  • Python 3.7+
  • requests
root@kitploit:~
pip install requests

用法

root@kitploit:~
# 一次性命令
python3 drupalgeddon2.py -u http://target/ -c id

# 交互式伪 shell
python3 drupalgeddon2.py -u http://target/ --shell

# 仅部署 shell,不运行任何命令
python3 drupalgeddon2.py -u http://target/ --deploy-only

# 通过 Burp 路由,忽略代理的自签名证书
python3 drupalgeddon2.py -u http://target/ -c id --proxy http://127.0.0.1:8080 -k

工作原理

CVE-2018-7600 是 Drupal Form API 中的输入净化失败。Drupal 将表单表示为嵌套的可渲染数组,以 # 开头的数组键被视为特殊的渲染属性而非用户数据。补丁(SA-CORE-2018-002)添加了净化措施,以从用户提供的输入中去除这些以 # 为前缀的键。

在补丁之前,未认证的攻击者可以将渲染属性注入到表单元素中,该元素会被 Drupal 的 AJAX 处理器处理。通过提交例如以下属性:

  • #post_render — Drupal 在渲染后调用的可调用对象列表,以及
  • #markup — 传递给它们的参数

针对用户注册表单的 mail 元素,会导致 Drupal 在渲染步骤中调用一个任意的 PHP 函数(此处为 exec),并传入攻击者控制的输入——即实现远程代码执行,无需任何身份验证。

此 PoC 利用该原语在本地 base64 编码一行 PHP shell,让服务器将其解码到 webroot 的文件中,然后通过正常的 GET 请求与该文件交互。

检测与补救

如果您处于防御方:

补救措施

  • 升级到 Drupal 7.58 / 8.5.1 或更高版本(应用 SA-CORE-2018-002)。这是唯一的真正修复。
  • 如果无法立即修补,Drupal 安全团队在披露时发布了缓解补丁——但强烈建议升级。

检测思路

  • 检查发往表单/AJAX 端点的 POST body 中是否包含渲染数组键:#post_render、#markup、#type、#lazy_builder 等。合法的表单提交不包含这些。
  • 标记发往 …/user/register?element_parents=…&_wrapper_format=drupal_ajax 且携带可疑参数的请求。
  • 关联对 AJAX 表单端点的 POST 请求与随后对 webroot 中新创建的 .php 文件的 GET 请求。
  • 监控 Drupal webroot 中意外的文件创建,以及简短的单参数 PHP 文件(system($_GET[...]) webshell)。
  • 这些行为可直接编码为 Suricata/Snort 签名或基于 Web 服务器日志的 Sigma 规则。

致谢

  • 原始 PoC 及核心技术:Vitalii Rudnykh — a2u/CVE-2018-7600
  • 漏洞披露:Drupal 安全团队 — SA-CORE-2018-002
  • 为此重写提供参考的技术深度分析文章:Check Point 和 Ambionics 关于 Drupalgeddon2 的研究报告
  • 此 CLI 重写:本人,借助 AI 辅助(请参阅 关于作者身份的说明)

法律与负责任使用

此工具发布用于教育和授权的安全测试——您自己的实验室环境、HTB/CTF 目标,或您拥有明确书面许可进行评估的系统。未经授权访问计算机系统属于犯罪行为,违反英国《1990年计算机滥用法》、美国《计算机欺诈和滥用法》以及其他地区的类似法律。您对使用方式负全部责任。作者对滥用或造成的任何损害不承担任何责任。

许可证

MIT

下载工具
标志描述
-u, --url(必需) 目标基础 URL,例如 http://target/
-c, --cmd要在目标上运行的单个命令
--shell进入交互式伪 shell
--deploy-only仅部署 webshell,不运行任何命令
--shell-name已部署 shell 的文件名(默认:随机 .php)
--paramshell 的 GET 参数名称(默认:随机 md5)
--proxy代理 URL,例如 http://127.0.0.1:8080
-k, --insecure禁用 TLS 验证(用于自签名代理证书)
--timeout每个请求的超时时间(秒)(默认:15)