第一题
看到一句话,需要传入一个传参为flag 设置一个变量为 secret_key
构造paykoad
/?flag=secret_key
但是发现什么都没有
SSTI模版注入嘛
这里使用的是flask模版
Flask提供了一个名为config的全局对象,可以用来设置和获取全局变量。
继续构造payload
/?flag={{config.SECRET_KEY}} 必须大写
然后就出来了
使用{{config}}获得flag,因为config是用来获取当前配置的,配置主要有cookie名字和值之类的,这里的flag就是存放在cookie中
第二题
看前辈们的解题思路
__class__:用来查看变量所属的类,根据前面的变量形式可以得到其所属的类。
__init__ 初始化类,返回的类型是function
__globals__[] 使用方式是 函数名.__globals__获取function所处空间下可使用的module、方法以及所有变量。
os.popen() 方法用于从一个命令打开一个管道。
open() 方法用于打开一个文件,并返回文件对象
F12 什么也没有
构造传参
/?flag={{ config.__class__.__init__.__globals__['os'].popen('ls ../').read() }}
有回显
查看app
查看flag
Flask提供了一个名为config的全局对象,可以用来设置和获取全局变量。
使用{{config}}获得flag,因为config是用来获取当前配置的,配置主要有cookie名字和值之类的,这里的flag就是存放在cookie中
__class__:用来查看变量所属的类,根据前面的变量形式可以得到其所属的类。
__init__ 初始化类,返回的类型是function
__globals__[] 使用方式是 函数名.__globals__获取function所处空间下可使用的module、方法以及所有变量。
os.popen() 方法用于从一个命令打开一个管道。
open() 方法用于打开一个文件,并返回文件对象