| name | eni-redteam-ssti-detail-pack |
| description | [DOCUMENTATION ONLY] [仅文档] 授权范围内服务端模板注入测试的领域路由与边界手册,覆盖 Jinja2、Twig、Freemarker、Velocity 与 Thymeleaf 引擎。当任务落入 SSTI 领域、需要明确范围、证据、转向或退出标准时加载。 |
SSTI 纵深手册
文档性质:本手册属于纯文档资源(DOCUMENTATION ONLY / 仅文档),提供方法框架与检查清单,不捆绑任何可执行脚本。
一、手册职责与领域声明
当前任务归类于 SSTI 服务端模板注入测试 领域,测试范围限定在服务端模板注入面:Jinja2、Twig、Freemarker、Velocity、Thymeleaf 等模板引擎。
本手册只为代理解决三件事:划清测试边界、受阻时给出转向选项、收尾时卡住证据质量。它不教授固定攻击步骤,不替代用户授权范围,不把任何推测当作结论。
若 scope、target 或授权边界未明确,任务直接进入 blocked 或 plan-only 状态,不进行真实执行。
二、攻击面地形
SSTI 的入口是"用户输入被模板引擎求值"。凡是拼进模板的用户输入——姓名、标题、URL 片段、邮件模板字段——都是潜在注入点。判断分两步:先确认输入真的进入了模板上下文,再确认模板语法能够逃逸到代码执行。不同引擎的逃逸路径差异巨大:Jinja2 走 MRO 链与 globals 字典,Twig 走环境对象回调注册,Freemarker 走 Execute 工具类,Velocity 走反射,Thymeleaf 走表达式预处理。
| 入口 | 典型载体 | 观察方式 |
|---|
| 模板字段 | 用户名、标题、邮件 | 表达式回显验证 |
| 渲染参数 | URL 片段、模板名 | 注入后渲染结果 |
| 文件上传 | 模板文件 | 上传后渲染触发 |
| 配置面 | 模板路径、全局变量 | 上下文对象可达性 |
| 盲面 | 无回显渲染 | 时间差与带外探测 |
三、变体速览
| 变体 | 触发条件 | 高价值场景 |
|---|
| Jinja2 | {{...}} 被求值 | MRO 链直达 RCE |
| Twig | {{...}} 被求值 | 回调注册执行 |
| Freemarker | <#...> 被求值 | Execute 工具类 |
| Velocity | #set/#class 语法 | 反射加载 Runtime |
| Thymeleaf | 表达式预处理 | T() 表达式命令执行 |
四、执行纪律与禁区
- 只围绕用户明确提供或授权的目标工作,不超出目标域名、IP、应用或系统边界。
- 不得通过 RCE 执行破坏性系统命令。
- 证据纪律:不伪造、不夸大、不补写不存在的证据;不在缺少证据时声明任务完成。
- 不把候选风险、公开 CVE 或组件指纹直接等同于可利用漏洞——指纹只是线索,验证才是结论。
- 若 scope、target 或授权边界不明确,进入 blocked 或 plan-only,不进行真实执行。
五、受阻转向
- 模板引擎未知 → 使用探测 payload({{77}}、${77}、<%= 7*7 %>)识别引擎。
- 沙箱限制 → 尝试 MRO 链遍历、内置对象逃逸、已知 gadget chain。
- 输入被过滤 → 编码绕过、字符串拼接、属性访问替代语法。
- 探测无回显 → 盲注时间差、换探测语法、尝试其他参数。
- 所有模板点均安全 → 记录已测试模板点,回退到上级知识库重新选择测试方向。
六、收尾与证据标准
正向退出(有发现)
- 关键结论至少具备 supported 级证据;漏洞成立、影响判断或最终报告必须有 verified 级证据。
- 交付 reproduction 证据包,须包含:完整 HTTP 请求(含模板注入 payload);模板执行证明(计算结果、命令输出、文件读取);引擎类型标注与 RCE 可行性评估。
- 每份 artifact 能说明来源、目标、时间、观察结果和判断依据。
负向退出(未发现)
- 最少尝试次数:3。
- 记录已测试模板点与失败原因,提交 negative report 后回退上级。
- 措辞纪律:只输出"当前证据下未发现",不输出"确认不存在"。