在本节中,我们将讨论什么是基于DOM的开放重定向,演示如何构造这种攻击,以及如何防御这种攻击。
1. 什么是基于DOM的开放重定向
当script将攻击者将可控制的数据写入到可以触发跨域导航的接收器时,就会出现基于DOM的开放重定向漏洞。例如,由于未安全处理location.hash属性,下面的代码很容易受到攻击:
let url = /https?:\/\/.+/.exec(location.hash);
if (url) {
location = url[0];
}
攻击者可能能够使用此漏洞构建一个URL,如果其他用户访问该URL,将导致重定向到任意外部域。
2. 基于DOM的开放重定向漏洞影响
例如,这种漏洞可以被用来更容易的对网站用户实施钓鱼攻击。通过使用原域名的应用程序URL和有效的TLS证书(如果使用TLS),这为钓鱼攻击提供了可信性,因为许多用户,即使他们验证了这些特性,也不会注意到随后的重定向到其他域名。
如果攻击者能够控制传递给重定向API的字符串的开头,那么就有可能将此漏洞升级为JavaScript注入攻击。攻击者可以使用javascript:伪协议构造URL,以便在浏览器处理URL时执行任意代码。
3. 哪些接收器会导致基于DOM的开放重定向漏洞
以下是一些可能导致基于DOM的开放重定向漏洞的主要接收器:
location
location.host
location.hostname
location.href
location.pathname
location.search
location.protocol
location.assign()
location.replace()
open()
element.srcdoc
XMLHttpRequest.open()
XMLHttpRequest.send()
jQuery.ajax()
$.ajax()
4. 如何防御基于DOM的开放重定向漏洞
除了前文 “基于DOM的漏洞” 中描述的常规措施外,您应该避免使用来自任何不可信源的数据、动态设定重定向目标。
文章转载自WEB漏洞挖掘,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




