WesternCTF2018 - Web - shrine

AI-摘要
Microsoft Xiaoice's GPT
AI初始化中...
介绍自己 🙈
生成本文简介 👋
推荐相关文章 📖
前往主页 🏠
前往爱发电购买
WesternCTF2018 - Web - shrine
Hunter题目信息
| 项 | 内容 |
|---|---|
| 比赛 | WesternCTF2018 |
| 方向 | Web |
| 难度 | Easy |
| 环境 | 授权靶场(已脱敏) |
信息收集
访问 / 直接返回源码(open(__file__).read()),属源码泄漏。题目与练习场的 ID、friendly_id 等标识已脱敏。
1 | import flask |
漏洞分析
漏洞类型:Flask SSTI(模板注入)+ 黑名单绕过 + 括号过滤绕过。
关键点:
- flag 在
app.config['FLAG'](从环境变量FLAG读取)。 /shrine/<path:shrine>把路径作为 Jinja2 模板渲染 → SSTI。- 黑名单:
config、self被前置{% set config=None%}{% set self=None%}覆盖为 None。 - 过滤
(和):不能用函数调用。
利用过程
绕过思路:
()被过滤 → 用字典下标['...']代替函数调用。config黑名单 → 通过url_for.__globals__['current_app'].config的属性访问(.config),不受set config=None影响。
url_for 是 Flask 全局函数,url_for.__globals__ 是其全局命名空间字典,包含 current_app;current_app.config['FLAG'] 直接读取 flag。
1 | GET /shrine/{{url_for.__globals__['current_app'].config['FLAG']}} |
响应正文即返回 flag。
完整 EXP
payload 归档内容并入本节。访问 / 拿到源码,确认 flag 在 app.config['FLAG'],绕过括号过滤与 config / self 黑名单后的最终请求:
1 | GET /shrine/{{url_for.__globals__['current_app'].config['FLAG']}} |
Flag
1 | flag{xxxx} |
(服务端响应中返回,真实值已脱敏。)
踩坑与总结
- 源码泄漏(
/返回__file__)是突破口,先读源码再定利用链。 - SSTI 通过
url_for.__globals__访问current_app.config。 - 用字典下标
['FLAG']绕过括号过滤。 - 用
.config属性访问绕过config黑名单(set config=None只影响裸变量名)。
评论
匿名评论隐私政策
✅ 你无需删除空行,直接评论以获取最佳展示效果







