CVE-2021-35042Django SQL注入漏洞复现

简介: CVE-2021-35042Django SQL注入漏洞复现

漏洞描述

 Django 组件存在 SQL 注入漏洞,该漏洞是由于对 QuerySet.order_by()中用户提供数据的过滤不足,攻击者可利用该漏洞在未授权的情况下,构造恶意数据执行 SQL 注入攻击,最终造成服务器敏感信息泄露。

组件介绍

Django是一个开放源代码的Web应用框架,由Python写成。采用了MVC的框架模式,即模型M,视图V和控制器C。它最初是被开发来用于管理劳伦斯出版集团旗下的一些以新闻内容为主的网站的,即是CMS(内容管理系统)软件。


综合评价

  高危,最终造成服务器敏感信息泄露

影响版本

Django 3.2
Django 3.1

安全版本

Django >= 3.2.5
Django >= 3.1.13

漏洞复现

搭建环境
https://github.com/YouGina/CVE-2021-35042
运行(这里为了方便可以提前切换到root用户)
git clone https://github.com/YouGina/CVE-2021-35042.git
cd CVE-2021-35042

fa97f769d794b003ca2553a90e2a3a11_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png

初始设置
./setup.sh #./setup.sh执行之后,docker开启的是数据库服务器

9bbd5642692d1ccd20bbd5ed371b4e91_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png

在这一步运行过程中会出现下面这个错误,这个意思是不要以root用户执行,以普通用户即可,不用理会这个报错;

cc1855858855cd22f24cfd7cfcadfcfd_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png

此时数据库服务已经开启

1b7a3424af6428bf00bbdc8244d851a9_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png

接着把web服务也开启
docker-compose up -d #此时web服务器和数据库服务器均开启

0817802500b18d261d3b51c848e98168_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png

进入web服务容器中
docker exec -it {container_id} /bin/bash #进入web服务器

07519e9b58279d31738e9c853a5be1a0_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png

执行下面这两条命令
python manage.py makemigrations cve202135042

红线框中表示在cve202135042应用目录下的migations的文件下多了一个0001_initial.py的文件,查看这个文件内容,表示我们创建了一个User这个模型类,并且指出这个类的成员属性id,name,以及他们的属性,同时我们了解到djnago在models.py创建模型类,其中一个模型类对应的是一张数据表,但是该命令并没有作用到数据库,这个命令中python manage.py makemigrations是记录我们对models.py的所有改动,并且将这个改动迁移到migrations这个文件下生成一个文件0001_initial.py。

c169e033f896b4c1b7a9e9e2914c4625_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png

接着执行下面这条命令, 这条命令的主要作用就是把上一条的改动作用到数据库也就是执行migrations里面新改动的迁移文件来更新数据库,比如创建数据表,或者增加字段属性

python manage.py migrate

d96471f86185f1c56cf708a9938f1188_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png

打开以下 URL 以加载示例数据:
http://localhost:8000/load_example_data

c6e4b39194c5d3d97213729cfad53de2_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png

然后转到易受攻击的页面
http://localhost:8000/users/

f56bc36525896a78264933b0f1d48e29_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png

aabd3de6ef7b5e9a5e213f70c9e3e0c1_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png

漏洞防御

及时更新到最新版本

链接 : https://www.djangoproject.com/weblog/2021/jul/01/security-releases/

这个漏洞复现因为网络环境问题卡了好久,这里感谢zly师兄的指点,这家伙搭环境比我快多了>_<

相关文章
|
13天前
|
SQL Web App开发 安全
【less-1】基于SQLI的SQL字符型报错注入
【less-1】基于SQLI的SQL字符型报错注入
15 2
|
13天前
|
SQL 安全 PHP
基于PHPCMS的SQL注入(Havij)
基于PHPCMS的SQL注入(Havij)
20 1
|
26天前
|
SQL 关系型数据库 MySQL
怎么通过第三方库实现标准库`database/sql`的驱动注入?
在Go语言中,数据库驱动通过注入`database/sql`标准库实现,允许统一接口操作不同数据库。本文聚焦于`github.com/go-sql-driver/mysql`如何实现MySQL驱动。`database/sql`提供通用接口和驱动注册机制,全局变量管理驱动注册,`Register`函数负责添加驱动,而MySQL驱动在`init`函数中注册自身。通过这个机制,开发者能以一致的方式处理多种数据库。
|
13天前
【干货】sql-labs、请求方式、注入类型、拼接方式
【干货】sql-labs、请求方式、注入类型、拼接方式
10 0
|
3天前
|
SQL 安全 Java
java的SQL注入与XSS攻击
java的SQL注入与XSS攻击
13 2
|
5天前
|
SQL 安全 前端开发
SQL注入基础
SQL注入基础
14 2
|
11天前
|
SQL 监控 安全
代码审计-PHP原生开发篇&SQL注入&数据库监控&正则搜索&文件定位&静态分析
代码审计-PHP原生开发篇&SQL注入&数据库监控&正则搜索&文件定位&静态分析
|
13天前
|
SQL Web App开发 前端开发
【less-11】基于SQLI的POST字符型SQL注入
【less-11】基于SQLI的POST字符型SQL注入
21 2
|
13天前
|
SQL 开发框架 安全
【干货】如何判断 Sql 注入点
【干货】如何判断 Sql 注入点
20 1
|
20小时前
|
SQL 存储 关系型数据库
【SQL注入】 数据库基础
SQL注入 MYSQL数据库结构 数据库操作
6 0