滲透測試前端JavaScript加密的分析利用


前端JavaScript加密繞過

1/1常見加密算法

比較簡單的base64、hex等這些編碼就不再說了。

0x01 對稱加密(加解密的密鑰相同)

  • 常用算法:DES、DES3、AES
  • 根據密鑰長度不同又分為:AES-128、AES-192、AES-256
  • 其中AES-192和AES-256在Java中使用需獲取無政策限制權限文件
  • 加密/解密使用相同的密鑰
  • 加密和解密的過程是可逆的

0x02非對稱加密(加解密密鑰為公鑰和私鑰)

  • 常用算法:RSA
  • 使用公鑰加密,使用私鑰解密
  • 公鑰是公開的,私鑰保密
  • 加密處理安全,但是性能極差,單次加密長度有限制
  • RSA既可用於數據交換,也可用於數據校驗
  • 數據校驗通常結合消息摘要算法 MD5withRSA 等
兩種加密算法常見結合套路:1、隨機生成密鑰2、密鑰用於AES/DES/3DES加密數據3、RSA對密鑰加密4、提交加密后的密鑰和加密后的數據給服務器

0x03信息摘要算法/簽名算法

  • 常用算法:MD5、HMAC(HmacMD5、HmacSHA1、HmacSHA256)、SHA(SHA1、SHA256、SHA512)
  • 不管明文多長,散列后的密文定長
  • 明文不一樣,散列后結果一定不一樣
  • 散列后的密文不可逆
  • 一般用於校驗數據完整性、簽名 sign
  • 由於密文不可逆,所以后台無法還原,也就是說他要驗證,會在后台以跟前台一樣的方式去重新簽名一遍。也就是說他會把源數據和簽名后的值一起提交到后台。所以我們要保證在簽名時候的數據和提交上去的源數據一致,這種算法特喜歡在內部加入時間戳

1/2實例操作

打開網站,抓包

image.png

修改個數據,比如修改num為1000

image.png

可以看到,修改過參數數據后,后端數據校驗之后不合法,所以沒有返回數據。

打開測試網站 -> F12控制台 -> 切換至 XHR

img

這里我們看下需要做的有什么?

  1. 請求中有token(t明顯是時間戳),token和數據不匹配后端不返回數據
  2. 返回的數據是加密的,需要解密

接下來我們就定位具體的加密函數和解密函數。

​ 按照上面提到的流程步驟

打開控制台 -> source ->搜索

搜索加密參數名 token

img

根據搜索結果的文件名判斷,基本上就是第二個文件,點擊打開

token的生成代碼

var token = md5(String(page) + String(num) + String(timestamp));

設置斷點,刷新

img

成功進入斷點,沒毛病了

根據加密函數,編寫腳本

img

可以看到,生成的token和URL中的一致,至此,加密部分完成。

解密部分同樣的道理,搜索返回包中的參數,直接搜索list發現有點多,不太好觀察,還有一種方法

img

可以看到數據部分html的id為ip-list,再次搜索

img

成功找到解密數據包的代碼

設置斷點,進一步確認

img

沒毛病,可以看到decode_str后就開始出現我們需要的明文數據了,所以這里的 decode_str 就是我們要的解密方法。剩下就是分析代碼,編寫解密腳本了。

function decode_str(scHZjLUh1) {    scHZjLUh1 = Base64["\x64\x65\x63\x6f\x64\x65"](scHZjLUh1);    key = '\x6e\x79\x6c\x6f\x6e\x65\x72';    len = key["\x6c\x65\x6e\x67\x74\x68"];    code = '';    for (i = 0; i < scHZjLUh1["\x6c\x65\x6e\x67\x74\x68"]; i++) {        var coeFYlqUm2 = i % len;        code += window["\x53\x74\x72\x69\x6e\x67"]["\x66\x72\x6f\x6d\x43\x68\x61\x72\x43\x6f\x64\x65"](scHZjLUh1["\x63\x68\x61\x72\x43\x6f\x64\x65\x41\x74"](i) ^ key["\x63\x68\x61\x72\x43\x6f\x64\x65\x41\x74"](coeFYlqUm2))    }    return Base64["\x64\x65\x63\x6f\x64\x65"](code)}

先運行下看看

img

報錯,提示Base64未定義,設置斷點,找到Base64的具體代碼

img

復制粘貼進代碼,再次運行

img

艹,提示Windows未定義,根據流程,缺啥補啥,debug,找對應的值

img

可以看到分別對應的是StringfromCharCode

那就是調用了String.fromCharCode方法了,替換掉,再次運行

img

bingo~

成功解密獲取到明文數據。

1/3 Python實現加密方法合集**

關於上述第一部分的常見加密算法,GitHub有對應的倉庫,直接可以用的

GitHub:https://github.com/dhfjcuff/R-A-M-D-D3-S-M-H/

本文來源於:http://byd.dropsec.xyz/2019/09/08/%E6%B8%97%E9%80%8F%E6%B5%8B%E8%AF%95%E4%B9%8BJS%E9%80%86%E5%90%91/


免責聲明!

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



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