安全動(dòng)態(tài)

濫用Edge瀏覽器的“惡意站點(diǎn)警告”特性,實(shí)現(xiàn)地址欄欺騙

來(lái)源:聚銘網(wǎng)絡(luò)    發(fā)布時(shí)間:2016-12-29    瀏覽次數(shù):
 

信息來(lái)源:FreeBuf  

前言

在過(guò)去的幾個(gè)月里,我們看到使用這種以技術(shù)支撐的騙術(shù)日益增多,用戶的瀏覽器會(huì)被辣眼睛的紅屏以及類(lèi)似”你的電腦可能存在風(fēng)險(xiǎn)”的提示消息”鎖定”。當(dāng)然,這種情形算是很常見(jiàn)的場(chǎng)景了,除此之外騙子們還在使用層出不窮的技巧來(lái)愚弄用戶??蓞⒖純善莆模?/span>文一,文二)。

他們?yōu)樘摷傧秩疽粋€(gè)紅色警告或是藍(lán)屏死機(jī)(BSOD),有時(shí)甚至?xí)r截警告提示以防用戶離去。當(dāng)用戶關(guān)閉警告框后還會(huì)一直彈出一個(gè)新的警告框。事實(shí)上,通過(guò)使用continuous history.pushState trick 技巧Jeromesegura(twitter)發(fā)送給我的Chrome版本真的能凍結(jié)瀏覽器。

分析

Jerome的這個(gè)樣本給了我很多啟發(fā),之后我學(xué)習(xí)了在Edge上用于防止驅(qū)動(dòng)式攻擊的SmartScreen技術(shù),它可以屏蔽掉被列入黑名單的URL。

SmartScreen Demo中有很多樣本,我選擇了Malware Page

我知道其他瀏覽器(至少I(mǎi)E以及Chrome)也在做同樣的事情,我很高興在Edge上也能看到。然而,我很好奇這些警告頁(yè)面的真實(shí)來(lái)源,因?yàn)榈刂窓谥赶虻倪@個(gè)URL其內(nèi)容很明顯不在黑名單之列。這是一個(gè)內(nèi)部資源么?

在Edge中按下F12打開(kāi)開(kāi)發(fā)者工具,之后在控制臺(tái)中鍵入location。

Wow! 似乎真實(shí)的URL并沒(méi)有顯示在地址欄中。從開(kāi)發(fā)者工具查詢結(jié)果中得知真實(shí)地址(location.href)為:

ms-appx-web://microsoft.microsoftedge/assets/errorpages/PhishSiteEdge.htm

那么我們看到的這個(gè)URL來(lái)源于hash?同時(shí),該內(nèi)部頁(yè)面似乎從location.search屬性中獲取了一些信息。

這看起來(lái)很有趣吧,我們能否僅僅通過(guò)在hash后面設(shè)置一個(gè)任意字符串,使得地址欄中顯示任意URL?該htm文件又是來(lái)自于哪里呢?

注:ms-appx:以及ms-appx-web:協(xié)議都是用于加載現(xiàn)代Windows應(yīng)用程序的內(nèi)部資源。 

接下來(lái)我們打開(kāi)Microsoft Edge瀏覽器目錄看看該文件是否存在。

打開(kāi)任務(wù)管理器 —> 詳細(xì)信息 —> 右擊Microsoft Edge –> 選擇屬性。

Microsoft Edge位于C:\Windows\SystemApps\Microsoft.MicrosoftEdge_8wekyb3d8bbwe\,錯(cuò)誤頁(yè)面(上圖開(kāi)發(fā)者工具中所示)在\Assets\ErrorPages目錄內(nèi)。

這有很多文件,我們使用完整的ms-appx-web URL在Edge瀏覽器下加載它們。就像這樣:

ms-appx-web://microsoft.microsoftedge/assets/errorpages/PhishSiteEdge.htm

然而它卻進(jìn)入了我的默認(rèn)搜索引擎。 

繼續(xù)嘗試從該目錄加載其他htm文件,列表中的第一個(gè)為acr_error.htm:

ms-appx-web://microsoft.microsoftedge/assets/errorpages/acr_error.htm

ok,這一個(gè)能成功加載,在我看來(lái)Edge瀏覽器是選擇性的允許我們加載一些頁(yè)面。
接下來(lái)加載BlockSite.htm:

ms-appx-web://microsoft.microsoftedge/assets/errorpages/BlockSite.htm

沒(méi)有成功。事實(shí)上,如果我們創(chuàng)建一個(gè)指向該URL的網(wǎng)頁(yè),點(diǎn)擊它之后什么也沒(méi)有發(fā)生,瀏覽器沒(méi)有回應(yīng)。在這種情況下,嘗試使用window.open要更使用一些(參考之前文章末尾提到的思路),因?yàn)槿绻@里存在問(wèn)題,瀏覽器是會(huì)拋出一個(gè)錯(cuò)誤提示的。我們希望的是瀏覽器拒絕執(zhí)行某些操作時(shí)依舊保持無(wú)響應(yīng),或是瀏覽器至少?gòu)棾鲆粋€(gè)建議或者是錯(cuò)誤提示。

window.open("ms-appx-web://microsoft.microsoftedge/assets/errorpages/BlockSite.htm");

至此,我們得到一個(gè)拒絕訪問(wèn)錯(cuò)誤!瀏覽器明確的提示我們這里存在一個(gè)問(wèn)題(拒絕訪問(wèn)),之后瀏覽器拒絕加載一個(gè)資源。這是速度的問(wèn)題:現(xiàn)在我們可以使用一個(gè)try/catch快速重試,另一方面使用location.href加載一個(gè)空值,這使得我們能夠依靠timeout或者一個(gè)事件(onload/onerror)以觀察發(fā)生了什么。如果我們打算進(jìn)行模糊測(cè)試,相對(duì)try/catch來(lái)說(shuō)使用handlers/onload更實(shí)用。
使用window.open手動(dòng)嘗試了幾次之后,我們可以得出Edge瀏覽器能合理加載acr_error.htm頁(yè)面,但會(huì)完全拒絕加載BlockSite.htm的結(jié)論。實(shí)際上,改變BlockSite.htm中的少許字符,加載一個(gè)不應(yīng)該存在的頁(yè)面卻不會(huì)彈出錯(cuò)誤。這也意味著在Edge瀏覽器深處某個(gè)地方有二進(jìn)制代碼將我們的URL與BlockSite.htm進(jìn)行比較。
該URL會(huì)彈出一個(gè)拒絕訪問(wèn)錯(cuò)誤:

ms-appx-web://microsoft.microsoftedge/assets/errorpages/BlockSite.htm

改變少許字符(假如更改BlockSite中的B為C)則不會(huì)彈出任何錯(cuò)誤

ms-appx-web://microsoft.microsoftedge/assets/errorpages/ClockSite.htm

我們知道通過(guò)更改一個(gè)簡(jiǎn)單的字符可以欺騙Edge瀏覽器,但由于這個(gè)頁(yè)面根本不存在,所以說(shuō)這個(gè)頁(yè)面也就不會(huì)加載。我們?cè)鯓硬拍芨囊粋€(gè)字符又確保URL仍然有效?編碼!現(xiàn)在我們嘗試使用ASCII碼2E來(lái)替換BlockSite.htm中的點(diǎn)。就像這樣:BlockSite%2Ehtm

window.open("ms-appx-web://microsoft.microsoftedge/assets/errorpages/BlockSite%2ehtm");

現(xiàn)在Edge允許我們加載資源了,附加一個(gè)URL。就像這樣:#http://www.facebook.com

window.open("ms-appx-web://microsoft.microsoftedge/assets/errorpages/BlockSite%2ehtm"+ "#http://www.facebook.com");

現(xiàn)在我們可以用一個(gè)欺騙性的URL打開(kāi)這個(gè)辣眼睛的網(wǎng)頁(yè),BlockSite.htm僅僅只是從location.search獲得2個(gè)參數(shù)(BlockedDomain以及Host)。

精彩繼續(xù)!(XSS大牛Gareth及Mario:在這里我們還可以玩點(diǎn)花樣出來(lái)嘛)

window.open("ms-appx-web://microsoft.microsoftedge/assets/errorpages/BlockSite%2ehtm?"+ "BlockedDomain=facebook.com&Host=Technical Support Really Super Legit CALL NOW\:"+ "800-111-2222#http://www.facebook.com");

Test the PoC LIVE (on Edge!)

我們?cè)O(shè)置一個(gè)類(lèi)似電話號(hào)碼的數(shù)字,用戶可以通過(guò)單擊鏈接,撥打我們的電話。對(duì)騙子來(lái)說(shuō)整套流程非常完美。 作為賞金獵人,我的研究就到此為止了。其實(shí)這些內(nèi)部頁(yè)面還有很多有趣的地方,例如needie.html就值得我們?nèi)ド钊胙芯?,因?yàn)樗梢哉{(diào)用IE來(lái)運(yùn)行。如果你想看它的實(shí)際應(yīng)用,嘗試用Edge瀏覽器點(diǎn)開(kāi)此頁(yè)面,看看它是如何運(yùn)作的。

最后

如果你好奇字符串比較是怎么發(fā)生的?為何它會(huì)失效?

那么你可以在IDA Free中加載EdgeHtml.dll并分析CURLBlock::s_IsBlockPageUrl函數(shù)。

如果你更喜歡實(shí)時(shí)調(diào)試,可以在EdgeHtml!CURLBlock::s_IsBlockPageUrl處設(shè)置一個(gè)斷點(diǎn)。 祝你好運(yùn)!

 
 

上一篇:使用機(jī)器學(xué)習(xí)來(lái)幫助安全服務(wù)

下一篇:2016年12月29日 聚銘安全速遞