用途:对疑似存在服务端模板注入(SSTI)的目标进行快速检测,并进一步识别所使用的模板引擎,为后续利用提供前提判断。
适用场景:发现用户输入回显到页面,或参数名包含 template、name、message、greeting 等可疑字段时使用。
主要能力与用法:
第一步,多语法探测。不同模板引擎语法不同,仅用单一 payload 不足以判断,需分别尝试:{{77}} 成功返回 49,候选为 Jinja2、Twig、Django DTL;${77} 返回 49,候选为 Freemarker、Velocity、EL;<%= 77 %> 返回 49,候选为 ERB(Ruby)、EJS;#{77} 返回 49,候选为 Pug、Slim;{77} 返回 49,候选为 Smarty。需注意:{{77}} 返回原样并不等于没有 SSTI,仍需测试其他语法。
第二步,引擎精确识别。确认存在 SSTI 后,利用 {{7*'7'}} 区分引擎(不同引擎利用方式完全不同):返回 7777777 判定为 Jinja2;返回 49 则为 Twig 或 Django DTL,此时若 {{_self.env}} 有输出为 Twig,若 {{settings.DEBUG}} 有输出为 Django DTL;若返回错误则为未知,需继续测试 ${} 语法。
第三步,后续操作。引擎确认后可参考 ssti-methodology 获取对应引擎的利用方法。关键提示:Django DTL 不支持 RCE,应优先尝试 {{flag}} 直接访问上下文变量。
限制:该技能仅做检测和引擎判断,不包含具体利用步骤;利用相关内容需参考 ssti-methodology。