• Python模板注入


    Python模板注入

    近期遇到Python模板注入问题,故在此整理,便于后期回顾。

    1 什么是“模板注入”

      首先什么是“Python模板”呢?Python有很多模板引擎可以帮助我们构建完善的Web应用程序。这里将要讨论的就是jinja2。而“模板注入”就是在模板中注入特定的代码,这里的模板可能是文件,也可能是字符串。

    2 简单的例子

    在Jinja2中,使用{%...%}执行for循环或赋值语句,使用{{...}}把表达的结果打印到模板上。更具体的内容可直接查看Jinja2中文文档

    1. 先搭建Flask虚拟环境,进入Scripts中,创建template.py。不再赘述,详细步骤在Flask
    # template.py
    from flask import
    from flask import Flask, request
    
    app = Flask(__name__)
    
    def exp():
        input = request.args.get('input')
        result = Template("This is {{thing}}")
        return result.render(thing=input)
    
    1. {{}}看出,这里的thing就是一个变量,我们可以在url中可以将期待的值输入到input交给flask给到thing渲染。但是这里的thing就是个字符串,如果传入表达式,它并不能做出相应的执行。
      1

    2. 对代码进行以下修改,发现表达式被执行

    from jinja2 import Template
    from flask import Flask, request
    
    app = Flask(__name__)
    
    @app.route('/')
    
    def exp():
        input = request.args.get('input')
        result = Template("This is " + input)
        return result.render()
    

    2

    3 如何利用这个漏洞做更多的事呢

    我们拿到这个漏洞自然想要更多的权限对系统或文件进行操作,这需要利用Python的特性,Python可以利用os或subprocess模块执行系统命令。

    1. 那我们怎么找到os模块呢?
      可以利用[].__class__随便确定一个类,.__class__前面的这个[]同样可以换成''""等。因为我们的目的是确定基类。
      class

    2. 那基类怎么找呢?[].__class__.__base__

    3. 找到基类了,就完成了第一步,接下来,我们需要知道其直接子类的弱引用列表,方便我们找到os模块。那这个直接子类的弱引用列表怎么找呢?[].__class__.__base__.__subclasses__()。下图仅作示意
      subclasses

    4. 为了更好的理解这个问题,还是借助攻防世界的题目Web_python_template_injection来做

    · 在题目场景链接后加上/{{[].__class__.__base__.__subclasses__()}}即可查看列表
    xctf

    · 如何从这个列表中,找到os相关的类?
    穷举这个列表,如果os列表元素.__init__.__globals__中,就print该元素及其位置。剩下的以后再补充吧。。

    References

    https://www.freebuf.com/column/187845.html
    https://docs.python.org/release/3.8.3/library/stdtypes.html#special-attributes

  • 相关阅读:
    大公司?小公司?
    git 学习笔记
    django学习笔记
    web servieces 学习小栗子
    python列表推导式
    什么叫事务,事务的特性
    监听问题汇总
    oracle数据库导入导出
    ORA-12514: TNS: 监听程序当前无法识别连接描述符中请求的服务--解决办法(转)
    目标修正
  • 原文地址:https://www.cnblogs.com/vict0r/p/13183640.html
Copyright © 2020-2023  润新知