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

实验环境

  • Kali Linux 2020.02
  • Django 3.0.2
  • postgresql 12.3

复现过程

1. 安装Django和postgres数据库

如果没有pip3,则先使用apt-get install python3-pip进行安装,然后使用pip3 install Django==3.0.2安装Django。Django受影响的版本主要有:

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

安装好Django后,使用apt-get install postgresql-11安装postgres数据库。

2. 创建测试数据库

/etc/init.d/postgresql start # 开启数据库
lsof -i:5432 # 查看状态

开启后,连接数据库,修改postgres的密码为’123456’,并创建数据库test。

sudo -i -u postgres
psql
ALTER USER postgres WITH PASSWORD '123456';
CREATE DATABASE test;

3. 安装POC并修改

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

进入POC内的sqlvul_project文件夹,打开settings.py,修改数据库的密码为刚才修改的‘123456’。

4. 初始化测试数据库test中的表

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

5. 运行POC

在运行POC之前,先查看数据库,是没有数据的。

\c test
\d
select * from vul_app_info;
\q

然后运行POC:

python3 CVE-2020-7471.py

再次查看数据库,数据插入成功。


文章作者: 恰醋
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 恰醋 !
评论
 上一篇
CVE-2017-11882漏洞复现 CVE-2017-11882漏洞复现
此漏洞是由Office软件里面的公式编辑器造成的,由于编辑器进程没有对名称长度进行校验,导致缓冲区溢出,攻击者通过构造特殊的字符,可以实现任意代码执行。
2020-10-07
下一篇 
CVE-2017-16995漏洞复现 CVE-2017-16995漏洞复现
Ubuntu16.04存在本地提权漏洞,该漏洞存在于Linux内核带有的eBPF bpf(2)系统调用中,攻击者(普通用户)可以利用该漏洞进行提权攻击,获取root权限,危害极大。
2020-10-03
  目录