Jinja2 SSTI过滤绕过问询:受限字符下构造指定Payload
Jinja2 SSTI 绕过字符限制的可行方案
核心绕过逻辑
针对无法使用\、|、,、.、_的限制,我们可以通过方括号属性访问和内置类型函数替代常规的点语法与下划线属性,构造符合要求的Payload:
最终可用Payload
{{ type('')['mro']()[1]['subclasses']() }}
分步拆解
- 替代
''.__class__:用type('')直接获取字符串的类对象,完全避开.和__(下划线)的使用,且无禁用字符。 - 访问
mro方法:通过['mro']的方括号形式替代.mro,实现属性访问,无需点语法。 - 获取object类:调用
mro()得到方法解析顺序列表,取索引[1]即可拿到object类。 - 获取子类列表:同样用
['subclasses']替代.subclasses,调用()执行方法,得到所有已加载的子类集合。
补充说明
如果type函数被过滤,可尝试寻找未被限制的内置对象路径,但当前场景下type('')是最直接、无额外依赖的可行方案。
内容的提问来源于stack exchange,提问作者faint
相关产品推荐
相关产品推荐

