信息來源:FreeBuf
前言
在過去的幾個月里,我們看到使用這種以技術支撐的騙術日益增多,用戶的瀏覽器會被辣眼睛的紅屏以及類似”你的電腦可能存在風險”的提示消息”鎖定”。當然,這種情形算是很常見的場景了,除此之外騙子們還在使用層出不窮的技巧來愚弄用戶??蓞⒖純善莆模?/span>文一,文二)。
他們?yōu)樘摷傧秩疽粋€紅色警告或是藍屏死機(BSOD),有時甚至會攔截警告提示以防用戶離去。當用戶關閉警告框后還會一直彈出一個新的警告框。事實上,通過使用continuous history.pushState trick 技巧Jeromesegura(twitter)發(fā)送給我的Chrome版本真的能凍結瀏覽器。
分析
Jerome的這個樣本給了我很多啟發(fā),之后我學習了在Edge上用于防止驅動式攻擊的SmartScreen技術,它可以屏蔽掉被列入黑名單的URL。
在SmartScreen Demo中有很多樣本,我選擇了Malware Page。
我知道其他瀏覽器(至少IE以及Chrome)也在做同樣的事情,我很高興在Edge上也能看到。然而,我很好奇這些警告頁面的真實來源,因為地址欄指向的這個URL其內容很明顯不在黑名單之列。這是一個內部資源么?
在Edge中按下F12打開開發(fā)者工具,之后在控制臺中鍵入location。
Wow! 似乎真實的URL并沒有顯示在地址欄中。從開發(fā)者工具查詢結果中得知真實地址(location.href)為:
ms-appx-web://microsoft.microsoftedge/assets/errorpages/PhishSiteEdge.htm
那么我們看到的這個URL來源于hash?同時,該內部頁面似乎從location.search屬性中獲取了一些信息。
這看起來很有趣吧,我們能否僅僅通過在hash后面設置一個任意字符串,使得地址欄中顯示任意URL?該htm文件又是來自于哪里呢?
注:ms-appx:以及ms-appx-web:協(xié)議都是用于加載現(xiàn)代Windows應用程序的內部資源。
接下來我們打開Microsoft Edge瀏覽器目錄看看該文件是否存在。
打開任務管理器 —> 詳細信息 —> 右擊Microsoft Edge –> 選擇屬性。
Microsoft Edge位于C:\Windows\SystemApps\Microsoft.MicrosoftEdge_8wekyb3d8bbwe\,錯誤頁面(上圖開發(fā)者工具中所示)在\Assets\ErrorPages目錄內。
這有很多文件,我們使用完整的ms-appx-web URL在Edge瀏覽器下加載它們。就像這樣:
ms-appx-web://microsoft.microsoftedge/assets/errorpages/PhishSiteEdge.htm
然而它卻進入了我的默認搜索引擎。
繼續(xù)嘗試從該目錄加載其他htm文件,列表中的第一個為acr_error.htm:
ms-appx-web://microsoft.microsoftedge/assets/errorpages/acr_error.htm
ok,這一個能成功加載,在我看來Edge瀏覽器是選擇性的允許我們加載一些頁面。
接下來加載BlockSite.htm:
ms-appx-web://microsoft.microsoftedge/assets/errorpages/BlockSite.htm
沒有成功。事實上,如果我們創(chuàng)建一個指向該URL的網(wǎng)頁,點擊它之后什么也沒有發(fā)生,瀏覽器沒有回應。在這種情況下,嘗試使用window.open要更使用一些(參考之前文章末尾提到的思路),因為如果這里存在問題,瀏覽器是會拋出一個錯誤提示的。我們希望的是瀏覽器拒絕執(zhí)行某些操作時依舊保持無響應,或是瀏覽器至少彈出一個建議或者是錯誤提示。
window.open("ms-appx-web://microsoft.microsoftedge/assets/errorpages/BlockSite.htm");
至此,我們得到一個拒絕訪問錯誤!瀏覽器明確的提示我們這里存在一個問題(拒絕訪問),之后瀏覽器拒絕加載一個資源。這是速度的問題:現(xiàn)在我們可以使用一個try/catch快速重試,另一方面使用location.href加載一個空值,這使得我們能夠依靠timeout或者一個事件(onload/onerror)以觀察發(fā)生了什么。如果我們打算進行模糊測試,相對try/catch來說使用handlers/onload更實用。
使用window.open手動嘗試了幾次之后,我們可以得出Edge瀏覽器能合理加載acr_error.htm頁面,但會完全拒絕加載BlockSite.htm的結論。實際上,改變BlockSite.htm中的少許字符,加載一個不應該存在的頁面卻不會彈出錯誤。這也意味著在Edge瀏覽器深處某個地方有二進制代碼將我們的URL與BlockSite.htm進行比較。
該URL會彈出一個拒絕訪問錯誤:
ms-appx-web://microsoft.microsoftedge/assets/errorpages/BlockSite.htm
改變少許字符(假如更改BlockSite中的B為C)則不會彈出任何錯誤
ms-appx-web://microsoft.microsoftedge/assets/errorpages/ClockSite.htm
我們知道通過更改一個簡單的字符可以欺騙Edge瀏覽器,但由于這個頁面根本不存在,所以說這個頁面也就不會加載。我們怎樣才能更改一個字符又確保URL仍然有效?編碼!現(xiàn)在我們嘗試使用ASCII碼2E來替換BlockSite.htm中的點。就像這樣:BlockSite%2Ehtm
window.open("ms-appx-web://microsoft.microsoftedge/assets/errorpages/BlockSite%2ehtm");
現(xiàn)在Edge允許我們加載資源了,附加一個URL。就像這樣:#http://www.facebook.com
window.open("ms-appx-web://microsoft.microsoftedge/assets/errorpages/BlockSite%2ehtm"+ "#http://www.facebook.com");
現(xiàn)在我們可以用一個欺騙性的URL打開這個辣眼睛的網(wǎng)頁,BlockSite.htm僅僅只是從location.search獲得2個參數(shù)(BlockedDomain以及Host)。
精彩繼續(xù)!(XSS大牛Gareth及Mario:在這里我們還可以玩點花樣出來嘛)
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!)
我們設置一個類似電話號碼的數(shù)字,用戶可以通過單擊鏈接,撥打我們的電話。對騙子來說整套流程非常完美。 作為賞金獵人,我的研究就到此為止了。其實這些內部頁面還有很多有趣的地方,例如needie.html就值得我們去深入研究,因為它可以調用IE來運行。如果你想看它的實際應用,嘗試用Edge瀏覽器點開此頁面,看看它是如何運作的。
最后
如果你好奇字符串比較是怎么發(fā)生的?為何它會失效?
那么你可以在IDA Free中加載EdgeHtml.dll并分析CURLBlock::s_IsBlockPageUrl函數(shù)。
如果你更喜歡實時調試,可以在EdgeHtml!CURLBlock::s_IsBlockPageUrl處設置一個斷點。 祝你好運!