前端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實例操作
打開網站,抓包
修改個數據,比如修改num為1000
可以看到,修改過參數數據后,后端數據校驗之后不合法,所以沒有返回數據。
打開測試網站 -> F12控制台 -> 切換至 XHR
這里我們看下需要做的有什么?
- 請求中有token(t明顯是時間戳),token和數據不匹配后端不返回數據
- 返回的數據是加密的,需要解密
接下來我們就定位具體的加密函數和解密函數。
按照上面提到的流程步驟
打開控制台 -> source ->搜索
搜索加密參數名 token
根據搜索結果的文件名判斷,基本上就是第二個文件,點擊打開
token的生成代碼
var token = md5(String(page) + String(num) + String(timestamp));
設置斷點,刷新
成功進入斷點,沒毛病了
根據加密函數,編寫腳本
可以看到,生成的token和URL中的一致,至此,加密部分完成。
解密部分同樣的道理,搜索返回包中的參數,直接搜索list發現有點多,不太好觀察,還有一種方法
可以看到數據部分html的id為ip-list
,再次搜索
成功找到解密數據包的代碼
設置斷點,進一步確認
沒毛病,可以看到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)}
先運行下看看
報錯,提示Base64
未定義,設置斷點,找到Base64
的具體代碼
復制粘貼進代碼,再次運行
艹,提示Windows未定義,根據流程,缺啥補啥,debug,找對應的值
可以看到分別對應的是String
和fromCharCode
那就是調用了String.fromCharCode
方法了,替換掉,再次運行
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/