前言
H5移動應用作為個人生活、辦公和業務支撐的重要部分,也面臨著來自移動平臺的安全風險,不僅僅來自于病毒,更多的是惡意的攻擊行為、篡改行為和釣魚攻擊。關于H5頁面的安全測試,業務邏輯功能測試基本和WEB滲透測試是通用的。
從業務安全角度考慮,一般客戶端與服務端通信會進行加密,防止被刷單、薅羊毛等攻擊,需要對數據加密加密處理。所以我們必須了解各種加密方式。開發者常會用到AES(Advanced Encryption Standard)加密算法,在此對H5頁面的漏洞挖掘案例分享給大家。
前置知識
AES加密模式介紹
AES加密的模式主要有五種:ECB (電子密碼本模式)、CBC(密碼分組連接模式)、CTR(計算器模式)、CFB(密碼反饋模式)、OFB (輸出反饋模式)。這五種工作模式主要是在加密器的使用上有所區別。在這里主要介紹下ECB和CBC這兩種開發者最常用的兩種加密方式。
ECB模式
其使用方式是一個明文分組加密成一個密文分組,相同的明文分組永遠被加密成相同的密文分組。直接利用加密算法分別對每個64位明文分組使用相同的64位密鑰進行加密。每個明文分組的處理是相互獨立的。
優點:
簡單。
有利于并行計算。
缺點:
相同的明文塊會加密成相同的密文塊,安全性低。
CBC模式
引入一個初始向量IV,它的作用跟MD5加鹽有些類似,可以防止相同的明文塊加密成同樣的密文塊。IV是初始向量,參與第一個明文塊的異或,后續的每一個明文塊,都與它前一個密文塊相異或。這樣就能保證相同的明文塊不會被加密為相同的密文塊。 優點:能隱蔽明文的數據模式,在某種程度上能防止數據篡改, 諸如明文組的重放,嵌入和刪除等,安全性高。 缺點:無法并行計算,性能相對ECB低,會出現錯誤傳播(errorpropagation)。
案例
在一次金融行業的漏洞挖掘過程中,從發現請求和返回數據包全程加密。我們該如何突破數據包加密,并自動化暴力破解登陸。繼續深度挖掘發現存在越權漏洞,最終獲取大量賬戶敏感信息。
發現加密
瀏覽器訪問H5頁面登錄接口。
隨意輸入一個手機號和密碼,點擊登陸。利用Burp抓包查看,發現請求和響應數據包全過程加密。
破解加密算法
右鍵查看登陸網頁源代碼尋找加密方法:
點擊登錄調用前端onLoginBtnClick方法,獲取用戶請求數據requestData,在調用ajax請求中發送未加密的數據內容。
ajax請求函數postData:全局搜索postData函數,最終在common.js找到。在發送請求中發現加解密函數:加密函數encrypt和解碼函數decrypt。
因為一般插件的js文件都是非格式化存儲的,調試時非格式化文件不能直觀顯示,我們格式化代碼后再調試查看。發現使用AES加密ECB模式PKCS7Padding填充,密鑰key硬編碼在js代碼中。
我們編寫Python腳本解密登錄請求數據包,成功拿到明文請求數據包。
由于登錄沒有驗證碼機制。我們可以利用登陸接口和服務端返回的提示信息,可以批量枚舉平臺用戶手機號,而且發現登陸密碼是純6位數字,首選密碼是123456,進行嘗試自動化暴力破解。
在執行Python腳本的時候,發現不允許重放請求數據包,那肯定是存在簽名校驗,用于防止攻擊者重放請求數據包。
通過diff請求數據包,確認是校驗請求頭中的replayId值。我們去代碼中定位replayId值是如何生成的。
在JS文件中搜索replayId,發現replayId變量是調用guid函數賦值的。
繼續定位guid函數,到這里我們已經成功拿到請求和響應數據包的加解密過程,和guid生成的過程。
編寫Python的execjs執行js代碼,偽造guid值。
自動化腳本
繼續編寫python代碼,完成自動化暴力破解登陸。萬事具備,那離成功就差一個手機號字典了。
通過前期的信息收集,整理出一份高質量的手機號字典,幸福來的太突然,成功爆破出一個手機號和密碼。
成功登陸用戶賬戶:
繼續深度挖掘,發現通過修改請求數據包中的mobilephone參數,還可以越權查看他人銀行卡額度信息,包括卡ID、可用額度、已使用額度等。
總結
- 遇到全程加密數據包,我們首先分析前端JS文件,發現使用AES加密ECB模式PKCS7Padding填充,密鑰key硬編碼在js代碼中,編寫腳本破解加密算法。又發現利用請求頭中的replayId值,防止攻擊者重放請求數據包。通過全局搜索發現replayId變量是調用guid函數賦值的,繼續編寫Python腳本完成自動化的暴力破解,成功登陸,深入漏洞挖掘。
- 后續我們可以寫一個Burp插件,更便捷我們后續的漏洞挖掘??梢詤⒖既缦拢?/li>
- https://github.com/Ebryx/AES-Killer
本文轉載自: 酒仙橋6號部隊
如若轉載,請注明出處: https://mp.weixin.qq.com/s