flask ssti

type
status
date
slug
tags
summary
category
icon
password
泄露pin码,访问console可以直接用python代码了
notion image
 

flask ssti

flask框架中如果存在类似如下代码:(带有{}或者%s之类的,如果是{{}}那么已经被转移则不会被攻击)
那么恶意代码可以注入产生执行
魔术方法
__class__:用于返回对象所属的类
__base__:以字符串的形式返回一个类所继承的类
__bases__:以元组的形式返回一个类所继承的类
__mro__:返回解析方法调用的顺序,按照子类到父类到父父类的顺序返回所有类
__subclasses__():获取类的所有子类
__init__:所有自带带类都包含init方法,常用他当跳板来调用globals
__globals__:会以字典类型返回当前位置的全部模块,方法和全局变量,用于配合init使用

POC构造

先浅浅看一下具体怎么样能打: 如果是%s那么
notion image
notion image
和{}.format,似乎是一样的,都是{{}}
notion image
notion image
那么现在拿到

第一步:

==目的:使用__class__来获取内置类所对应的类==
可以通过使用strlisttupledict等来获取
>>>''.__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__()
拿到:
notion image
跑出来直接发就行:
 
上一篇
php反序列化
下一篇
das202308-出题
Loading...
文章列表
Hi~, I ‘m moyao
reverse
pwn
pentest
iot
android
others
ctf
iOS