(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,进行跳转。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值