信息來源:FreeBuf
前言
在過去的幾個(gè)月里,我們看到使用這種以技術(shù)支撐的騙術(shù)日益增多,用戶的瀏覽器會(huì)被辣眼睛的紅屏以及類似”你的電腦可能存在風(fēng)險(xiǎn)”的提示消息”鎖定”。當(dāng)然,這種情形算是很常見的場(chǎng)景了,除此之外騙子們還在使用層出不窮的技巧來愚弄用戶。可參考兩篇推文(文一,文二)。
他們?yōu)樘摷傧秩疽粋€(gè)紅色警告或是藍(lán)屏死機(jī)(BSOD),有時(shí)甚至?xí)r截警告提示以防用戶離去。當(dāng)用戶關(guān)閉警告框后還會(huì)一直彈出一個(gè)新的警告框。事實(shí)上,通過使用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。
我知道其他瀏覽器(至少IE以及Chrome)也在做同樣的事情,我很高興在Edge上也能看到。然而,我很好奇這些警告頁(yè)面的真實(shí)來源,因?yàn)榈刂窓谥赶虻倪@個(gè)URL其內(nèi)容很明顯不在黑名單之列。這是一個(gè)內(nèi)部資源么?
在Edge中按下F12打開開發(fā)者工具,之后在控制臺(tái)中鍵入location。
Wow! 似乎真實(shí)的URL并沒有顯示在地址欄中。從開發(fā)者工具查詢結(jié)果中得知真實(shí)地址(location.href)為:
ms-appx-web://microsoft.microsoftedge/assets/errorpages/PhishSiteEdge.htm
那么我們看到的這個(gè)URL來源于hash?同時(shí),該內(nèi)部頁(yè)面似乎從location.search屬性中獲取了一些信息。
這看起來很有趣吧,我們能否僅僅通過在hash后面設(shè)置一個(gè)任意字符串,使得地址欄中顯示任意URL?該htm文件又是來自于哪里呢?
注:ms-appx:以及ms-appx-web:協(xié)議都是用于加載現(xiàn)代Windows應(yīng)用程序的內(nèi)部資源。
接下來我們打開Microsoft Edge瀏覽器目錄看看該文件是否存在。
打開任務(wù)管理器 —> 詳細(xì)信息 —> 右擊Microsoft Edge –> 選擇屬性。
Microsoft Edge位于C:\Windows\SystemApps\Microsoft.MicrosoftEdge_8wekyb3d8bbwe\,錯(cuò)誤頁(yè)面(上圖開發(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è)能成功加載,在我看來Edge瀏覽器是選擇性的允許我們加載一些頁(yè)面。
接下來加載BlockSite.htm:
ms-appx-web://microsoft.microsoftedge/assets/errorpages/BlockSite.htm
沒有成功。事實(shí)上,如果我們創(chuàng)建一個(gè)指向該URL的網(wǎng)頁(yè),點(diǎn)擊它之后什么也沒有發(fā)生,瀏覽器沒有回應(yīng)。在這種情況下,嘗試使用window.open要更使用一些(參考之前文章末尾提到的思路),因?yàn)槿绻@里存在問題,瀏覽器是會(huì)拋出一個(gè)錯(cuò)誤提示的。我們希望的是瀏覽器拒絕執(zhí)行某些操作時(shí)依舊保持無響應(yīng),或是瀏覽器至少?gòu)棾鲆粋€(gè)建議或者是錯(cuò)誤提示。
window.open("ms-appx-web://microsoft.microsoftedge/assets/errorpages/BlockSite.htm");
至此,我們得到一個(gè)拒絕訪問錯(cuò)誤!瀏覽器明確的提示我們這里存在一個(gè)問題(拒絕訪問),之后瀏覽器拒絕加載一個(gè)資源。這是速度的問題:現(xiàn)在我們可以使用一個(gè)try/catch快速重試,另一方面使用location.href加載一個(gè)空值,這使得我們能夠依靠timeout或者一個(gè)事件(onload/onerror)以觀察發(fā)生了什么。如果我們打算進(jìn)行模糊測(cè)試,相對(duì)try/catch來說使用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è)拒絕訪問錯(cuò)誤:
ms-appx-web://microsoft.microsoftedge/assets/errorpages/BlockSite.htm
改變少許字符(假如更改BlockSite中的B為C)則不會(huì)彈出任何錯(cuò)誤
ms-appx-web://microsoft.microsoftedge/assets/errorpages/ClockSite.htm
我們知道通過更改一個(gè)簡(jiǎn)單的字符可以欺騙Edge瀏覽器,但由于這個(gè)頁(yè)面根本不存在,所以說這個(gè)頁(yè)面也就不會(huì)加載。我們?cè)鯓硬拍芨囊粋€(gè)字符又確保URL仍然有效?編碼!現(xiàn)在我們嘗試使用ASCII碼2E來替換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打開這個(gè)辣眼睛的網(wǎng)頁(yè),BlockSite.htm僅僅只是從location.search獲得2個(gè)參數(shù)(BlockedDomain以及Host)。
精彩繼續(xù)!(XSS大牛Gareth及Mario:在這里我們還可以玩點(diǎn)花樣出來嘛)
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è)類似電話號(hào)碼的數(shù)字,用戶可以通過單擊鏈接,撥打我們的電話。對(duì)騙子來說整套流程非常完美。 作為賞金獵人,我的研究就到此為止了。其實(shí)這些內(nèi)部頁(yè)面還有很多有趣的地方,例如needie.html就值得我們?nèi)ド钊胙芯?,因?yàn)樗梢哉{(diào)用IE來運(yùn)行。如果你想看它的實(shí)際應(yīng)用,嘗試用Edge瀏覽器點(diǎn)開此頁(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)!