對酒店房間自助售貨機的支付漏洞挖掘
前言
住某酒店,一看就是個“正規”酒店。剛刷卡進門,就看到門縫裡的小卡片了,床頭上還貼這一個,個人微信的一個二維碼美其名曰SPA。還貼心的提供了自助售貨機購買TT。好奇掃碼看了下。是個微信小程式,看介面,感覺可以測試下。發現裡面東西的銷量真不錯哦。
正好在等外賣,掏出測試機,開啟神器BURP。開始測試。
測試環境
小程式抓包的時候要注意下安卓系統版本,在安卓7.0之後預設不信任使用者安裝的系統證書。所以手機在安裝burp證書的時候,需要將證書安裝為系統信任的證書。方法如下
手機需要先進行ROOT
- 證書格式轉換
# 1. 證書轉換,已經是pem格式的證書不需要執行這一步
openssl x509 -inform DER -in cacert.cer -out cacert.pem
# 2. 進行MD5的hash顯示
# openssl版本在1.0以上的版本的執行這一句
openssl x509 -inform PEM -subject_hash_old -in cacert.pem
# openssl版本在1.0以下的版本的執行這一句
openssl x509 -inform PEM -subject_hash -in cacert.pem
- 證書重新命名,數字為上面計算出的hash
mv cacert.pem 347bacb5.0
- 將新證書放到系統目錄下
/system/etc/security/cacerts
chmod 644 /system/etc/security/cacerts/<hash>.0
chgrp root <hash>.0
過程
簡單抓包看下過程中的包,點選物品的時候,會發包獲取物品資訊。post中的id引數還是可以遍歷的,可以獲取到每個房間裡的物品資訊。
看到這個ID能遍歷,感覺有機會的樣子,看上圖可以發現包中是不存在 cookie 的,只有一個 token,所有包中的 token 都是不會變化的。
嘗試修改返回包中的price相關的所有欄位,看看能否修改支付價格。前端顯示的價格確實是改變了,但支付的時候,還是按原價支付。
重新回顧整個購買流程,購買可以分為兩個操作。一個是點選物品,進入物品詳情頁面,可以看到物品的售價等資訊。然後是點選支付按鈕後,進入支付操作。目前只測試了點選物品之後的資料包,經過測試是無法修改價格的。
接下來開啟burp的包攔截,攔住點選支付按鈕時發出的包,發現POST中存在一個discount引數預設為0,這個單詞是折扣的意思。
哦吼,那是不是隻要改動這個引數就可以獲得購買折扣了?嘗試下,先將0改為1試試,支付的時候,金額成功減少了 1。
嘗試性的用此方法購買一個TT,看看是否可以以此來開啟這個櫃子的門,當我支付完一毛錢,哐噹一聲,櫃子的門打開了,一個TT出現在我面前。驚Σ(っ °Д °;)っ。
作為新時代好青年,(主要是我也用不到,哭/(ㄒoㄒ)/),將TT放回了格子中,默默關上了門。
總結
對於邏輯漏洞的挖掘,重點是需要關注流程中每一個包每一個引數的含義和作用。上文的支付邏輯漏洞比較簡單,引數也都是以英文單詞命名,比較容易猜測引數的具體作用。有些開發的引數設定很奇怪,會以拼音首字母開頭,這時候往往就比較難猜測引數的實際含義了,需要不斷的改包測試,修改一個引數後會影響什麼。