(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
(CVE-2018-14574)Django \< 2.0.8 任意URL跳转漏洞_第1张图片
(CVE-2018-14574)Django \< 2.0.8 任意URL跳转漏洞_第2张图片

二.漏洞影响

Django < 2.0.8

三.漏洞复现

复现环境:vulhub
1.开启该环境
命令:docker-compose up -d
(CVE-2018-14574)Django \< 2.0.8 任意URL跳转漏洞_第3张图片
2.访问网址:http://127.0.0.1:8000/
(CVE-2018-14574)Django \< 2.0.8 任意URL跳转漏洞_第4张图片
3.只要在url后加上//想跳转的网页,即可实现跳转
在这里插入图片描述
(CVE-2018-14574)Django \< 2.0.8 任意URL跳转漏洞_第5张图片
链接点击后即可实现跳转
抓包分析:
1.直接访问http://10.0.78.22:8000/,进行抓包,放到Repeater
(CVE-2018-14574)Django \< 2.0.8 任意URL跳转漏洞_第6张图片
将原来的包GET/后面加上text请求,Go
(CVE-2018-14574)Django \< 2.0.8 任意URL跳转漏洞_第7张图片
发现301,跳转到了text
如果漏洞存在的话,说明APPEND_SLASH=True并且初始URL没有以斜杠结尾,并且在urlpatterns中找不到它,则通过在末尾附加斜杠来形成新的URL。如果在urlpatterns中找到此新URL,则将HTTP重定向返回到此新URL。
换句话说就是对那些末尾没加/的url自动填补/然后重新发起请求 所以如果在末尾加上了/是不会跳转成功的
(CVE-2018-14574)Django \< 2.0.8 任意URL跳转漏洞_第8张图片
可以看到无法跳转
(CVE-2018-14574)Django \< 2.0.8 任意URL跳转漏洞_第9张图片
将其改成//访问网址,即可成功返回301,进行跳转。

你可能感兴趣的:(CVE)