DOM XSS to open redirection

攻擊者如果可以影響跨域用的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