攻防世界-web-shrine-从0到1的解题历程writeup
题目环境分析
首先开启靶机获取到题目如下
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相关推荐
- 攻防世界web高手进阶区ics-05(XCTF 4th-CyberEarth)WriteUp
文章目录 解题部分 总结: 解题部分 题目来源 攻防世界web高手进阶区ics-05(XCTF 4th-CyberEarth) 1.拿到题目以后,发现是一个index.php的页面,并且设备-没有显示 ...
- 攻防世界-web shrine
代码分析: import flask import os app = flask.Flask(__name__) app.config['FLAG'] = os.environ.pop('FLAG') ...
- 攻防世界-web高手进阶区
文章目录 攻防世界-web高手进阶区 1.baby_web 2.Training-WWW-Robots 3.Web_php_include (文件包含+伪协议) 1.方法 2.方法 4.ics-06( ...
- CTF:攻防世界web PART01
写在前面: 此博客仅用于记录个人学习进度,学识浅薄,若有错误观点欢迎评论区指出.欢迎各位前来交流.(部分材料来源网络,若有侵权,立即删除) 攻防世界web PART01 baby_web Traini ...
- 攻防世界——web新手题
攻防世界----web新手题 1. robots 打开题目场景,发现与robots协议有关,上网搜索robots协议的内容: Robots协议(也称为爬虫协议.机器人协议等)的全称是"网络爬 ...
- 攻防世界 web高手进阶区 10分题 weiphp
前言 继续ctf的旅程 开始攻防世界web高手进阶区的10分题 本文是weiphp的writeup 解题过程 进入界面 点击 进入一个登陆界面 没有注册 那肯定得找源码了 惯例源码+御剑 发现git泄 ...
- 攻防世界Web题 - unseping 总结
攻防世界Web题 - unseping 总结 1.审题 进入题目,可以看出来是典型的php反序列化题目. 2.源代码分析 <?php highlight_file(__FILE__); //显示 ...
- 攻防世界 web高手进阶区 8分题 Web_python_block_chain
前言 继续ctf的旅程 开始攻防世界web高手进阶区的8分题 本文是Web_python_block_chain的writeup 解题过程 这是个区块链题 这..裂开了啊 没搞过区块链 从零开始学习 ...
- 攻防世界web进阶区Web_php_wrong_nginx_config详解
攻防世界web进阶区Web_php_wrong_nginx_config详解 题目 详解 题目 打开发现无论我们输入什么他都会弹出网站建设不完全 那么我们使用御剑进行扫描,扫描到了admin和robo ...
- 攻防世界-web新手区wp
攻防世界-web新手区wp view source robots backup cookie disabled_button weak auth simple php get_post xff_ref ...
最新文章
- C#实现汉字转化为拼音
- Erlang/OTP之gen_fsm行为模式
- 理解ThreadLocal 2
- kylin调优,项目中错误总结,知识点总结,kylin jdbc driver + 数据库连接池druid + Mybatis项目中的整合,shell脚本执行kylin restapi 案例
- C/C++ 交换两个数,不使用第三个变量, 函数模板来实现
- java junit 怎么写_使用JUnit测试java代码
- vue-router 源码:实现一个简单的 vue-router
- C++基础语法-02-运算符重载
- Centos7安装snmpwalk工具
- Visual Studio无法定位于动态链接库
- 富瑞和SMBC Group宣布结成战略联盟来推动增长
- Chapter Two:无限debugger的原理与绕过与断点调试
- java常用包名8个_java中常用包名的解释
- 科普|掀开马甲包的 “神秘面纱”
- Building wheel for opencv-python (PEP 517) 卡住
- 站长技术导航二开美化网站源码 网站提交自动秒收录
- c语言文字冒险类游戏,课内资源 - 基于C语言和easyx实现的巧虎划船大冒险游戏...
- uni-app开发微信小程序常见问题(更新版):uni.getUserProfile要怎么写?uni.login和uni.getUserProfile的顺序?
- 背了单词再也不怕忘,多邻国的AI要逆天!
- Linux命令之查找命令
热门文章
- python字符串补空格输出_python格式化打印字符串
- GPLinker:基于GlobalPointer的事件联合抽取
- Transformer的七十二变
- ICLR 2020 开源论文 | 隐空间的图神经网络:Geom-GCN
- 一年学遍吴恩达、李飞飞、周志华等16大精品课!(ML、CV、NLP一应俱全)
- 直播实录 | AAAI 2018论文解读:零资源机器翻译的最新进展
- POJ3348 Cows【凸包+多边形求面积】
- HDU1016 Prime Ring Problem dfs+回溯
- 编辑xml文件时不能自动提示问题的解决
- python内置序列类型_Python序列内置类型之元组类型详解