<dd id="sga4y"><optgroup id="sga4y"></optgroup></dd>
<nav id="sga4y"><code id="sga4y"></code></nav>
  • <optgroup id="sga4y"></optgroup>

    原文地址:http://drops.wooyun.org/papers/345

    0x00 背景介紹


    隨著網民越來越習慣于網上購物,出現了越來越多的電商網站,在線交易平臺等。

    其中肯定要涉及在線支付的流程,而這里面也有很多邏輯。

    由于這里涉及到金錢,如果設計不當,很有可能造成0元購買商品等很嚴重的漏洞。

    0x01 檢測方法與案例


    根據烏云上的案例,支付漏洞一般可以分為五類,如果發現其他的類型,歡迎補充:

    1、支付過程中可直接修改數據包中的支付金額

    這種漏洞應該是支付漏洞中最常見的。

    開發人員往往會為了方便,直接在支付的關鍵步驟數據包中直接傳遞需要支付的金額。

    而這種金額后端沒有做校驗,傳遞過程中也沒有做簽名,導致可以隨意篡改金額提交。

    只需要抓包看到有金額的參數修改成任意即可。

    我們來看一看烏云上的幾個案例:

    WooYun: 必勝客宅急送支付表單偽造金額

    WooYun: 肯德基宅急送支付表單偽造金額

    WooYun: 新浪微號存在支付繞過漏洞

    WooYun: 淘寶網某處存在嚴重支付漏洞

    WooYun: 佳域手機官方商城支付漏洞 (這個亮點是真的到貨了……)

    WooYun: 91分站存在支付繞過

    WooYun: 江西移動1元錢買手機漏洞

    WooYun: 愛拍主站存在嚴重漏洞

    WooYun: 再爆蘇寧某站點重大漏洞

    WooYun: 蘇寧某站點存在嚴重漏洞

    WooYun: TP-Link官方商城支付漏洞

    WooYun: 鮮果網支付漏洞

    WooYun: 京東商城購買商品時,可以修改商品金額,并且支付成功

    WooYun: 京東團購訂單金額可在客戶端修改并提交網銀支付

    WooYun: 網通營業廳客戶信息泄露、充值支付價格修改漏洞

    2、沒有對購買數量進行負數限制

    這種案例也比較常見,產生的原因是開發人員沒有對購買的數量參數進行嚴格的限制。

    這種同樣是數量的參數沒有做簽名,導致可隨意修改,經典的修改方式就是改成負數。

    當購買的數量是一個負數時,總額的算法仍然是"購買數量x單價=總價"。

    所以這樣就會導致有一個負數的需支付金額。

    若支付成功,則可能導致購買到了一個負數數量的產品,也有可能返還相應的積分/金幣到你的賬戶上。

    WooYun: 百腦匯商城支付漏洞

    WooYun: m1905電影網存在嚴重支付漏洞

    WooYun: 國美網上商城支付漏洞1元訂購Iphone 4S!

    WooYun: 又拍網旗下某站存在嚴重支付漏洞

    WooYun: 新蛋中國支付漏洞

    WooYun: 拉卡拉商店0元購支付問題

    WooYun: 中糧52buy商城的支付漏洞

    WooYun: 115網盤存在支付繞過

    最后一個漏洞與其他不同的是把數量改成一個超大的數,而不是負數。

    結果導致支付的金額可能超過一定數值而歸0。

    3、請求重放

    購買成功后,重放其中請求,竟然可以使購買商品一直增加~

    阿里云主機多次下訂單,會出現0元訂單情況,不知道程序員后端是如何寫的……

    WooYun: 豆丁網購買豆元后可以將豆元倍增

    WooYun: 阿里云0元訂單,服務器隨便買

    4、其他參數干擾

    此案例金錢已經做了簽名認證,修改后不通過。

    但是仍然有一個參數會對最后的金額產生影響而沒有一起做簽名導致問題產生。

    WooYun: 新東方邏輯支付漏洞

    0x02 修復方案


    其實修復方案很簡單,對傳遞的金錢,數量等對最后支付金額會產生影響的所有參數做簽名。

    并且注意簽名算法不可被猜測到。

    這樣攻擊者修改數據的時候驗證便不會通過。

    同時注意對已經交易的訂單不可重復而造成重復重置的漏洞。

    參考:http://zone.wooyun.org/content/878

    97av