Shrine-wp

打开题目 给了个python代码:

图片[1]-Shrine-wp-Drton1博客

F12看源码: 把代码整理一下放在本地

这是个关于flask的SSTI注入的漏洞 不懂移步学基础

Python-Flask(Jinja2)注入漏洞原理复现-Drton1博客 (yanyang.ink)

图片[2]-Shrine-wp-Drton1博客

开始审计:

首页就是把本程序给显示到页面,没什么好说的, 这里注意到他的Flag是系统变量 添加到 flask里面。

所以我们想拿flag应该是要看这个flask的变量了。

再看下面一个页面shrine 我,我们先试试有没有SSTI:

图片[3]-Shrine-wp-Drton1博客

存在这个漏洞的 ,但是我们也看到了有一个safe_jinja 函数

会对我们的输入内容进行过滤 具体过滤规则:

def safe_jinja(s):
        s = s.replace('(', '').replace(')', '')
        blacklist = ['config', 'self']
        return ''.join(['{{% set {}=None%}}'.format(c) for c in blacklist]) + s

会删除我们输入的括号 所以不能输入括号

(['{{% set {}=None%}}'.format(c) for c in blacklist])

这句代码意思是把黑名单里面所有的变量 值给设置成 None

这个啥意思呢 如果他不设置的 话 我们直接 {{config}}就可以查看到所有变量 就拿到flag了。 但是现在它设置了 我们就不能用了。

想办法绕过:

{{url_for.**globals**[‘current_app’].config}} 这个不难理解 我们利用别的函数去查看当前flask的变量。

利用python对象之间的引用关系来调用被禁用的函数对象

图片[4]-Shrine-wp-Drton1博客

就拿到flag了。

或者只显示flag {{url_for.**globals**[‘current_app’].config[’FLAG’]}}

图片[5]-Shrine-wp-Drton1博客

而根据 利用python对象之间的引用关系来调用被禁用的函数对象 我们知道能调用config的对象不止url_for 类

还有别的 如:get_flashed_messages

我们利用它也可以查看环境变量 拿到flag:

图片[6]-Shrine-wp-Drton1博客

© 版权声明
THE END
喜欢就支持一下吧
点赞11 分享
评论 抢沙发

请登录后发表评论