Django SQL注入漏洞(CVE-2020-7471)复现
Django这个web框架我之前接触的不太多,python编写的,听说是广为流行的开源框架?不太清楚,平时还是最爱php开发的网站哈哈哈哈(懂得都懂),既然是非常流行的框架,那么最近也是前段时间把爆出来的CVE威胁做一个基础的复现,也为自己以后做渗透测试的时候如遇到此框架,并且版本号在影响范围里,可以考虑下这个思路。
(以下是引用他人的漏洞概述和影响范围):
0x01、漏洞概述
2月3日,Django 官方发布安全通告公布了一个通过StringAgg(分隔符)实现利用的潜在SQL注入漏洞(CVE-2020-7471)。攻击者可通过构造分隔符传递给聚合函数contrib.postgres.aggregates.StringAgg,从而绕过转义并注入恶意SQL语句。
p1CVSS3.1评分:9.8
参考链接: 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、环境搭建(在kali上实现)
首先git下github上公开的漏洞poc和配置
p2然后下载3.0.2版本的django
p3django需要用到的数据库是postgresql,这个数据库我也是今天头一次使用,由于博主我这学期也开了数据库的课程,所以去google了一下它的有关信息,其实postgresql数据库有许多比较领先的、现代化的概念与特性,支持大部分的sql标准,额外也有许多扩展,运用于商业型的网站较多(划重点!哈哈)
p4postgresql数据库在安装完毕之后呢,会自动创建一个类似于root的用户,用户名为postgres,密码为空,接着用这个root用户的身份登陆。
打开服务:
p5登陆:
p6psql命令进入类似于shell的数据库界面:
p7将刚才那个postgres用户添加个密码:
p8创建一个数据库:
p9数据库创建好了,我们配置一下setting把:
p10可以看到刚才git的文件CVE-2020-7471
p11按照github配置教程依次进行:
p12vim打开settings.py文件,大概在70+行也就是DATABASES这个模块里,把数据库名称和密码改成上文我们修改过的
p13返回上一级目录,接下来就是利用manage.py进行初始化和配置了。
p14 p14 p15 p16好了,环境配置基本完成,我们在进入到postgresql中看看我们刚才创建的数据库。
p17\c xxx命令是连接进入到xxx数据库。
\d 显示每个匹配关系
p18选择有问题的vul_app_info数据表,可以查看到没有任何数据。
p19接着轮到poc上场了:
p20再次查看该表:数据已经写入了。
p21github上poc地址:https://github.com/Saferman/CVE-2020-7471
该漏洞的详细分析原理可参考链接:https://xz.aliyun.com/t/7218
在今后的一些渗透过程中,如果遇到类似的受影响的Django框架,可以利用该注入漏洞,进行操作。