作者:天融信阿爾法實驗室
公眾號:https://mp.weixin.qq.com/s/ezs56qtTEzFUQKDW1a0_XQ
一、前言
最近爆出了IE瀏覽器和Edge瀏覽器跨域獲取敏感信息的漏洞(繞過同源策略),不過并未被微軟承認,于是進行了一系列深度測試,看看此漏洞是否真實嚴重。
二、知識擴展
為了大家能夠更流暢地理解測試流程,我們先來了解下什么是同源策略和跨域。
1. 同源策略
同源策略(SOP)是在現代瀏覽器中實現的安全功能,它限制從一個源加載的Web頁面或腳本與來自另一個源的資源交互,從而防止不相關的站點相互干擾。也就是說,不同源的客戶端腳本在沒有明確授權的情況下,是不能讀寫對方資源的。
所謂同源就是指域名、協議、端口都相同,URL由協議、域名、端口和路徑組成,如果兩個URL的協議、域名和端口相同,則表示他們同源。相反,只要協議,域名,端口有任何一個的不同,就被當作是跨域。
下表是相對于 http://www.topsec.com.cn/admin/index.html 的同源檢測結果:

2.跨域
跨域是指從一個域的網頁去請求另一個域的資源,比如從http://www.a.com去請求http://www.b.com的資源,但一般情況下是不允許進行跨域的。因為前面我們說過,瀏覽器受同源策略的影響,不是同源的腳本不能操作其他源下面的對象,而如果想要操作另一個源下的對象時就需要授權了。
3.瀏覽器為什么一定要有同源策略呢?
其實這樣做的目的主要就是為了用戶的上網安全。我們可以試想一下,如果沒有同源策略的情況。比如一個惡意網站的頁面通過iframe嵌入了銀行的登錄頁面(二者不同源),在用戶登錄銀行的時候惡意網頁上的javascript腳本就可以獲取其用戶名和密碼。因此,有了同源策略,我們才能更安全的上網。
三、測試流程
本次測試,我是通過在本地搭建環境重新復現了漏洞并多番修改poc進行了不同的測試。
先來測試下IE瀏覽器
192.168.8.23/test.html 這里有一處重定向

Main.html
主要poc ,這里是漏洞觸發的對象performance. getEntriesByType,在Edge瀏覽器中是performance.getEntries,下面會有詳細介紹
setTimeout(function(){alert(performance. getEntriesByType (“resource”)[0].name)},4000);

這里有一處回跳history.html,這個回跳的作用是返回重新刷新頁面,不然只能獲取預先設定好的url。

請求main.html,可以看到彈出了我們預先設定好的url

此時,上圖中的彈出的URL不等同于192.168.6.23 這個源,這表明我們已經成功繞過瀏覽器中的同源策略并訪問了應該受限制的資源。但是,這有什么用?因為我們只是能獲取到預先設定的url,并沒有特別有用的信息,比如username,password等。別著急,我們繼續看。
此時通過history.html重新刷新頁面,也就是htstory.back()返回一步,這里接下來會重新跳轉回blog.tepsec.com.cn/?s=php這個頁面,然后我們點擊Search進行搜索,在搜索框中輸入topsec,現在讓我們看下效果:

可以看到成功獲取到了用戶輸入的信息topsec,實現了跨域獲取敏感信息的功能。所以,現在我們可以得出個結論,當用戶在與網頁交互時,我們可以利用此漏洞來獲取交互時的URL信息,試想一下,如果用戶的敏感信息在url中的話,比如某網站的登陸賬號密碼和url做了關聯http://foo.com/username=admin&password=admin,或者其他敏感信息,那么危害就非常大了。
同時不僅僅是輸入,點擊其他頁面時也可以抓到整個url信息。

下面再測試下Edge瀏覽器
192.168.8.23/test.html還是這個沒有變

Main.html
這里修改的地方有兩處,一處是getEntriesByType變成getEntries,另一處角標由[0]變成了[2]
setTimeout(function(){alert(performance. getEntries(“resource”)[2].name)},4000);

同樣有回跳跳轉history.html(history.back)。
訪問main.html,可以看到和IE瀏覽其一樣同樣彈出了我們預先設定好的url。

但是和IE不同的是這里并不能動態獲取用戶修改的url,也就是用戶輸入信息還是點擊都無法獲取用戶更改后的url信息,始終是彈出下面的url,所以暫時判斷在Edge瀏覽器下此漏洞并沒有什么危害 。
最后,我們再來看看關鍵的performance.getEntries這個api有哪些屬性,從下圖可以看到有四個屬性,目前能被用上的就是url信息也就是name屬性。

‘url’: perf.name,
‘entryType’: perf.entryType,
‘type’: perf.initiatorType,
‘duration(ms)’: perf.duration
這里修改下name變成 duration,彈出了個時間并沒啥用處

也就是說這個漏洞獲取到的name屬性也就是url還有些利用價值,像類型和時間基本沒什么利用價值。
四、漏洞利用
在實際利用過程中,攻擊者不會像上述一樣將信息彈出來顯示給受害者,只會悄悄地將信息竊取。
我們簡單修改下POC,模擬一下真實環境下的漏洞利用。
Main.html

首先將頁面高寬進行調整使其看起來真實一些,而不僅僅是那一小塊,然后將alert彈出信息的方式改為通過訪問cookie.php將信息發送至攻擊者服務器。
cookie.php

現在來訪問下Main.html

打開頁面后進行隨意搜索或點擊,然后來看192.168.8.23服務器下的log.txt文件

URL信息都發送到了攻擊者的服務器下。
五、結語
從測試情況來看,漏洞危害性還是很大的,好在這個刷新的功能會被用戶所察覺.所以還是在補丁未修補之前,不要使用IE和Edge瀏覽器瀏覽網頁和點擊不明鏈接。
本文由 Seebug Paper 發布,如需轉載請注明來源。本文地址:http://www.bjnorthway.com/883/