首先先全局搜索关键词,这里我使用的是crypto。可以直接搜索aes,rsa,sm2之类的。当然方法不唯一,能够快速定位到就好。
encryptByDES: function (message, key, iv) {
if(message == "") return message;
//把私钥转换成16进制的字符串
var keyHex = CryptoJS.enc.Utf8.parse(key);
//模式为ECB padding为Pkcs7
var encrypted = CryptoJS.DES.encrypt(message, keyHex, {
iv: CryptoJS.enc.Utf8.parse(iv),
mode: CryptoJS.mode.CBC,
padding: CryptoJS.pad.Pkcs7
});
//加密出来是一个16进制的字符串
return encrypted.ciphertext.toString(CryptoJS.enc.Base64);
},
//DES解密
decryptByDES:function(ciphertext2, key,iv) {
var keyHex = CryptoJS.enc.Utf8.parse(key);
// 解密
var decrypted = CryptoJS.DES.decrypt({
ciphertext: CryptoJS.enc.Base64.parse(ciphertext2.toString())
}, keyHex, {
iv: CryptoJS.enc.Utf8.parse(iv),
mode: CryptoJS.mode.CBC,
padding: CryptoJS.pad.Pkcs7
});
return decrypted.toString(CryptoJS.enc.Utf8);
},
相信,有玩过密码学的师傅,或者说打过CTF的师傅。看见这种的加解密的函数。很容易就猜到是什么了。
这个时候继续,去访问下一页数据,比如说当前是第一页,直接请求第二页数据。这样就会请求第二页的数据,会发送一个请求数据包。这个时候我们的断点就有作用了。(断点刚开始随便打的)。
使用这些按钮慢慢找到需要的东西。
一步一步调试出来。看到这四个关键信息先记录
得到了iv,key ,mode等东西。又因为是des的加密。所需要的要素差不多齐全了。
跟踪到原始数据。
这个是时候,我们再去看看burp中的加密数据吧。
通过该请求可以获取到姓名,电话,家庭住址,但是这个请求数据包复杂,最多中低,数据量还不够。
使用解密工具,在结合之前所获取的几个要素,看看能不能扩大危害。
成功和之前的,看到的明文数据对上了。
这个时候,哪个参数是控制数量的呢?就算有未授权,数据量也太少了。不够高危的。
"limit":"KgcnlWysp9w="
是用来控制,相应包返回的数据的。
搜索用户的名字,发现果然是九个。那么直接设置limit为100
成功获取到了一百的数据量。最后经过测试大约获取到了55W用户三元素数据,也是高危成功到手了。
0x03 总结
既然引用数据库和数据表中的数据,那么测试sql为什么不可以呢?测试的点很多,但是需要第一步解密。像这种加密多的数据包,没准防护就很低,解密之后,测试的地方会很多。碰见加密先别放弃,先解密再说,万一能嘎嘎出呢。
原文始发于微信公众号(小呆安全):【实战小技巧系列】前端 JS 解密:一次简单高危漏洞案例
- 左青龙
- 微信扫一扫
- 右白虎
- 微信扫一扫
评论