CVE-2020-7471 Django SQL注入漏洞复现
漏洞简介
2020年2月3日,Django 官方发布安全通告公布了一个通过StringAgg(分隔符)实现利用的潜在SQL注入漏洞(CVE-2020-7471)。攻击者可通过构造分隔符传递给聚合函数contrib.postgres.aggregates.StringAgg,从而绕过转义符号(\)并注入恶意SQL语句。
影响版本
Django 1.11.x < 1.11.28
Django 2.2.x < 2.2.10
Django 3.0.x < 3.0.3
漏洞信息
漏洞名称 | 漏洞编号 | 危害等级 |
---|---|---|
Django SQL注入漏洞 | CVE-2020-7471 | 严重 |
CVSS评分 | 漏洞组件 | 受影响版本 |
9.8 | Django | Django 1.11.x < 1.11.28 等 |
环境搭建
- Kali
- Django
漏洞复现
1.安装 django 漏洞版本,本次测试用的是(django==3.0.2)
sudo apt-get install python3-pip
pip3 install django==3.0.2 -i https://pypi.mirrors.ustc.edu.cn/simple/(注:用普通用户执行该命令。因为kali-2020.1自带postgresql,就不做演示了。)
sudo vim /etc/postgresql/13/main/pg_hba.conf
#做如下修改
sudo service postgresql restart
gpsql -U postgres -h 127.0.0.1#此时是免密进入,进行密码修改
sudo vim /etc/postgresql/12/main/pg_hba.conf
#更改配置文件,关闭免密登陆
sudo service postgresql restart
#重启postgresql
psql -U postgres -h 127.0.0.1
#创建数据库test
git clone git://github.com/Saferman/CVE-2020-7471.git
cd CVE-2020-7471/
cd sqlvul_project/
vi settings.py
#修改setting中数据库的相关配置
python3 manage.py migrate
python3 manage.py makemigrations vul_app
python3 manage.py migrate vul_app
#将表结构迁移到数据库中
psql -U postgres -h 127.0.0.1
#登陆数据库
(注:此处报错)
解决方案:
在app下的models.py中创建自己的数据模型
查看表vul_app_info中原不存在数据
python3 CVE-2020-7471.py
#运行poc
成功注入
漏洞修复
- 在 Github 仓库查找 django 的 commit 记录,官方对其的修复:
https://github.com/django/django/commit/eb31d845323618d688ad429479c6dda973056136