如何繞過sop執行XSS盜取cookie並發送推文?
先通過視頻看看這個漏洞的威力吧,在第一個59秒的視頻中,我們使用用戶名為:Charles Darwin發送推文。在第二個兩分鐘的視頻中,我們通過Edge默認密碼管理器進行發送推文甚至查看用戶密碼。Charles Darwin就是一個例子,這個漏洞允許攻擊者在已經登錄twitter的頁面上進行關注,甚至產生更大的危害。
視頻一:https://youtu.be/K3Ui3JxZGnE
視頻二:https://youtu.be/PlxQBmLrnQA
如果你第一次了解sop繞過技術,建議你閱讀之前兩篇文章:Edge中無域頁面進行繞過以及IE中無域頁面繞過sop,在這篇文章中,使用了相同的想法,只是採用了不同的技術進行繞過。
先讓我們快速的了解一個重要的概念:about:blank頁面總是屬於它來源的那個域。比如你在twitter頁面的iframe標籤就不可以訪問屬於google域中的about:blank頁面。即使他們的名稱都是about:blank,但是他們輸出的document.domain是不同的。
在之前,我們已經創造出了無域的about:blanks頁面。這些無域的頁面可以訪問任何域中的about:blank頁面。比如我們在擁有一個主頁面的about:blank,並且產生一個iframe指向twitter,另外一個指向google。這些iframe裡面有一些空的子iframe,以及他們的域是twitter和google。所以在這種情況下,iframe的最頂端就可以訪問域中的頁面,也就是可以進入到google以及twitter的域中。
上述情況非常好,但是微軟三個月前使用非常聰明的技巧修復了這個漏洞:無域about:blank頁面不再是真正的域,微軟為它們設置一個隨機GUID作為域,如下所示:。還有一些更有趣的東西(提示給邊緣開發者):域將看起來好像是空白,但不是。換句話說,Edge將GUID隱藏並返回空,但在內部,它仍然是GUID。
那就讓我們來試試吧,在Edege中按下F12打開調試器,然後在地址欄輸入about:blank。這一步驟是用於產生一個無域的頁面,現在看起來好像它和之前沒有任何變化。但是Edge正在對我們作出防範。不過這對我們來說很輕易的就可以繞過~
我們可以看到,調試工具認為我們在一個空的域,但我們並不是。
繞過補丁,創造無域頁面
就連調試工具都被微軟的補丁所欺騙,那我們應該如何才能看到這裡到底發生了什麼改變呢?比預期的更容易,只要嘗試載入任何具有相對路徑的東西,或者改變這個窗口的位置,甚至使用document.write就可以發現這裡改變了什麼,讓我們使用location.href=1,看看會發生什麼?
data:uri方法被修復以及Flash沒有開啟
我們之前創造無域的about:blank頁面的方法已經被修復。我們之前是在最頂層的窗口中使用data:uri。不過這個小伎倆已經被微軟修補,甚至現在已經不能自動執行flash插件。在微軟最近的更新後,每次執行flash之前,Edge都會對用戶進行詢問。
現在看起來,之前的POC(http://unsafe.cracking.com.ar/demos/edge-domainless-uxss/bing/index.html)看起來很醜。為Edge團隊修復這一漏洞點贊。
發現新的無域頁面
我們的data:uri的方法已經對這個攻擊不起作用了,那麼我們應該如何克服這一困難呢?首先,我將矛頭指向了iframe標籤, 而不是之前的頂部頁面,因為就像我們之前看到的那樣,Edge會將在主頁面的data:uri攔截。
top.location.href = "data:text/html,SOMETHING"; // Fails badly, error page
但是設置一個data:uri作為iframe的位置很好。但是,這不是一個漏洞,而是從頂部隔離了iframe域。
正如我們在SOP閱讀模式繞過這篇文章看到的,data:uri的隔離限制是非常瑣碎的,只是一個document.write就可以訪問到父級,但是我們現在不想這麼做了。因為訪問父級頂部對我們來講並沒有多大的作用了。我們現在想得一種方法是得到一個無域的頁面,所以我們需要一個三重的組合:數據-元-數據。這將會讓Edge返回我們想要的結果。
具體來說,我們將使用一個data:uri來設置iframe的位置,這個data:uri會重定向到另外一個data:uri進行刷新。獲取無域頁面步驟如下:
通過這一點小伎倆,我們就可以盜取Einsteins憑證,郵箱,paypal賬戶,設置以他的用戶名發推文。讓我們首先測試一下我們之前做的攻擊是否成功。我們在bing.com進行測試,很簡單的就進行了繞過,因為他有一個內部空白的Iframe,以及它沒有使用XFO。
攻擊預熱:測試bing.com
我們將創建一個帶有兩個iframe的網頁:一個指向bing.com和一個指向無域頁面。從無域頁面進行攻擊,我們可以在bing的內部空白iframe中執行代碼。 Bing中圖片的選項是我們需要的解釋模型。讓我打開Chrome一秒鐘,告訴你我的意思。
現在我們將藉助我們的無域」數據-元-數據」來構建該頁面並將代碼注入到空白iframe中。但是有一些我沒有說的話,你還記得我們在原始的無域SOP中與nature.com的命名問題嗎?如果沒有,讓我給你一個很快的認識。
在這一點上,我們的無域iframe能夠訪問bing的空白iframe,但訪問機制是非常重要的。我們不能直接訪問DOM,我們必須使用window.open方法。換句話說,如果bing位於主頁面的第一個iframe中,我們將無法以這種方式訪問其內部iframe:
alert(top[0][0].document.cookie); // ACCESS DENIED
事實上,我們甚至不能執行這一條命令:
top[0][0].location.href = "javascript:alert(document.cookie)"; // ACCESS DENIED
那麼我們該怎麼辦呢?很容易,在窗口中使用iframe的名字打開一個javascript url。如果bing的內部iframe名稱是「INNER_IFRAME」,以下代碼將會很好地工作:
window.open("javascript:alert(document.cookie)", "INNER_IFRAME"); // SOP BYPASSED!
但是很尷尬的一個問題,Bing中iframe沒有命名!不過不要灰心,我們可以請求bing團隊對這些iframe進行命名。或者我們可以繼續挖掘繞過方法~
設置iframe名字
我們不能設置目前我們沒有擁有的iframe名稱,除非它與我們在一個域中。我們要在bing中產生一個空白的iframe。外部的iframe處於不同的域中,但是標籤本身(元素,對象)是在我們的域中。所以,我可以設置任何名字:
但是內部的iframe是通過bing渲染的,所以即使他是空白頁面,他的域照樣是bing.com。惟一更改名稱方法是先將iframe的位置設置到我們可以訪問到的地方,然後才能更改它的名稱。現在,如果我們改變about:blank的位置,所以我們需要先成為bing.com,,然後我們才能訪問到無域的空白頁面。這就像從腳下進行拍攝一樣困難。
記住:我們的目標是從一個無域的頁面到一個域中的頁面。如果我們將域設置為要匹配的域,比如上述的bing,那麼這個攻擊毫無意義。所以我們將要做的是:設置位置,更改iframe名稱,然後以這樣的方式恢複位置,以保持原始域。聽起來很複雜?下面是這個方法的總結:
上述就是攻擊的方法,他的域已經恢復到了bing.com,這是代碼:
// Sets the location of Bing s inner iframe to about:blank// But now it is in our domain so we can set a name to it.window[0][0].location = "about:blank";// Set the inner iframe name to "CHARLES" so we can later inject code// using a window.open("javascript:[...]","CHARLES");window[0][0].name = "CHARLES";// Restore Bing s domain to the about:blank that we ve just renamed.window[0][0].document.write( );window[0][0].document.close();
給你一個好消息,我們不需要about:blank頁面的iframe,因為我們總是可以像上面那樣做。換句話說,bing的內部iframe是不是about:blank並不重要,因為我們最後可以通過原始域對空白頁面進行設置。
成功的大門為我們敞開,我們最後可以使用在iframe中的」數據-元-數據」執行一條命令。
測試這一漏洞的POC地址:http://unsafe.cracking.com.ar/demos/edgedatametadata/bing.html
視頻地址:https://youtu.be/E_6OFcTi5kQ
關於PoC,一個重要事項:在上面的示例中,我們使用http(不安全)連接,因為在https(安全)中,數據的元刷新會被阻止,所以它不會重定向到最終的數據uri。Edge錯誤地認為重定向是不安全的。然而,這可以通過使用document.write而不是第一個data:uri來輕鬆繞過。所以代替」數據-元-數據」應該是document.write-元-數據。
我們沒有在上述的PoC中使用它,因為在進行演示交互時(讓你按下按鈕來運行它)Edge檢測https用了1/3的時間。所以,我選擇在http和https自動使用以及可靠的PoC。但是無論如何,如下所示,它並不重要:我們的不安全(http)無域空白頁面能夠訪問安全頁面,所以讓我們建立一個真實的例子。
攻擊的真實案例:盜取Charles的cookie
是時候去進行真正的攻擊了。Charles是一個比較具有安全意識的用戶,他從來不在同一個頁面打開相關鏈接,比如在twitter,gmail以及它的個人文檔中。
讓我們來看一看,他正在通過選項新建一個標籤頁打開鏈接。
他的心情很好,直到他用Twitter的賬號打開了另一個標籤,並為阿爾弗雷德·華萊士(Alfred Wallace)提供了關於誰先推送的消息。
幾分鐘後,華萊士的回應就包括了支持他的聲明的證據。但是請記住,Charles不信任任何人,所以他複製了鏈接,以將其粘貼到一個新的窗口中,遠離他擁有個人數據(gmail,twitter)的窗口。
沒有任何一處地方是不可以出錯的,像這個世界上的大多數網站一樣,twitter同樣有幾個iframe。事實上,他有兩個命名為about:blank的iframe。所以這次的攻擊應該比bing簡單一些。但是在回到我們的故事之前,我們使用調試工具找到一個合適的iframe攻擊點。我在這裡打開另外一個新的窗口,與Charles的會無關。
漂亮,dm-post-iframe是一個非常好的選擇,所以我們有了盜取Charlie賬戶的所有條件。
Charlers打開了一個新的標籤頁,並載入了華萊士給他的網址。他不知道的是,即使在不一樣的標籤頁,也可以相互通信。那麼,如果我們在無域iframe中執行下面的代碼,會發生什麼?
window.open("javascript:alert(document.cookie)", "dm-post-iframe");
你是完全正確的,我們有Charlers的cookies~
警告:以下的概念證明將請勿做任何攻擊。
漏洞執行Poc:http://unsafe.cracking.com.ar/demos/edgedatametadata/cookiesfromcharlie.html
作為Charles發送推文
為了建立一個更好的PoC。我們將以他的名字發推文,甚至嘗試抓取他的密碼,而不是閱讀他的cookies。請記住,大多數用戶(如查理)使用自動填寫密碼的密碼管理員。 Edge密碼管理器沒有什麼不同,所以如果Charles保存了他的密碼,我們會得到它。這不是很難,只是強迫他註銷,然後登錄頁面將被自動載入,所有的數據(用戶名和密碼)會被重放。事實上,在這種情況下,除非用戶進行交互,否則窗體是隱藏的,但是Edge正在填充它,所以我們甚至可以設置窗體不可見。
在運行PoC之前,請考慮這是您的帳戶,而不是Charles。沒有任何東西被發送到網路,但如果你身後有人,他會在一個常規警報對話框中看到您的密碼。


TAG:嘶吼RoarTalk |
※Charlie Shrem:從未擁有被Winklevoss兄弟指控盜取的比特幣
※安全公司Certfa Lab指出,黑客可繞過雙重認證盜取Gmail或Yahoo賬戶
※利用11行Python代碼, 盜取了室友的U盤, 內容十分刺激!
※Facebook:盜取3000萬用戶信息的可能是垃圾郵件發送者
※盜取隱私?Mac os應用被指偷竊和上傳用戶瀏覽記錄
※新型惡意軟體MEWKit能夠盜取用戶的加密貨幣
※偷梁換柱為哪般,疑似國人盜取日本免費遊戲在Steam上架
※說唱歌手2 Milly正式起訴《堡壘之夜》遊戲盜取其舞蹈
※天睿起訴 SAP:盜取商業機密,HANA 立足於其知識產權之上
※慢霧區發布0day漏洞預警,可盜取交易所賬號
※WiFi信號竟然可以盜取密碼 還能不能好好的上網了
※匿名幣 Verge 再遭 51% 攻擊,黑客盜取近 3500 萬個 XVG
※飛流COO王帥報警稱林宇僱人盜取公司公章,偽造CEO任命書,警方介入調查
※在中國盜取ATM銀行卡信息「沒關係」?倆老外被忽悠來「淘金」
※防不勝防!NASA被黑客盜取約500MB火星數據
※ATM機新陷阱!被裝這種設備,有可能盜取銀行卡密碼等信息
※蘋果前華人工程師跳槽小鵬汽車,登機前被FBI逮捕:涉嫌盜取商業機密
※再現驚天BUG,系統從公會倉庫「盜取」道具,客服稱正常操作!
※烏克蘭能源部網站遭黑客攻擊,被要求支付贖金解鎖;PDF文件可被用於盜取系統憑證;大型垃圾郵件殭屍網路使用新技術躲避檢測
※EOS私鑰被黑客盜取?沃特金誕生在「多事之秋」依然發展良好