筆者在N年前曾經(jīng)參與一個(gè)第三方支付平臺的設(shè)計(jì)開發(fā)工作,這過程中研究了某個(gè)國內(nèi)著名的第三方支付平臺,就是因?yàn)樵撈脚_的設(shè)計(jì)者輕易
的相信外部傳入的數(shù)據(jù),不進(jìn)行校驗(yàn),導(dǎo)致被我發(fā)現(xiàn)了一個(gè)致命的漏洞,從而測試性的盜取了2分錢,這個(gè)事情一直到2個(gè)月后,該平臺通過
與網(wǎng)銀對賬才發(fā)現(xiàn),由于不知道這個(gè)致命的漏洞是否已經(jīng)修復(fù),避免有惡意的人使用該方式去做違法的事情,我在這里只簡單描述該漏洞,
而不公開該支付平臺的真實(shí)身份。
該漏洞出現(xiàn)在充值業(yè)務(wù)上,實(shí)現(xiàn)邏輯請看下面的Sequence diagram:
描述一下流程:
1.客戶打開第三方支付平臺的充值頁面,選擇一個(gè)銀行,填入充值數(shù)據(jù)(充值虛擬賬戶、充值金額等),提交表單。
2.充值頁面把數(shù)據(jù)(包括充值數(shù)據(jù),第三方支付平臺在該銀行注冊的商戶標(biāo)識)使用銀行提供的加密工具進(jìn)行加密,傳遞給指定銀行的網(wǎng)銀系統(tǒng)前臺。
3.網(wǎng)銀系統(tǒng)前臺產(chǎn)生一張轉(zhuǎn)賬訂單,并要求用戶輸入賬號、密碼,然后提交。
4.網(wǎng)銀系統(tǒng)后端校驗(yàn)賬號和密碼,然后根據(jù)用戶賬號,充值金額,第三方支付平臺商戶標(biāo)識,把金額從用戶賬號轉(zhuǎn)賬到第三方支付平臺賬號。
5.網(wǎng)銀系統(tǒng)把確認(rèn)數(shù)據(jù)(充值虛擬賬戶、充值金額、充值結(jié)果、轉(zhuǎn)入商戶標(biāo)識等)加密后重定向到第三方支付平臺結(jié)果頁面。
6.頁面把確認(rèn)數(shù)據(jù)提交給后臺,并向客戶顯示充值成功。
7.第三方支付平臺后臺接收到確認(rèn)數(shù)據(jù),把虛擬金額充入虛擬賬戶,完成整個(gè)流程。
漏洞描述:
我們可以看到,用戶在第三方支付平臺充值頁面提交數(shù)據(jù),和網(wǎng)銀向第三方支付平臺發(fā)送確認(rèn)數(shù)據(jù),都需要對數(shù)據(jù)進(jìn)行非對稱加密,但在當(dāng)
時(shí),我發(fā)現(xiàn)某一銀行,竟然不提供發(fā)送充值數(shù)據(jù)時(shí)的加密工具,這意味著,選擇這家銀行,用戶必須以明文的格式提交充值數(shù)據(jù),好了,這
下我可以嘗試進(jìn)行man in the middle attack了,在我提交表單一刻,我把頁面的HTML腳本修改了,把提交時(shí)由第三方支付平臺指定的在所
選銀行注冊的商戶標(biāo)識修改為另外一個(gè)商戶的標(biāo)識(假設(shè)是我自己注冊的商戶),OK,這意味著我的充值金額從我的賬號轉(zhuǎn)到我修改后的注
冊商戶賬號,這時(shí),該網(wǎng)銀把確認(rèn)數(shù)據(jù)(注意,包括轉(zhuǎn)入商戶標(biāo)識,這時(shí)的商戶標(biāo)識是我修改后的標(biāo)識)發(fā)送回第三方支付平臺,其實(shí),如
果第三方支付平臺如果能進(jìn)一步校驗(yàn)確認(rèn)數(shù)據(jù)中的注冊商戶標(biāo)識,就能發(fā)現(xiàn)注冊商戶標(biāo)識被惡意篡改,從而導(dǎo)致充值失敗,但該平臺的設(shè)計(jì)
人員卻假設(shè)之前的充值頁面已經(jīng)自動填入了自己的注冊商戶標(biāo)識,這里并不作校驗(yàn),從而導(dǎo)致這個(gè)致命的漏洞,錢沒有轉(zhuǎn)到自己的賬號上,
而自己卻把等額的虛擬資金充值到了第三方虛擬賬戶中。
特別聲明:本文內(nèi)容純屬用于技術(shù)研討,任何人嘗試使用本文的信息實(shí)施非法行為而導(dǎo)致的任何損失和責(zé)任,本人概不負(fù)責(zé)。