close

0x00 背景

測試過程中碰到了一個會話系統,出於保密原則這裡沒有截圖,自己想象一哈。

0x01 業務邏輯

系統功能很簡單,就是實現用戶A和用戶B進行會話,並且可以查看以往的聊天記錄。出現漏洞的點也是在歷史記錄上,通過構造參數可以查看網站內任意用戶的聊天記錄。

首先,用戶發起查詢歷史記錄的請求時,會發送如下的數據包,並且得到響應:

可以看到服務器返回了cid,也就是當前發送數據包的uid用戶發起過的會話名稱,一共有三條。

再之後,服務器緊接着發送了第二個數據包:

可以看到響應包就是要查詢的會話記錄。業務邏輯到此執行結束。

0x02 測試

不難想出,可以通過更改uid的方式來查看別人的聊天記錄。但我實際測試後發現,在第一個數據包如果更改為別人的uid,是可以返回別人的會話名稱的。但到了第二個數據包,發送的uid參數經過了加密,最後結果類似於以下字符串:

zrApelW+58GcN+At5Ons+8EysUAU77xqxj9ko3m7XMo=

大致猜個base64,解出來發現亂碼,應該是加密後的base64。

通過F12查看業務運行請求了哪些文件,最後在一個js文件里發現了AES加密的信息:

1234567891011function t(e) { var t = v.enc.Utf8.parse("bPsoyIvIALTcy6OP"), i = v.enc.Utf8.parse(e), a = v.enc.Utf8.parse("W8m2J1I3pQUADWyA8s"), s = v.AES.encrypt(i, t, { iv: a, mode: v.mode.CBC, padding: v.pad.Pkcs7 }); return s.toString() }

JAVASCRIPT

已經很明顯了,這是一個CBC方式的AES加密,密碼是bPsoyIvIALTcy6OP,偏移量是W8m2J1I3pQUADWy,直接把加密後的密文用工具解出來:

這時候思路已經很明顯了,我們可以構造其他人的uid來獲取歷史會話,再對uid進行上述AES加密,把剛剛獲取到的會話值也一併提交,就可以實現越權查看他人歷史記錄的效果。

0x03 結果

測試成功,無圖~

K1nm0,轉載於k1nm0.com。


arrow
arrow
    全站熱搜
    創作者介紹
    創作者 鑽石舞台 的頭像
    鑽石舞台

    鑽石舞台

    鑽石舞台 發表在 痞客邦 留言(0) 人氣()