JS逆向笔记-记录某测试论坛的js逆向练习

x33g5p2x  于2022-04-08 转载在 其他  
字(2.0k)|赞(0)|评价(0)|浏览(328)

这个网站应该是专门练习的,因为有个地方说不太通,在此只能算是练习,记录下,方便以后进行查阅。

首先访问主页:

他会设置一个cookie值,并且会把加密的salt

带出来。还有个叫lt的东西也会用html的形式传出来。

这个lt,会在发送请求的时候带出去。

输入用户名密码后,点击登录,发送的是这样的body:

  1. username=admin888&password=H1uFJjwe8ZoS04VFZBOCBfma9qdoxrSd%2FND4gBK3%2F8YlVJaQ4ZJFSIO5PLjgZdYTkrgjILDmfXADSDtWJQpZCp%2FOUSX3nOo5zz6fuVHd%2FuU%3D&captchaResponse=hppx&lt=LT-3032376-qI7M4Pc15tRwukqt4nKojGlPuUL5gx1646621586496-mdSp-cas&dllt=userNamePasswordLogin&execution=e1s1&_eventId=submit&rmShown=1

这里重新刷新了下页面,上面的salt和lt会改变,下面来分析下这个password。关键代码已经定位到此处,下个断点:

  1. function _gas(data, key0, iv0) {
  2. key0 = key0.replace(/(^\s+)|(\s+$)/g, "");
  3. var key = CryptoJS.enc.Utf8.parse(key0);
  4. var iv = CryptoJS.enc.Utf8.parse(iv0);
  5. var encrypted = CryptoJS.AES.encrypt(data, key, {
  6. iv: iv,
  7. mode: CryptoJS.mode.CBC,
  8. padding: CryptoJS.pad.Pkcs7
  9. });
  10. return encrypted.toString();
  11. }
  12. function encryptAES(data, _p1) {
  13. if (!_p1) {
  14. return data;
  15. }
  16. var encrypted = _gas(_rds(64) + data, _p1, _rds(16));
  17. return encrypted;
  18. }
  19. function _ep(p0, p1) {
  20. try {
  21. return encryptAES(p0, p1);
  22. } catch (e) {}
  23. return p0;
  24. }
  25. var $_chars = 'ABCDEFGHJKMNPQRSTWXYZabcdefhijkmnprstwxyz2345678';
  26. var _chars_len = $_chars.length;
  27. function _rds(len) {
  28. var retStr = '';
  29. for (i = 0; i < len; i++) {
  30. retStr += $_chars.charAt(Math.floor(Math.random() * _chars_len));
  31. }
  32. return retStr;
  33. }

从中可以知道密码加密是这样的

加密字符串:64位随机数+密码;

密钥:登录首页时服务器给的16位字符串。

偏移量:16位随机的字符串。

加密方式:CBC;

填充:pkcs7

比如这样的:

他的data是:fa7B3ixA4EP7YBQfjPtbn6PX8THKAYSWD6ncB8RhrNxy5aAcdQWc63PnkGbf8w5padmin888

key0是:Jaj2b6QTiljjdd6J

iv0是:XMZb5i5FEfP4YjSA

用在线AES加密试下:

GPUjEIFA0wavbfPL9xVlVPE0C/Id2lZfZtiuNfc0Dk4+nA2UD9syrng7xn3PhFrhVRiTI4sMrqfrd+x7Um6REyHwxvyJI38ZoykQAC+SelQ=

看下程序他跑出来是多少

发现是一样的。看看发的包是不是一样的:

  1. username=admin888&password=GPUjEIFA0wavbfPL9xVlVPE0C%2FId2lZfZtiuNfc0Dk4%2BnA2UD9syrng7xn3PhFrhVRiTI4sMrqfrd%2Bx7Um6REyHwxvyJI38ZoykQAC%2BSelQ%3D&captchaResponse=apcf&lt=LT-3032840-P9cGjCTq3ciu0bTqOitzoL2nzmTLRv1646622551540-mdSp-cas&dllt=userNamePasswordLogin&execution=e1s3&_eventId=submit&rmShown=1

从中可以看到是一样的,只是转成了URI。

注:这里服务器在解码时,必须要偏移量,而从这提交的包中,没有看到对偏移量相关的加密等。在此感觉,这个站点仅仅是个测试站点。但对我也很有启发,后面一篇博文,用这种方式,实现密钥和偏移量的交换。

相关文章