freeBuf
主站

分类

漏洞 工具 极客 Web安全 系统安全 网络安全 无线安全 设备/客户端安全 数据安全 安全管理 企业安全 工控安全

特色

头条 人物志 活动 视频 观点 招聘 报告 资讯 区块链安全 标准与合规 容器安全 公开课

官方公众号企业安全新浪微博

FreeBuf.COM网络安全行业门户,每日发布专业的安全资讯、技术剖析。

FreeBuf+小程序

FreeBuf+小程序

URL跳转漏洞学习
2021-08-26 16:59:23

前言

挺早之前就已经看到这个漏洞了,一直拖到现在才学,本人菜鸡一只,如有错误欢迎各位师傅批评指正

漏洞简介

URL跳转漏洞,也叫开放重定向漏洞(open redirect) 。CWE-601对该漏洞的描述为:http 参数可能包含一个 URL 值,并可能导致 Web 应用程序将请求重定向到指定的 URL。通过修改恶意站点的 URL 值,攻击者可能成功发起网络钓鱼诈骗并窃取用户凭据。简单说来就是参数可控导致的漏洞产生。

重定向的相关知识

首先需要了解重定向的类型

1.永久重定向

这种方式表示原URL不应再被使用,应该优先选用新的URL。相关的状态码为301(Moved Permanently)、308(Permanent Redirect)

2.临时重定向

有时候请求的资源无法从其标准地址访问,但是却可以从另外的地方访问。相关状态码为302(Found)、303(See Other)、307(Temporary Redirect)

3.特殊重定向

这种方式的状态码为300(Multiple Choice)、304(Not Modified)。

300是手工重定向,用户自行选择web页面展示的重定向链接列表。

304会使页面跳转到本地陈旧的缓存版本当中。

重定向的方法

1.HTTP协议的重定向

也就是上面所说的那些状态码

2.使用HTMl的meta元素进行重定向

<head>
  <meta http-equiv="Refresh" content="0; URL=http://example.com/" />
</head>

这个方式仅适用于html页面

3.借助DOM的js重定向

window.location = "http://example.com/";

这种方法只能在支持js的客户端使用

漏洞原理

说完了重定向的相关知识,现在来说说漏洞的原理。简单来说就是在网页进行重定向的时候,将重定向的目的url修改为攻击者构造的恶意页面,达到钓鱼或者窃取敏感信息等目的。

漏洞产生原因

先贴一张图,网上各篇文章对这个漏洞的原因基本都是这么说的

image

但我觉得最主要的原因还是参数可控,然后服务端又没有对用户输入进行过滤和验证。

那么以下是我收集到的一些可能存在漏洞的参数名称:

redirect

redirect_to

redirect_url

redirectUrl

callback

toUrl

fromUrl

request

oauth_callback

url

go

jump

jump_to

target

service

to

returnUrl

goTo

link

linkto

domain

return

locationUrl

r_url

漏洞危害

1.获取用户权限(伪造钓鱼网站、窃取登录凭证token)

2.绕过检测(窃取CSRF token,绕过SSRF、RCE黑名单)

3.和xss、csrf等漏洞组合扩大危害

挖掘技巧

1.谷歌语法

用inurl:{参数名},可以找出可能存在漏洞的页面,然后进行进一步测试。

2.黑盒测试

黑盒测试的话,除了用上面的谷歌语法,还需要我们留意网站跳转的地方。那么根据常识经验以及我的一些收集整理,这里给出可能存在漏洞的一些功能点:

用户登录、统一身份认证处

用户分享、收藏内容处

跨站点认证、授权后

站内点击其它网址链接时

注册、注销、修改密码处

账号切换、保存设置处

3.白盒审计

如果是审计代码,那么下面给出的是我收集的不同语言可能产生漏洞的地方

java

response.sendRedirect(request.getParameter("url"));

PHP

$redirect_url = $_GET['url'];
header("Location: " . $redirect_url);

.NET

string url = request.QueryString["url"];
Response.Redirect(url);

Rails

redirect_to params[:url]

Django

redirect_url = request.GET.get("url")HttpResponseRedirect(redirect_url)

Flask

redirect\_url = request.form\['url'\] redirect(redirect\_url)

4.fuzz测试

可以用下面提供的payload进行测试,注意使用的时候需要修改一下相关url

https://github.com/cujanovic/Open-Redirect-Payloads/blob/master/Open-Redirect-payloads.txt

绕过方式

关于绕过有许多许多方式,网上一搜也一大把,这里就不再详写(懒狗实锤),想看具体内容的话可以看这篇https://www.cnblogs.com/gorillalee/p/14351069.html

修复方式

1.使用白名单

2.在可能的情况下,让用户提供在服务器端映射到完整目标 URL 的短名称、ID 或令牌

3.不允许将 URL 作为目标的用户输入

4.如果无法避免用户输入,请确保提供的值有效、适用于应用程序,并且已为用户授权

5.从应用程序中删除重定向功能,并将指向它的链接替换为指向相关目标 URL 的直接链接

总结

以上就是关于url跳转漏洞的一些相关内容。这个漏洞是属于比较好理解的,适合刚入门的新手学习。这个漏洞本身是低危的,当在渗透测试时如果发现存在这个漏洞的时候,不妨看看有没有机会和其他漏洞配合扩大攻击。

参考链接

https://cwe.mitre.org/data/definitions/601.html

https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Redirections

https://cheatsheetseries.owasp.org/cheatsheets/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.html

https://landgrey.me/open-redirect-bypass/

https://portswigger.net/kb/issues/00500100_open-redirection-reflected

https://cloud.tencent.com/developer/article/1516344

# 渗透测试 # web安全 # 网络安全技术
本文为 独立观点,未经允许不得转载,授权请联系FreeBuf客服小蜜蜂,微信:freebee2022
被以下专辑收录,发现更多精彩内容
+ 收入我的专辑
+ 加入我的收藏
相关推荐
  • 0 文章数
  • 0 关注者
文章目录