CVE-2020-7471-Django SQL注入漏洞验证

一、漏洞详情

CVE-2020-7471:通过StringAgg(分隔符)的潜在SQL注入django.contrib.postgres.aggregates.StringAgg聚合函数使用适当设计的定界符进行了SQL注入。

二、影响范围

1、受影响版本:

Django 1.11.x < 1.11.28 
Django 2.2.x < 2.2.10 
Django 3.0.x < 3.0.3

2、不受影响产品版本: 

Django 1.11.28 
Django 2.2.10 
Django 3.0.3

3、测试环境:

Kali2020

4、关于EXP程序:

目前没有远程攻击EXP

三、开始实验

1、安装django3.0.2

pip installdjango==3.0.2

新建数据库

2、安装pgsql

kali自带postgresql,略过

修改如下文件,监听所有端口

vim /etc/postgresql/13/main/postgresql.conf

修改如下文件,允许外部连接

vim /etc/postgresql/13/main/pg_hba.conf

重启服务后,连接数据库并创建测试数据库 登陆:psql -U postgres -h [kali主机的IP] 创建测试数据库:CREATE DATABASE test,后面poc中会用到

3、创建数据库

CREATE DATABASE test;

四、漏洞复现

1、修改配置信息 修改 sqlvul_projects/settings.py 里面的数据库配置

2、通过 django 初始化数据表

python3 manage.py migrate
python3 manage.py makemigrations vul_app
python3 manage.py migrate vul_app

3、查看数据表

4、下载CVE-2020-7471 POC

git clone https://github.com/Saferman/CVE-2020-7471.git

#执行POC

python3 CVE-2020-7471.py

再次查看数据前后对比POC里面的数据写入到数据库中,注入成功

五、加固修复

升级到Django最新版3.0.3即可。