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

相关推荐
LfanBQX38 分钟前
内网安全--横向移动【1】IPC&AT&SC命令&lmpacket套件&CS插件&全自动
安全
前端开发小司机40 分钟前
HCM智能人力资源系统存在命令执行漏洞Getshell
网络·计算机网络·安全·web安全·网络安全·系统安全·安全架构
容若只如初见3 小时前
项目实战--Spring Boot + Minio文件切片上传下载
java·spring boot·后端
码农爱java3 小时前
Spring Boot 中的监视器是什么?有什么作用?
java·spring boot·后端·面试·monitor·监视器
Apifox.4 小时前
什么是 HTTP POST 请求?初学者指南与示范
后端·http·学习方法·web
2401_858120264 小时前
探索sklearn文本向量化:从词袋到深度学习的转变
开发语言·python·机器学习
无名指的等待7124 小时前
SpringBoot实现图片添加水印(完整)
java·spring boot·后端
helloKittywz6 小时前
内网学习第6天 liunx定时任务 环境变量和权限配置,以及数据库提权
学习·web安全·网络安全·内网渗透·liunx·权限提升·学习记录
bigbearxyz6 小时前
Java实现图片的垂直方向拼接
java·windows·python
立秋67896 小时前
使用Python绘制堆积柱形图
开发语言·python