题目环境分析

首先开启靶机获取到题目如下

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/<path: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]) + sreturn flask.render_template_string(safe_jinja(shrine))if __name__ == '__main__':
app.run(debug=True)

第一步对题目给出代码进行分析

@app.route('/')
def index():
return open(__file__).read()

默认访问路径为‘/’,那么会将源代码读取出来,也就是默认页面所呈现的。

@app.route('/shrine/<path: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]) + sreturn flask.render_template_string(safe_jinja(shrine))

这边访问‘/shrine/’路径下,传入一个值,返回的是

flask.render_template_string(safe_jinja(shrine))

我们输入的值首先被传到了safe_jinja函数,然后由flask.render_template_string进行渲染
对于没有用过flask框架的我来说理解safe_jinja函数最后的return操作有点困难,我本地执行了一下

很容易理解的是,我们传入的s会首先被去除‘(’,‘)’,然后在最后加上处理后的s,前面是

{% set config=None%}{% set self=None%}

可以知道是结合flask.render_template_string渲染肯定会有漏洞。

解题过程

看到这边忽然才发现,flask最著名的不就是模板注入吗,直接模板注入不就行了。

发现果然可以执行。

但是我们之前已经发现他会将’(’,’)'替代。并且{% set config=None%}{% set self=None%},将config和self加入了黑名单。

这边百度了一下flask模板注入绕过,发现并没有绕过括号的。。。。。

于是启动搜索writeup大法。

给出的payload为

{{get_flashed_messages.__globals__['current_app'].config['FLAG']}}

攻防世界-web-shrine-从0到1的解题历程writeup相关推荐

  1. 攻防世界web高手进阶区ics-05(XCTF 4th-CyberEarth)WriteUp

    文章目录 解题部分 总结: 解题部分 题目来源 攻防世界web高手进阶区ics-05(XCTF 4th-CyberEarth) 1.拿到题目以后,发现是一个index.php的页面,并且设备-没有显示 ...

  2. 攻防世界-web shrine

    代码分析: import flask import os app = flask.Flask(__name__) app.config['FLAG'] = os.environ.pop('FLAG') ...

  3. 攻防世界-web高手进阶区

    文章目录 攻防世界-web高手进阶区 1.baby_web 2.Training-WWW-Robots 3.Web_php_include (文件包含+伪协议) 1.方法 2.方法 4.ics-06( ...

  4. CTF:攻防世界web PART01

    写在前面: 此博客仅用于记录个人学习进度,学识浅薄,若有错误观点欢迎评论区指出.欢迎各位前来交流.(部分材料来源网络,若有侵权,立即删除) 攻防世界web PART01 baby_web Traini ...

  5. 攻防世界——web新手题

    攻防世界----web新手题 1. robots 打开题目场景,发现与robots协议有关,上网搜索robots协议的内容: Robots协议(也称为爬虫协议.机器人协议等)的全称是"网络爬 ...

  6. 攻防世界 web高手进阶区 10分题 weiphp

    前言 继续ctf的旅程 开始攻防世界web高手进阶区的10分题 本文是weiphp的writeup 解题过程 进入界面 点击 进入一个登陆界面 没有注册 那肯定得找源码了 惯例源码+御剑 发现git泄 ...

  7. 攻防世界Web题 - unseping 总结

    攻防世界Web题 - unseping 总结 1.审题 进入题目,可以看出来是典型的php反序列化题目. 2.源代码分析 <?php highlight_file(__FILE__); //显示 ...

  8. 攻防世界 web高手进阶区 8分题 Web_python_block_chain

    前言 继续ctf的旅程 开始攻防世界web高手进阶区的8分题 本文是Web_python_block_chain的writeup 解题过程 这是个区块链题 这..裂开了啊 没搞过区块链 从零开始学习 ...

  9. 攻防世界web进阶区Web_php_wrong_nginx_config详解

    攻防世界web进阶区Web_php_wrong_nginx_config详解 题目 详解 题目 打开发现无论我们输入什么他都会弹出网站建设不完全 那么我们使用御剑进行扫描,扫描到了admin和robo ...

  10. 攻防世界-web新手区wp

    攻防世界-web新手区wp view source robots backup cookie disabled_button weak auth simple php get_post xff_ref ...

最新文章

  1. C#实现汉字转化为拼音
  2. Erlang/OTP之gen_fsm行为模式
  3. 理解ThreadLocal 2
  4. kylin调优,项目中错误总结,知识点总结,kylin jdbc driver + 数据库连接池druid + Mybatis项目中的整合,shell脚本执行kylin restapi 案例
  5. C/C++ 交换两个数,不使用第三个变量, 函数模板来实现
  6. java junit 怎么写_使用JUnit测试java代码
  7. vue-router 源码:实现一个简单的 vue-router
  8. C++基础语法-02-运算符重载
  9. Centos7安装snmpwalk工具
  10. Visual Studio无法定位于动态链接库
  11. 富瑞和SMBC Group宣布结成战略联盟来推动增长
  12. Chapter Two:无限debugger的原理与绕过与断点调试
  13. java常用包名8个_java中常用包名的解释
  14. 科普|掀开马甲包的 “神秘面纱”
  15. Building wheel for opencv-python (PEP 517) 卡住
  16. 站长技术导航二开美化网站源码 网站提交自动秒收录
  17. c语言文字冒险类游戏,课内资源 - 基于C语言和easyx实现的巧虎划船大冒险游戏...
  18. uni-app开发微信小程序常见问题(更新版):uni.getUserProfile要怎么写?uni.login和uni.getUserProfile的顺序?
  19. 背了单词再也不怕忘,多邻国的AI要逆天!
  20. Linux命令之查找命令

热门文章

  1. python字符串补空格输出_python格式化打印字符串
  2. GPLinker:基于GlobalPointer的事件联合抽取
  3. Transformer的七十二变
  4. ICLR 2020 开源论文 | 隐空间的图神经网络:Geom-GCN
  5. 一年学遍吴恩达、李飞飞、周志华等16大精品课!(ML、CV、NLP一应俱全)
  6. 直播实录 | AAAI 2018论文解读:零资源机器翻译的最新进展
  7. POJ3348 Cows【凸包+多边形求面积】
  8. HDU1016 Prime Ring Problem dfs+回溯
  9. 编辑xml文件时不能自动提示问题的解决
  10. python内置序列类型_Python序列内置类型之元组类型详解