攻防世界 shrine 解题思路

时间:2024-04-03 18:37:21

进入题目

攻防世界 shrine 解题思路

发现一串源代码,但是不规则,所以我们ctrl+u查看源代码

攻防世界 shrine 解题思路

这样就整理好了代码,接下来就是审计代码了。我们来看看这个代码都写了啥。

首先导入了两个模块,一个flask,一个os。

然后用app.route装饰器传了两个路径

攻防世界 shrine 解题思路

那我们访问一下这个路径

攻防世界 shrine 解题思路

发现shrine后面的内容会被显示到浏览器上,那我我们可以试试是否存在模板注入构造payload

/shrine/{{2*2}}

攻防世界 shrine 解题思路

攻防世界 shrine 解题思路

发现进行了运算,那么可以判断这里是存在SSTI的。关于SSTI模板注入前面也碰到了不少题目,给大家放几个模板注入题目的链接,大家可以参考一下。

https://blog.csdn.net/xj28555/article/details/107347562

https://blog.csdn.net/xj28555/article/details/107182387

注入格式payload为

{{''.__class__.__mro__[2].__subclasses__()}}

但是仔细分析源代码会发现这里过滤了()和把'config','self'加入了黑名单

攻防世界 shrine 解题思路

那么我们原来格式的模板注入就不能用了,这个时候我们想到了内置函数get_flashed_messages(),又应为config在current_app里面,所以我们可以构造payload

{{get_flashed_messages.__globals__['current_app'].config['FLAG']}}

这样就可以绕过

攻防世界 shrine 解题思路

攻防世界 shrine 解题思路