一个 Rust 实现的 CVE-2018-7600 漏洞利用程序,针对存在漏洞的 Drupal 7 安装(<= 7.57)。该 CLI 复现如下 PoC 流程:通过 user/password 路径对缓存的可渲染表单进行投毒,提取 form_build_id,然后通过 file/ajax 端点触发缓存的载荷,借助 PHP 函数调用来实现远程代码执行。
CVE-2018-7600 是一个影响 Drupal 7(以及在不同场景下的 Drupal 8)的远程代码执行漏洞。在 Drupal 7 中,该问题源于某些可渲染数组在被缓存并随后渲染时缺乏足够的清理。通过向被缓存的端点注入特制的渲染元数据,攻击者可以在缓存数据随后被渲染或请求时,导致任意 PHP 函数被执行。
#post_render 回调是任意 PHP 函数(例如 passthru)。?q=user/password 提交特制的可渲染数组参数,从而使 Drupal 缓存被投毒的表单。form_build_id 后,PoC 通过在 POST 请求体中携带 form_build_id 调用 /file/ajax/name/#value/<form_build_id> 来触发载荷。当 Drupal 渲染缓存的元素时,#post_render 回调会以攻击者控制的标记执行,从而实现命令执行。该 Rust CLI 针对目标 Drupal 7 站点构造并执行两步序列(先投毒后触发),解析 HTML 响应以获取 form_build_id,然后触发 file/ajax 端点以执行攻击者指定的函数。
由于客户端禁用了证书验证(以复现原始 PoC 中传递的 verify=False),该工具将适用于使用自签名或其他无效 TLS 证书的目标。如果你更倾向于要求有效证书,可以在源码中更改此行为。
基本用法(默认命令为 whoami,默认函数为 passthru):
cargo run -- -u http://target.com/
运行自定义命令和函数:
cargo run -- -u http://target.com/ -c "whoami" -f "passthru"
使用 HTTP/S 代理(格式:http://127.0.0.1:8080/):
cargo run -- -u http://target.com/ -p http://127.0.0.1:8080/
CLI 选项摘要:
-u, target:目标 Drupal 站点的 URL(例如 http://target.com/)。-c, --command:要在目标上执行的命令(默认值:whoami)。-f, --function:用作攻击向量的 PHP 函数(默认值:passthru)。-p, --proxy:可选的代理 URL,用于路由请求。完整流程示例:
user/password 表单进行投毒,插入 #post_render 回调以及包含命令的 #markup。form#user-pass 中找到 form_build_id。form_build_id 向 ?q=file/ajax/name/#value/<form_build_id> 发送 POST 请求,以触发渲染并执行命令。此工具仅用于教育和已获授权的渗透测试。请负责任地使用,并且仅在您拥有或获得明确许可的系统上使用。