天天看點

小心閱讀模式下的存在某種問題或陰謀——看看我如何在Edge的閱讀模式下繞過SOP

本文講的是<b>小心閱讀模式下的存在某種問題或陰謀——看看我如何在Edge的閱讀模式下繞過SOP</b>,

小心閱讀模式下的存在某種問題或陰謀——看看我如何在Edge的閱讀模式下繞過SOP

Microsoft Edge全新的浏覽器讓人眼前一亮,而閱讀模式可以說是其中的亮點之一。不過今天我們并不是要評價它的這個功能,而是要對運作在Edge浏覽器 閱讀模式下的各種僞協定運作機制進行一個詳細的解剖。

要打開閱讀模式,可以進入Edge浏覽器,點選像一本書一樣的圖示,即可進入閱讀模式:

小心閱讀模式下的存在某種問題或陰謀——看看我如何在Edge的閱讀模式下繞過SOP

使用閱讀模式,閱讀效果會更好一些:

小心閱讀模式下的存在某種問題或陰謀——看看我如何在Edge的閱讀模式下繞過SOP

但是,閱讀模式頁面下的真實位址是什麼呢?打開開發者工具(F12)并在控制台中輸入 location.href 。從下圖可以很明顯的看到,此時,Edge浏覽器 在 URL 前面添加了 read: 僞協定:

小心閱讀模式下的存在某種問題或陰謀——看看我如何在Edge的閱讀模式下繞過SOP

以下我所描述的這些漏洞适用于所有的Edge版本,但本文所提到的PoC則是專門針對Edge浏覽器15.0以後的版本而建構的。 如果有人想要15.0以前的舊版本上執行這個POC的話,必須進行相應的修改,以確定在閱讀模式下呈現出來。

實際上閱讀模式下的網站是一種内部資源

閱讀模式下的網頁并不是正常閱讀模式下的那個網站,如果你按Ctrl+U快捷鍵來看看源代碼的話,你會驚奇的發現,你根本找不到原始頁面的任何蹤迹,實際上閱讀模式下的網站是一個托管在檔案系統中的内部資源: 

Edge浏覽器會解析原始網頁的内容,删除iframe / scripts及其他html标簽,最後将其呈現在内部閱讀視圖html中托管的iframe中。不過所有這些操作都發生在背景,使用者根本就一無所知,當使用者切換到閱讀模式時,他們會以為這些内容的浏覽位址還是停留在剛剛的網站上,因為他們并沒有對網址進行過改動。

但如果在Edge浏覽器的原始URL之前設定“read:”協定,然後再在閱讀模式下呈現網頁的話,我還可以利用腳本來執行嗎? 我可以自動在閱讀模式下随意加載網址嗎?

随意強制一個網站進入閱讀模式

我們來看看是否可以通過前置read:協定來強制把任意的URL從正常閱讀模式切換為閱讀模式:

雖然這種做法的效果非常好,但仍有一些程序引起了我的注意,比如雖然位址欄中的URL是crack.com.ar,但切換到閱讀模式後,URL卻是brokenbrowser.com。這是怎麼發生的呢?

于是我試着檢測了一下crack.com.ar,如下圖所示,我看到看到 location.replace 将其跳轉到了brokenbrowser.com,但Edge浏覽器卻并沒有更新位址欄! 

是以我總結的第一個漏洞便是:當腳本或 http 重定向發生時,Edge并不會更新位址欄:

小心閱讀模式下的存在某種問題或陰謀——看看我如何在Edge的閱讀模式下繞過SOP

尋找一個重定向

以上的操作意味着我們可以利用重定向這個機會把閱讀模式下的網站僞裝成任意網站,甚至可以對所有重定向到我們控制之下的網站進行僞裝,反正使用者在閱讀模式下的視覺呈現效果不會發生什麼變化。 例如,如果我可以把google.com重定向為一個惡意的頁面,但使用者還會認為他們的閱讀内容來自谷歌,實際上它是來自evil.com。

另外,考慮到所有搜尋結果都是重定向至目标的形式,是以僞裝成google進行重定向并不是不會很難。 例如,google從crack.com.ar索引了一個 “crack-01.html” 頁面,如果能找到重定向到“crack-01.html”頁面的原始連結的話,那操作就輕而易舉了,因為這是我自己的伺服器,是以可以任意修改它。不信,你可以打開Chrome,找到一個重定向到crack.com.ar伺服器的連結。 

不過請注意:由于你的目标是找到一個重定向到crack.com.ar的google URL,是以該網站正好處于我的控制之中:

小心閱讀模式下的存在某種問題或陰謀——看看我如何在Edge的閱讀模式下繞過SOP

在閱讀模式下重定向

現在,我已經有一個重定向到crack.com.ar的google.com.ar的 URL了,下面,我要做的就是在crack.com.ar中的網頁中寫一些文字,例如“該網站是僞裝的Google網站”等類似的提醒語句,這樣我就可以很容易地确定閱讀模式下看到的内容的真正網址了。 以下是前置了read: 僞協定的google重定向,在Edge浏覽器中打開時的界面如下所示: 

小心閱讀模式下的存在某種問題或陰謀——看看我如何在Edge的閱讀模式下繞過SOP

從上圖可以看出,雖然僞裝的網頁非常成功,但别忘了,我們是在閱讀模式下完成的這些。這也就意味着我還沒有完全控制頁面的閱讀形式的呈現外觀。因為在呈現頁面之前,Edge浏覽器還會删除大量的HTML内容。例如,iframe 和 script 都會被删除,并且JavaScript連結的程序也被停止了。那麼,我該如何自定義這個頁面并删掉後面的淡黃色背景呢?又怎麼在其中運作腳本呢?

在閱讀模式下運作腳本

處于閱讀模式下,Edge浏覽器會盡力把所有呈現出的内容都保持成靜态的,即不允許任何腳本,連iframe等也會被删除。也就是說,閱讀模式下的内容最終要像一本書那樣靜靜的呈現出來,而不是向網頁那樣動态變化。下面我就将試着處理保持這種靜态閱讀模式的一些障礙。

我先手動測試了幾個html标簽,比如iframe / script / meta,但是它們都會被删除。然後,我嘗試了一下object/html标簽,令我驚訝的是,這兩個标簽竟可以正常運作,看來事情比我想象的要更容易一些,object/html 标簽類似 iframe :,它們都是可以運作 script 的 html 容器 。

是以我總結的第二個漏洞便是:當在閱讀模式下呈現頁面時, Edge浏覽器并不會删除object/html标簽。

是以,如果我在crack.com.ar中的頁面中添加一個object/html 标簽,然後觸發一個提示的話,那麼一切看起來就順其自然了:

小心閱讀模式下的存在某種問題或陰謀——看看我如何在Edge的閱讀模式下繞過SOP

現在,Edge浏覽器會認為所閱讀的網頁源自google.com.ar,事實上,它是源自crack.com.ar,因為object/html是源自crack.com.ar。但問題是,雖然我可以觸發提示或警報提示,但我還是無法通路真正的網站。

假設我要将網站的背景顔色便為白色或使用其它更有說服力的攻擊手段,就需要繞過SOP或設定網站頂部的 URL,而不更改位址欄。下面,就讓我來嘗試SOP 繞過吧!

浏覽器有一個很重要的概念——同源政策(Same-Origin Policy,SOP)。所謂同源是指,域名,協定,端口相同。不同源的用戶端腳本(javascript、ActionScript)在沒明确授權的情況下,不能讀寫對方的資源。

簡單的來說,浏覽器允許包含在頁面A的腳本通路第二個頁面B的資料資源,這一切是建立在A和B頁面是同源的基礎上。

如果Web世界沒有同源政策,當你登入嘶吼的官網并打開另一個站點時,這個站點上的JavaScript可以跨域讀取你的嘶吼賬号資料,這樣整個Web世界就無隐私可言了。

尋求父頁面的相比對

如何讓頂部的域來呈現任意 html 代碼,以實作對真實網頁的通路?也許data uri 是個不錯的選擇。與在 cracking.com.ar 上托管的内容不同,在 data uri中呈現html,如下所示:

不過事情沒那麼簡單,因為Edge浏覽器不允許我利用data uri通路任何其他文檔。所有浏覽器都把data uris當作不同于其建立者的獨立源進行處理,但在Edge浏覽器上,這個限制卻很容易被繞過。頁面加載後,僅僅使用一個self-document.write就足以比對父頁面的域了。

是以我總結的第三個漏洞便是:在data: uris中,可以通過document.write設定源,使其與其父頁面相比對:

小心閱讀模式下的存在某種問題或陰謀——看看我如何在Edge的閱讀模式下繞過SOP

現在我已經成功繞過SOP,讓我們來看看能否 通路真正 的Google 的頂級域名?現在,我完全可以在不用改變任何設定的情況下,通路閱讀模式狀态下的内部 html 代碼了,用 top.document.write 即可把淡黃色的背景改為白色的了。

小心閱讀模式下的存在某種問題或陰謀——看看我如何在Edge的閱讀模式下繞過SOP

本文的技術手段如果要總結成一句話,那就是利用Edge浏覽器的閱讀模式(read: 僞協定)實作位址欄欺騙,然後進一步利用 &lt;object data:&gt; 實作完整的頁面僞造。

原文釋出時間為:2017年4月21日

本文作者:xiaohui 

本文來自雲栖社群合作夥伴嘶吼,了解相關資訊可以關注嘶吼網站。

<a href="http://www.4hou.com/technology/4429.html" target="_blank">原文連結</a>

繼續閱讀