前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >CVE-2020-7471 Django SQL注入漏洞复现

CVE-2020-7471 Django SQL注入漏洞复现

作者头像
用户6343818
发布2020-05-18 17:35:45
9130
发布2020-05-18 17:35:45
举报
文章被收录于专栏:安全小圈安全小圈

0x01漏洞简介

CVE-2020-7471:通过StringAgg(分隔符)的潜在SQL注入

django.contrib.postgres.aggregates.StringAgg聚合函数使用适当设计的定界符进行了SQL注入。

Django是高水准的由Python编程语言驱动的一个开源Web应用程序框架,起源于开源社区。使用Django,程序员可以方便、快捷地创建高品质、易维护、数据库驱动的应用程序,应用广泛。2月11日,绿盟科技监测发现此漏洞PoC已公开,请相关用户尽快升级Django至修复版本,修复此漏洞。

参考链接: https://www.djangoproject.com/weblog/2020/feb/03/security-releases

0x02 影响范围

受影响版本:

  • Django 1.11.x < 1.11.28
  • Django 2.2.x < 2.2.10
  • Django 3.0.x < 3.0.3
  • Django 主开发分支

不受影响产品版本:

  • Django 1.11.28
  • Django 2.2.10
  • Django 3.0.3

0x03 漏洞复现

  • ·复现靶机kalil 2019.3
  • ·复现Django版本 3.0.2

一、环境部署

通过git先获取到漏洞的环境与poc

代码语言:javascript
复制
git clone https://github.com/Saferman/CVE-2020-7471.git

1、 安装 django 漏洞版(3.0.2)

代码语言:javascript
复制
pip3 installdjango==3.0.2 -i https://pypi.tuna.tsinghua.edu.cn/simple

2、安装postgre 数据库

代码语言:javascript
复制
apt-get installpostgresql-11

我这里的postgre 默认的就已经安装了这个版本了所以就没有装,大家如果没有装的需要安装

3、启动postgre 数据库

代码语言:javascript
复制
service postgresql start

没有回显是正常的,如果担心可以看一下端口有没有开启postgre端口为5432

4、连接postgre 数据库在安装完毕后,系统会创建一个数据库超级用户 postgres并且密码为空。然后我们以管理员身份 postgres 登陆(注:这里postgres是系统用户)

代码语言:javascript
复制
sudo -i -u postgres 

5、切换到postgres这个用户之后我们输入psql进入postgres的shell,并且我们可以看到我们这里psql的版本是11.5的

6、到这一步之后我们修改postgre的密码为root并创建一个zerosec的数据库

代码语言:javascript
复制
ALTER USER postgres WITH PASSWORD 'root';
代码语言:javascript
复制
CREATE DATABASE zerosec;

7、 把之前git下载好的文件打开修改配置文件~/CVE-2020-7471/sqlvul_project/settings.py

8、 找到第78行DATABASES修改databases里面的配置信息

修改前

修改后

9、使用django初始化数据表分别执行一下几句

代码语言:javascript
复制
python3 manage.py migrate
代码语言:javascript
复制
python3 manage.py makemigrationsvul_app

这里no changes …. 不要紧的可以不用care

python3 manage.py migrate vul_app

这里的no migration to apply 可以不用care 走形式

这样初始化环境就已经全部完成了。

二、 进入攻击环节(想必有同学要问了 数据库里面木有数据怎么办 别急接着往下看)

回到我们之前的psql shell中我们执行 “\c zerosec”

\c zerosec 的意思是选择zerosec数据库

然后我们\d 看一下数据库中所有的表

我们查询一下我们要利用到的vul_app_info 中的内容

可以看到这里是空的,那么不要激动,经过我分析之后发现本来应该要在

python3 manage.py makemigrations vul_app 这一步的时候要执行sql语句的但是我发现migrations 里面初始化的数据是空的,那么问题来了数据跑去哪了呢 经过后面发现 在poc中有一段代码是用来导入数据的。

好了 到这里大家应该就明白接下来要做什么了

执行POC代码

这时候我们再去查询一下数据库。

数据就进去了,当然这不是重点 重点是我们poc执行成功了。

在POC中我们可以看到作者用了\‘转义了’的实意,从而构成了后面语句的拼接。

到这里本次复现就结束了,下周会分析CVE-2020-7471的漏洞成因。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-03-03,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 零度安全攻防实验室 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 0x01漏洞简介
  • 0x02 影响范围
相关产品与服务
数据库
云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档