python格式化字符串漏洞
Last updated on September 27, 2024 am
格式化字符串漏洞举例
https://zhuanlan.zhihu.com/p/57309024
1 |
|
两种导致格式化字符串的形式
1 |
|
https://github.com/hongriSec/CTF-Training/tree/master/2018/百越杯2018/Web
-
格式化字符串漏洞只有只读属性没有执行属性,可以利用格式化字符串中的“获取对象属性”、“获取数组数值”等方法来寻找、取得一些敏感信息。
-
format函数无法执行__subclasses__()这样的方法,直接把这种payload套进格式化字符串的利用中会报错type object ‘object’ has no attribute ‘subclasses()’
Django下的格式化字符串漏洞
https://www.leavesongs.com/PENETRATION/python-string-format-vulnerability.html
https://www.toutiao.com/article/6798379120028811780/
p神给了两条payload
1 |
|
但是如果admin
,config.
等被过滤了就不能了利用了,所以需要通过分析payload如何构成,才能使用其他类进行替换。
1.user
是一个AnonymousUser
类,通过在Django库中搜索找到AnonymousUser
的定义
2.group
属性有两种获取方式_group
,group
(通过 @property
将方法转换为属性)
3.group
是一个EmptyManager
对象,在库中搜索定义该类的文件,可以看到model
属性,
_groups = EmptyManager(Group)
所以Group
就是对应的model
4.跟进Group
类的定义,其继承自Model
,再跟进看到Model
继承自ModelBase
5.在库中搜索ModelBase
找到定义的位置
在121行可以看到该类的_meta属性是一个Options
类实例化的对象
6.跟进到Options
,app_config
的定义如下
看到app.app_configs
有6个可选的元素,也就是app_config
可以用app.app_configs[admin]
app.app_configs[auth]
app.app_configs[contenttypes]
app.app_configs[sessions]
app.app_configs[messages]
app.app_configs[staticfiles]
替换
app_config
等价于apps.app_configs.get(self.app_label)
,其中128行有self.apps = self.default_apps
,73行有default_apps = apps
,跟进apps
,发现是一个Apps
的类。
7.在库中搜索Apps
类的定义
在97行有self.app_configs[app_config.label] = app_config
,而91行有app_config = AppConfig.create(entry)
8.跟进到AppConfig
类,这个对象有一个module
属性是python的一个模块即module
。
9.第6步用什么替换需要最后能够找到含有from django.conf import settings
的文件(用于读配置信息)
例如:用admin
,然后在/django/contrib/admin
文件中查找from django.conf import settings
找到的这里文件都是可以利用的
1 |
|
SECRET_KEY
可以更改为替他配置信息。
贴几个找好的payload
1 |
|
本文作者: fru1ts
本文链接: https://fru1ts.github.io/2023/11/23/python%E6%A0%BC%E5%BC%8F%E5%8C%96%E5%AD%97%E7%AC%A6%E4%B8%B2%E6%BC%8F%E6%B4%9E/
版权声明: 本站均采用BY-SA协议,除特别声明外,转载请注明出处!