本文主要是介绍django order by注入分析CVE-2021-35042,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
django-3.1.13下载地址
首先调用order_by函数的位置:django/db/models/query.py
函数做了两件事,一是清除当前所有的通过order_by函数调用的方法,也就清除Query类中的self.order_by参数。第二件事就是增加self.order_by参数
跟进add_ordering函数django/db/models/sql/query.py
这里有问题的地方是if '.' in item and ORDER_PATTERN.match(item):
django的orderby支持使用表名.列明
的方式传参来进行排序
例如:order_by(app_article.name)
当传入的参数有.
的时候会执行warnings.warn()
并且执行continue
一旦执行continue就跳过了下面的self.names_to_path(item.split(LOOKUP_SEP), self.model._meta)
而此函数是对参数进行安全验证的
如果去掉此continue,则会报错
然后具体处理表和列的文件在django/db/models/sql/conpiler.py
可以看到使用了self.quote_name_unless_alias来过滤table,而并没有对col进行过滤所。以导致在col处可以插入代码
利用:
http://your-ip:8000/vuln/?order=vuln_collection.name);select updatexml(1, concat(0x7e,(select @@version)),1)%23
修复:django4.0版本不支持使用表名.列明
进行orderby查询
这篇关于django order by注入分析CVE-2021-35042的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!