(CVE-2018-14574)Django < 2.0.8 任意URL跳转漏洞
Posted 番茄酱料
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了(CVE-2018-14574)Django < 2.0.8 任意URL跳转漏洞相关的知识,希望对你有一定的参考价值。
一.漏洞简介
Django默认配置下,如果匹配上URL,路由中的最后一位是/。如果用户访问的时候没加/,Django默认会跳转到带/的请求中。(由于配置项中的django.middleware.common.CommonMiddleware、APPEND_SLASH来决定)。
在path开头为//example.com的情况下,Django没做处理,导致浏览器认为目的地址是绝对路径,最终造成任意URL跳转漏洞。
该漏洞利用条件是目标URLCONF中存在能匹配上//example.com的规则。
注意:必须是http://目标机ip:8000//跳转url
不能是http://目标机ip:8000//跳转url/,也不能是http://目标机ip:8000/跳转url
二.漏洞影响
Django < 2.0.8
三.漏洞复现
复现环境:vulhub
1.开启该环境
命令:docker-compose up -d
2.访问网址:http://127.0.0.1:8000/
3.只要在url后加上//想跳转的网页,即可实现跳转
链接点击后即可实现跳转
抓包分析:
1.直接访问http://10.0.78.22:8000/,进行抓包,放到Repeater
将原来的包GET/后面加上text请求,Go
发现301,跳转到了text
如果漏洞存在的话,说明APPEND_SLASH=True并且初始URL没有以斜杠结尾,并且在urlpatterns中找不到它,则通过在末尾附加斜杠来形成新的URL。如果在urlpatterns中找到此新URL,则将HTTP重定向返回到此新URL。
换句话说就是对那些末尾没加/的url自动填补/然后重新发起请求 所以如果在末尾加上了/是不会跳转成功的
可以看到无法跳转
将其改成//访问网址,即可成功返回301,进行跳转。
以上是关于(CVE-2018-14574)Django < 2.0.8 任意URL跳转漏洞的主要内容,如果未能解决你的问题,请参考以下文章