Johnny's Collections

          生活總是有太多的無奈與失望,讓我們以在努力學習和工作中獲得的成就感和快樂來沖淡它們。

          BlogJava 首頁 新隨筆 聯系 聚合 管理
            10 Posts :: 0 Stories :: 80 Comments :: 0 Trackbacks

          筆者在N年前曾經參與一個第三方支付平臺的設計開發工作,這過程中研究了某個國內著名的第三方支付平臺,就是因為該平臺的設計者輕易

          的相信外部傳入的數據,不進行校驗,導致被我發現了一個致命的漏洞,從而測試性的盜取了2分錢,這個事情一直到2個月后,該平臺通過

          與網銀對賬才發現,由于不知道這個致命的漏洞是否已經修復,避免有惡意的人使用該方式去做違法的事情,我在這里只簡單描述該漏洞,

          而不公開該支付平臺的真實身份。

          該漏洞出現在充值業務上,實現邏輯請看下面的Sequence diagram:




          描述一下流程:

          1.客戶打開第三方支付平臺的充值頁面,選擇一個銀行,填入充值數據(充值虛擬賬戶、充值金額等),提交表單。
          2.充值頁面把數據(包括充值數據,第三方支付平臺在該銀行注冊的商戶標識)使用銀行提供的加密工具進行加密,傳遞給指定銀行的網銀系統前臺。
          3.網銀系統前臺產生一張轉賬訂單,并要求用戶輸入賬號、密碼,然后提交。
          4.網銀系統后端校驗賬號和密碼,然后根據用戶賬號,充值金額,第三方支付平臺商戶標識,把金額從用戶賬號轉賬到第三方支付平臺賬號。
          5.網銀系統把確認數據(充值虛擬賬戶、充值金額、充值結果、轉入商戶標識等)加密后重定向到第三方支付平臺結果頁面。
          6.頁面把確認數據提交給后臺,并向客戶顯示充值成功。
          7.第三方支付平臺后臺接收到確認數據,把虛擬金額充入虛擬賬戶,完成整個流程。

          漏洞描述:

          我們可以看到,用戶在第三方支付平臺充值頁面提交數據,和網銀向第三方支付平臺發送確認數據,都需要對數據進行非對稱加密,但在當

          時,我發現某一銀行,竟然不提供發送充值數據時的加密工具,這意味著,選擇這家銀行,用戶必須以明文的格式提交充值數據,好了,這

          下我可以嘗試進行man in the middle attack了,在我提交表單一刻,我把頁面的HTML腳本修改了,把提交時由第三方支付平臺指定的在所

          選銀行注冊的商戶標識修改為另外一個商戶的標識(假設是我自己注冊的商戶),OK,這意味著我的充值金額從我的賬號轉到我修改后的注

          冊商戶賬號,這時,該網銀把確認數據(注意,包括轉入商戶標識,這時的商戶標識是我修改后的標識)發送回第三方支付平臺,其實,如

          果第三方支付平臺如果能進一步校驗確認數據中的注冊商戶標識,就能發現注冊商戶標識被惡意篡改,從而導致充值失敗,但該平臺的設計

          人員卻假設之前的充值頁面已經自動填入了自己的注冊商戶標識,這里并不作校驗,從而導致這個致命的漏洞,錢沒有轉到自己的賬號上,

          而自己卻把等額的虛擬資金充值到了第三方虛擬賬戶中。


          特別聲明:本文內容純屬用于技術研討,任何人嘗試使用本文的信息實施非法行為而導致的任何損失和責任,本人概不負責。
          posted on 2010-04-27 21:51 Johnny.Liang 閱讀(3407) 評論(0)  編輯  收藏 所屬分類: 系統設計
          主站蜘蛛池模板: 虎林市| 玉田县| 方山县| 祁门县| 墨脱县| 永济市| 枣强县| 建平县| 稷山县| 泽州县| 关岭| 怀仁县| 宣汉县| 盐津县| 德江县| 海阳市| 龙泉市| 怀仁县| 武夷山市| 漯河市| 桐柏县| 长顺县| 正阳县| 浦北县| 平潭县| 平度市| 中超| 桂东县| 应用必备| 甘南县| 德阳市| 连南| 甘孜| 阿荣旗| 苗栗县| 呼和浩特市| 景宁| 兴仁县| 德清县| 定陶县| 沛县|