一、漏洞详情
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即可。