攻擊者如果可以影響跨域用的sink時,就會出現基於 DOM 的開放重定向漏洞。如果有此漏洞,可以利用此行為來對使用者進行網路釣魚攻擊。
以下是一些可能導致基於 DOM 的開放重定向漏洞的主要sinks
location
location.host
location.hostname
location.href
location.hash
location.pathname
location.search
location.protocol
location.assign()
location.replace()
open()
element.srcdoc
XMLHttpRequest.open()
XMLHttpRequest.send()
jQuery.ajax()
$.ajax()
例如,以下location.hash
可被用來發動攻擊
let url = /https?:\/\/.+/.exec(location.hash);
if (url) {
location = url[0];
}
攻擊者能夠利用此漏洞建構一個 URL,如果其他使用者存取該攻擊URL,將導致重定向到任意外部網域。
另一個例子如下,假如目標網站有此漏洞,可發動攻擊。從返回內容可以看到有使用open-redirection的弱點
######### request ############
GET /post?postId=2 HTTP/2
...omit...
######### response ############
...omit...
<a href='#' onclick='returnURL' = /url=https?:\/\/.+)/.exec(location); if(returnUrl)location.href = returnUrl[1];else location.href = "/"'>Back to Blog</a>
...omit...
使用chrome inspect看發現內容差不多
<div class="is-linkback">
<a href="#" onclick="returnUrl = /url=(https?:\/\/.+)/.exec(location); location.href = returnUrl ? returnUrl[1] : "/"">Back to Blog</a>
</div>
由於script內的url參數有重導向弱點,因此可以構建以下惡意鏈結
https://your-lab-id.web-security-academy.net/post?postId=2&url=https://attack.com/
一旦訪問該連結,back to blog
的按鈕會被設定前往以下網址
https://your-lab-id.web-security-academy.net/post?postId=2&url=https://attack.com/#
一旦點擊back to blog
,就會被重導向到https://attack.com/
Lab: DOM-based open redirection