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

举报
亿人安全 发表于 2023/05/27 14:11:47 2023/05/27
【摘要】 漏洞描述  Django 组件存在 SQL 注入漏洞,该漏洞是由于对 QuerySet.order_by()中用户提供数据的过滤不足,攻击者可利用该漏洞在未授权的情况下,构造恶意数据执行 SQL 注入攻击,最终造成服务器敏感信息泄露。组件介绍Django是一个开放源代码的Web应用框架,由Python写成。采用了MVC的框架模式,即模型M,视图V和控制器C。它最初是被开发来用于管理劳伦斯出版...

漏洞描述

 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

图片

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

图片

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

图片

此时数据库服务已经开启

图片

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

图片

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

图片

执行下面这两条命令
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。

图片

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

图片

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

图片

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

图片

图片

漏洞防御

及时更新到最新版本
链接 : https://www.djangoproject.com/weblog/2021/jul/01/security-releases/
这个漏洞复现因为网络环境问题卡了好久,这里感谢zly师兄的指点,这家伙搭环境比我快多了>_<
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。