SuperAPI AI 工具集

exploiting-template-injection-vulnerabilities

安全与审计

查看项目

更新于 10-15 13:52

技能介绍

用途

该技能面向获得书面授权的渗透测试场景,用于检测和利用服务端模板注入(Server-Side Template Injection,SSTI)漏洞,覆盖 Jinja2、Twig、Freemarker、Velocity、Mako、Pebble、ERB、Smarty 等模板引擎,最终目标是在目标服务器上实现远程代码执行(RCE)。同时也包含客户端模板注入(CSTI)的测试,用于评估 AngularJS、Vue 等前端模板表达式注入导致的 XSS。

主要能力

  • 识别模板注入点:在用户输入被服务端模板引擎渲染的参数处注入数学表达式(如 {{77}}、${77}、#{77}、<%= 77 %> 等)进行探测。
  • 判定模板引擎类型:通过差异化的表达式结果区分 Jinja2、Twig、Freemarker、Velocity、Thymeleaf、ERB、EJS、Smarty、Pebble 等引擎。
  • 针对不同引擎的利用:包括 Jinja2 的配置读取、密钥获取、通过 MRO/子类遍历、cycler、lipsum 等方式实现 RCE 与文件读取;Twig、Freemarker、Velocity、Smarty、ERB、Pebble 的对应载荷。
  • 自动化利用:使用 tplmap 与 SSTImap 进行引擎检测、OS 命令执行、文件下载等。
  • 客户端模板注入测试:针对 AngularJS、Vue 的表达式注入载荷,检测 XSS。
  • 输出结构化的漏洞发现报告,包含漏洞类型、严重程度、位置、模板引擎、复现步骤、影响与修复建议。

使用方式

技能以工作流形式组织,分为六个步骤:

  1. 识别模板注入点:在错误页、个人资料字段、邮件模板、PDF/报告生成、搜索结果、404 页面、通知模板等位置注入通用检测载荷,并用 curl 观察是否返回计算结果(如 49)。
  2. 识别模板引擎:根据 {{7*'7'}} 返回 7777777(Jinja2)或 49(Twig)等特征判断引擎,也可用 tplmap 自动检测。
  3. 利用 Jinja2:读取 config、SECRET_KEY,通过 class.mro、subclasses、cycler、lipsum 等实现命令执行与文件读取。
  4. 利用 Twig、Freemarker、Velocity、Smarty、ERB、Pebble:使用各引擎专用载荷实现 RCE 或文件读取。
  5. 使用 tplmap 与 SSTImap 自动化:支持 GET/POST 参数、自定义请求头、--os-shell、--os-cmd、--download 等选项;也可结合 Burp Intruder 进行载荷模糊测试。
  6. 测试客户端模板注入:针对 AngularJS、Vue 的表达式注入载荷,检测 XSS。

适用场景

  • 授权渗透测试中,用户输入经由服务端模板引擎渲染的场合。
  • 测试错误页面、邮件模板、PDF 生成器、报告构建器等包含用户数据的组件。
  • 评估允许用户自定义模板或通知消息的应用。
  • 在参数反射算术结果(如 {{7*7}} 返回 49)时识别潜在 SSTI。
  • 对 CMS 平台、营销工具或任何具备模板功能的应用进行安全评估。
  • 测试 AngularJS/Vue 等客户端模板表达式注入。

限制与前提

  • 必须获得书面渗透测试授权,且 RCE 测试在授权范围内。
  • 需要 Burp Suite Professional 用于拦截和修改模板参数。
  • 需要 tplmap(git clone https://github.com/epinna/tplmap.git)与 SSTImap(pip install sstimap)等工具。
  • 需要 curl 进行手动载荷测试。
  • 需要了解 Jinja2、Twig、Freemarker、Velocity、Mako、Pebble、ERB、Smarty 等模板引擎。
  • 盲注 SSTI(输出不可见)需要带外(OOB)技术,资料中未展开具体方法。
  • 具体价格、平台支持范围、效果保证等信息暂未提供。