線上支付邏輯漏洞總結

wyzsk發表於2020-08-19
作者: 瞌睡龍 · 2013/07/19 19:11

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

本文章來源於烏雲知識庫,此映象為了方便大家學習研究,文章版權歸烏雲知識庫!

相關文章