實戰:加密傳輸數據解密

前言

下面將分享一些實際的滲透測試經驗,幫助你應對在測試中遇到的數據包內容加密的情況。我們將以實戰爲主,技巧爲輔,進入逆向的大門。

技巧

開局先講一下技巧,掌握好了技巧,方便逆向的時候可以更加快速的找到關鍵函數位置!

後續也會有更多的實戰會按照技巧去操作。

  • 關鍵詞搜索一:在js代碼沒有混淆的情況下。我們可以直接進行關鍵詞搜索,加密可以搜索encrypt,解密可以搜索decrypt。至於原因就是,無論是加密數據解密,還是明文數據進行加密,都必然會經過加密算法。

  • 關鍵詞搜索二:如果第一種方法搜索不到需要的信息,可以嘗試搜索 JSON.parse() 方法。加密數據通常是字符串格式的,解密後也是字符串格式的。在前端中,需要使用 JSON 格式而不是字符串格式的數據,因此必須進行反序列化(即將字符串轉換爲 JavaScript 對象)處理。

  • 關鍵詞搜索三:api後端返回的是json鍵值對格式的,我們也可以去嘗試搜索加密字符值的鍵去找到關鍵的加密位置。

正文

實戰一:

在進入網址後,查看XHR請求時發現數據被加密了。儘管XHR中的數據是經過加密的,但在頁面上卻以明文形式呈現。因此可以初步判斷,在前端渲染頁面時,會對從後端傳輸下來的數據進行解密操作。

搜索JSON.parse時,找到了11個參數。在每一個包含JSON.parse的代碼行下設置斷點,然後刷新頁面,斷點被斷在了18647行。

控制檯中打印JSON.parse(v),你會發現明文數據就是v。所以這段代碼是用來解密的函數。

y是解密後的參數,y是由v解析出來的,v的傳參是d,d的傳參是l,下斷點發現l是加密字符串。Object(c.a)(l)表示對變量c.a執行函數調用,並將參數l傳遞給該函數。

將這段代碼扣下來並且運行,報錯沒有沒有找到Object(c.a)。

在控制檯打印Object(c.a),直接進去函數內部扣代碼

改寫一下代碼,l是傳進去的加密字符串。

運行之後t報錯,發現_keyStr未定義

全局搜索_keyStr發現是一個字符串,直接複製下來。

運行報錯Object(c.b)未定義

將鼠標浮上Object(c.b)可以發現他是一個名字爲d2的函數,進去js裏面將d2函數摳出來並且替換掉函數名

改寫函數名

運行報錯_p未定義

全局搜索p發現這個變量很乏有太多重複的,不過初步判斷是一個變量,我們可以在p後面加一個空格搜索。_p加空格只有7個,很快便找到了這個變量,發現他是一個字符串。將他扣進代碼裏面。

運行報錯,_u_d函數未定義。

全局搜索_u_d,將其扣進代碼裏面

運行一下。

數據已經成功解密了。

【----幫助網安學習,以下所有學習資料免費領!加vx:dctintin,備註 “博客園” 獲取!】

 ① 網安學習成長路徑思維導圖
 ② 60+網安經典常用工具包
 ③ 100+SRC漏洞分析報告
 ④ 150+網安攻防實戰技術電子書
 ⑤ 最權威CISSP 認證考試指南+題庫
 ⑥ 超1800頁CTF實戰技巧手冊
 ⑦ 最新網安大廠面試題合集(含答案)
 ⑧ APP客戶端安全檢測指南(安卓+IOS)

實戰二:

抓個包,數據包內容已經被加密了

從initiator進入到js文件裏面

搜索解密關鍵詞,發現第66752有個decrypt,把斷點下在return那一行。

在66752下斷點刷新,將返回的那段代碼在控制檯打印。發現是解密之後的數據,那麼這一段函數肯定是解密函數

扣代碼運行報錯url2和text2未定義

去瀏覽器下斷點補上兩個未定義的參數,url2是一個固定的值

而text2是加密字符串。

運行之後報錯cryptoJs未定義

將cryptoJs.exports在控制檯上面打印出來,發現是加密庫crypto,直接調庫替換即可

運行報錯,node.js裏面的解碼函數是btoa,將encode替換成btoa即可。

解密成功

結尾

部分數據代碼已做脫敏處理。

更多網安技能的在線實操練習,請點擊這裏>>

  

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章