漏洞原因:postMessage跨域漏洞導致,利用websocket接收用戶認證token
基礎知識
在了解這個漏洞的時候我們需要了解以下基礎的知識:PostMessage
PostMessage
PostMessage API是一個很簡單的實現跨域的方法,最基本的使用方法是:
B站的data數據,發送數據端
獲取數據代碼:
PostMessage產生的漏洞
偽造獲取數據端
若是發送數據端的第二個參數使用的是"*" 那么表示的是這個數據可以被任何域獲取到,這時候只要構造window.addEventListener來接受數據就可以了
偽造發送數據端
來看一段代碼:
可以看到對接收的message.origin進行了判斷,但是使用的正則并不標準
直接利用“wwwaexamplesender.com“, “wwwbexamplesender.com” etc.進行繞過,用postMessage發送數據給他接收
使用的poc可以參考:
測試代碼:window.postMessage("hello", "*")
利用xss進行攻擊
先看代碼:
這個對來源進行了嚴格的限制,可以通過xss進行攻擊
查看是否使用PostMessage
這個可以使用chrome下的開發者工具,在source ——> Global Listeners 下面可以看到
案例
上面slack的漏洞是一個案例,總體的思路就是站點監聽著一個message,并且沒有判斷message的來源,導致可以給他發message,message中有websocket的url的話,站點會和發送message的站點建立websocket鏈接,兵器會把認證后的token傳遞給發送者站點
該作者還有個PostMessage的漏洞,會影響到百萬網站,是AddThis這個插件導致的,不難理解。
1.qq郵箱
再國內的站點了翻了一個下午也沒有能找到一個可以利用的漏洞,不過在qq郵箱還是可以找到可以練習的地方
首先打開mail.qq.com 使用開發者工具打開查看listeners
我們構造測試代碼:
window.postMessage("hello", "*")
這時候對代下斷點進行調試,可以最終得到:
window.postMessage('{"action":"resize","width":"222","height":400}', "*")
方法有兩個一個是close,一個是resize。
直接執行的話就可以看到登入框的大小屬性產生了變化,構造poc:
構造html頁面,訪問這個頁面,就能看到登入框的大小產生了變化,
這個只是個案例,要是郵箱中接收的信息做了其他處理,那么就有可能產生其他的問題
2.微博
qq郵箱是偽造發送者,那微博這個就是偽造接收者。同樣打開微博查看信息
可以看到一行代碼:
b[c] && b[c].contentWindow && b[c].contentWindow.postMessage ? b[c].contentWindow.postMessage(g, "*")
這個很明顯的使用了*的配置
構造poc:
訪問html頁面觸發:
這個里面沒有任何可以利用的東西,但是一旦有用戶的敏感信息,那么就可以跨域獲取這些信息
1024你懂的国产日韩欧美_亚洲欧美色一区二区三区_久久五月丁香合缴情网_99爱之精品网站
責任編輯:韓希宇
免責聲明:
中國電子銀行網發布的專欄、投稿以及征文相關文章,其文字、圖片、視頻均來源于作者投稿或轉載自相關作品方;如涉及未經許可使用作品的問題,請您優先聯系我們(聯系郵箱:cebnet@cfca.com.cn,電話:400-880-9888),我們會第一時間核實,謝謝配合。