Django任意URL跳转漏洞(CVE-2018-14574)

目录

Django介绍

URL跳转漏洞介绍

Django任意URL跳转漏洞介绍

环境搭建

防御方法


前段时间在面试时,问到了URL跳转漏洞,我没有回答好,下午把URL跳转漏洞学习了,发现也不难,看来还需要学习的东西很多呀,这里我再vulhub靶场中找到一个Django的URL跳转漏洞,刚好来练习一下

Django介绍

Django 最初被设计用于具有快速开发需求的新闻类站点,目的是要实现简单快捷的网站开发。以下内容简要介绍了如何使用 Django 实现一个数据库驱动的网络应用。

URL跳转漏洞介绍

URL跳转漏洞,也叫开放重定向漏洞(open redirect) 。

WE-601对该漏洞的描述为:http 参数可能包含一个 URL 值,并可能导致 Web 应用程序将请求重定向到指定的 URL。

通过修改恶意站点的 URL 值,攻击者可能成功发起网络钓鱼诈骗并窃取用户凭据。

简单说来就是参数可控导致的漏洞产生。

可能产生的位置

- **用户登录、统一身份认证、认证完进行跳转。**
- **用户分享、收藏内容跳转。**
- **跨站点认证、授权后。**
- **站内其它链接跳转。**
- **注册、注销、修改密码等。**
- **账户切换、保存设置。**

产生的原因:

1. 代码层忽视URL跳转漏洞,或不知道/不认为这是个漏洞;
2. 代码层过滤不严,用取子串、取后缀等方法简单判断,代码逻辑可被绕过;
3. 对传入参数操作(剪切/拼接/重组)和判断不当,导致绕过;
4. 原始语言自带的解析URL、判断域名的函数库出现逻辑漏洞或者意外特性;
5. [服务器]/[容器]特性、浏览器等对标准URL协议解析处理等差异性导致被绕过;

Django任意URL跳转漏洞介绍

Django默认配置下,如果匹配上的URL路由中最后一位是/,而用户访问的时候没加/,Django默认会跳转到带/的请求中。

(由配置项中的django.middleware.common.CommonMiddlewareAPPEND_SLASH来决定)。

在path开头为//example.com的情况下,Django没做处理,导致浏览器认为目的地址是绝对路径,最终造成任意URL跳转漏洞。

该漏洞利用条件是目标URLCONF中存在能匹配上//example.com的规则。

环境搭建

移动到如下目录中:

/opt/vulhub-master/django/CVE-2018-14574

使用docker-compose up -d来拉取环境

然后我们可以在浏览器中访问一下

可以看到页面打印了hello word,那么下面我们可以传入一个外部URL试试看

可以看到没有反应,但是当我们去除掉www.baidu.com后面的/后

成功的跳转到了百度页面,这里如果我们将跳转的页面设置为一个钓鱼的页面,发送给其他人,是不是就可以成功的获取到其他人的敏感信息了

漏洞产生的原因上面也言简意赅的说明了,在path开头为//example.com的情况下,Django没做处理,导致浏览器认为目的地址是绝对路径,最终造成任意URL跳转漏洞。

防御方法

1、最有效的方法之一就是使用白名单严格控制将要跳转的域名,如:

function checkURL ( sURL) {
return(/^(https?:\/\/)?[\w-.]+.(yourDomainA|yourDomainB|yourDomainC).com($|\/|)/i).test(sUrl)||(/^\w+$/i).test(sUrl)||(/^[\/][^\/]/i).test(sUrl)? true : false;}

2、限制referer、添加token,这样可以避免恶意用户构造跳转链接进行散播;

参考文章:

https://github.com/vulhub/vulhub/blob/master/django/CVE-2018-14574/README.zh-cn.md

URL跳转(开放重定向)挖掘技巧及实战案例全汇总-腾讯云开发者社区-腾讯云

https://github.com/djytmdj/Network-security-study-notes

相关推荐
咸鱼桨10 分钟前
《庐山派从入门到...》PWM板载蜂鸣器
人工智能·windows·python·k230·庐山派
网安-轩逸11 分钟前
网络安全核心目标CIA
安全·web安全
yusaisai大鱼25 分钟前
tensorflow_probability与tensorflow版本依赖关系
人工智能·python·tensorflow
Biomamba生信基地29 分钟前
R语言基础| 功效分析
开发语言·python·r语言·医药
小池先生40 分钟前
springboot启动不了 因一个spring-boot-starter-web底下的tomcat-embed-core依赖丢失
java·spring boot·后端
CodeClimb44 分钟前
【华为OD-E卷-木板 100分(python、java、c++、js、c)】
java·javascript·c++·python·华为od
夜幕龙1 小时前
iDP3复现代码数据预处理全流程(二)——vis_dataset.py
人工智能·python·机器人
晚夜微雨问海棠呀1 小时前
长沙景区数据分析项目实现
开发语言·python·信息可视化
cdut_suye2 小时前
Linux工具使用指南:从apt管理、gcc编译到makefile构建与gdb调试
java·linux·运维·服务器·c++·人工智能·python
鸭梨山大。2 小时前
Jenkins 任意文件读取(CVE-2024-23897)修复及复现
安全·中间件·jenkins