用途
该技能面向获得书面授权的渗透测试场景,用于检测和利用服务端模板注入(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。
- 输出结构化的漏洞发现报告,包含漏洞类型、严重程度、位置、模板引擎、复现步骤、影响与修复建议。
使用方式
技能以工作流形式组织,分为六个步骤:
- 识别模板注入点:在错误页、个人资料字段、邮件模板、PDF/报告生成、搜索结果、404 页面、通知模板等位置注入通用检测载荷,并用 curl 观察是否返回计算结果(如 49)。
- 识别模板引擎:根据 {{7*'7'}} 返回 7777777(Jinja2)或 49(Twig)等特征判断引擎,也可用 tplmap 自动检测。
- 利用 Jinja2:读取 config、SECRET_KEY,通过 class.mro、subclasses、cycler、lipsum 等实现命令执行与文件读取。
- 利用 Twig、Freemarker、Velocity、Smarty、ERB、Pebble:使用各引擎专用载荷实现 RCE 或文件读取。
- 使用 tplmap 与 SSTImap 自动化:支持 GET/POST 参数、自定义请求头、--os-shell、--os-cmd、--download 等选项;也可结合 Burp Intruder 进行载荷模糊测试。
- 测试客户端模板注入:针对 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)技术,资料中未展开具体方法。
- 具体价格、平台支持范围、效果保证等信息暂未提供。