python格式字符串的研究

Original Ash和天智会

前言

两天前与队友交流时提到了python的格式化字符串漏洞。以前很少有人接触过这个漏洞,所以我写了一篇文章从基本部分仔细研究它。python环境是python3.7

Python3中的格式字符串| Python 3中的199格式字符串主要有以下两种形式:

" test % s " %(' test ')" test { 0 }。格式(‘test’)

这两个语句的输出都是test test虽然效果是一样的,但一般认为在python web开发中前者比后者更安全,因为后者可能会由于自身支持的一些特殊用法而导致配置信息的泄露等。

首先,格式形式的格式字符串的基本用法如下:

"iam {1},他是{0}。格式(“a”、“b”)

。这个语句的输出是我是b,他是a,括号{}中的数字代表格式的可变顺序

"我是{myname},他是{hisname}。format (myname = "aa ",his name = " bb ")

的输出是我是aa,他是bb,可以通过在format函数参数中的键来指定

"我是{},他是{}。格式(“a”、“b”)

这个语句的输出是我是a,他是b,这个用法会使大括号和格式参数一一对应

将在大括号与格式的参数不一一对应时报告错误。例如,

"iam {0},他也是{0}。format ('a') "iam {0},他也是{1}。格式(‘a’)

将输出我是a,他也是a,而后者将报告元组索引超出范围的错误。

格式函数的基本用法不是格式字符串漏洞的根本原因。请看下面的代码:

"第一行{0

402显示这个对象的_groups属性是EmptyManager类的一个对象第429行显示,对象的groups方法也已被转换成一个名为group的类属性,其值与_groups相同EmptyManager类是在Django/DbDjango/Db/models/manager的195行

莫烦python

中定义的。可以看出,此对象的模型属性是在同一个文件中定义的一个组类,与AnonymousUser类相同。django/contrib/auth/models.py文件中的91行:

Group类本身没有定义任何有趣的内容。它一直跟随到其父类的父类模型库。它在71行django/db/models/base.py中定义。在121行中有:

莫烦python

。可以看出,这个类的元属性是由选项类实例化的对象类定义可以在65行中看到,这些行可以追溯到django/db/models/options.py(由于代码太长,这里没有截图):

来自Django.appsimportapps #省略类选项:#省略default _ apps = appsdefe _ init _ _(self,meta, app _ label = none):self . app _ label = app _ label self . apps = self . default _ apps #省略@property def app_config(self): #不要通过get _ app_config来避免触发导入。return self . apps . app_configs . get(self . app _ label)#省略

可以看到app _ config方法已转换为只读属性,该属性返回self . apps . app _ configs . get(self . app _ label)审计代码可以清楚地发现self.apps是导入的应用程序模块,即模块类的对象追踪到django/apps/registry.py,我们可以看到在类应用的定义中,原始文件有

个类应用:def _ _ init _ _ (self,Installed _ apps =):self . app _ configs = { } #省略defpopulation (self,installed _ apps = none): #省略Installed _ Apps中的条目:if isinstance (entry,AppConfig):app _ config = entry else:app _ config = AppConfig . create(entry)# 91 lines ifapp _ config . label in self . app _ configs:if is instantage " "重复项:% s " % app _ config . label)self . app _ configs

语句:作者最初是为了共享和普及网络知识。 如果读者因此做出任何危害网络安全的行为,后果将是他自己的,而且这与hotchpotch和原作者无关!

大家都在看

相关专题