H5頁面漏洞挖掘之路-加密篇


H5頁面漏洞挖掘之路-加密篇

原文鏈接:https://mp.weixin.qq.com/s?__biz=MzAwMzYxNzc1OA==&mid=2247485531&idx=1&sn=e8119bd4187347690eed4e853292a0ff&chksm=9b392eeaac4ea7fcabdffb4b78a481b96b33e64796bb34b27dbf6e2d01cc84513ef5a1335d79&mpshare=1&scene=23&srcid=0724w1C4cyiXcu5e8MLwTRca&sharer_sharetime=1595544073716&sharer_shareid=ff83fe2fe7db7fcd8a1fcbc183d841c4#rd
 

這是 酒仙橋六號部隊 的第 43 篇文章。

全文共計1653個字,預計閱讀時長6分鍾

 

前言

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插件,更便捷我們后續的漏洞挖掘。可以參考如下:

    • https://github.com/Ebryx/AES-Killer


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM