前言
住某酒店,一看就是個“正規”酒店。剛刷卡進門,就看到門縫里的小卡片了,床頭上還貼這一個,個人微信的一個二維碼美其名曰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放回了格子中,默默關上了門。
總結
對於邏輯漏洞的挖掘,重點是需要關注流程中每一個包每一個參數的含義和作用。上文的支付邏輯漏洞比較簡單,參數也都是以英文單詞命名,比較容易猜測參數的具體作用。有些開發的參數設置很奇怪,會以拼音首字母開頭,這時候往往就比較難猜測參數的實際含義了,需要不斷的改包測試,修改一個參數后會影響什么。