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协议,除特别声明外,转载请注明出处!