zoukankan      html  css  js  c++  java
  • JS-逆向练习

    宁大JS加密逆向

    练习URL=https://uis.nbu.edu.cn/authserver/login

    1. 打开调试台,找到POST包如下:发现password是经过js加密混淆的. 这里captchaResponse的值是验证码的参数,lt和


    lt的值就是网页的tooken值

    execution 的值为tooken值减去1,其余数值不变,主要是这个password要解密出来

    2. 通过对password变量名搜索,可以定位到第三个js脚本

    3. 对这个js再用变量名定位,基本就是这个_etd2函数了

    1. 来验证下是不是这个_etd2函数,设个断点看是否会进入断点调试这里,可以看到密码的值是我们输入的admin

    2. 通过追踪_etd2函数发现是一长串函数,
      function _etd(_p0) {try{var _p2 = encryptAES(_p0,pwdDefaultEncryptSalt);$("#casLoginForm").find("#passwordEncrypt").val(_p2);}catch(e){$("#casLoginForm").find("#passwordEncrypt").val(_p0);}}function _etd2(_p0,_p1) {try{var _p2 = encryptAES(_p0,_p1);$("#casLoginForm").find("#passwordEncrypt").val(_p2);}catch(e){$("#casLoginForm").find("#passwordEncrypt").val(_p0);}}
      用鬼鬼代码格式化后发现_etd2需要传入2个参数,我们继续追踪encryptAES函数

    3. 这里看到里面又有个_gas函数并且要传入3个值,其中第一和第3个还要调用_rds函数,我们先去看_rds函数

    4. _rds函数 还算简单,就是输个数字,然后生成同等数字大小的随机字符串

      _rds(64)+data: 分别就是64位随机字符串+密码
      _p1:id为#pwdDefaultEncryptSalt的值
      _rds(16) 随机16位的字符串
      然后再传入_gas中进行AES加密

    5. _gas函数是用AES加密,加密方式是CBC,Pkcs7,传入的key就是_p1,iv就是_rds,对_rds(64)+data进行加密

      可以看到_rds(64)+data就是WkjXdfn3pZMDiaN3ziBmmMJJ5xP3JjCNeD8ca87crmjF4EJbEjmASnyQ2z87exTTadmin,这个admin就是输入的密码
      key:5oTEvjuoShogiOTS 和iv:JEj3ZKYi4cYdTyN2

    6. 用工具模拟计算出加密后的数据
      加密后数据为UIGK5b9ieBXhTw+9qK88cqXfJkDWUBnkLaqoBN8FHpXx4xVSIUqXZScdmAqz9rQN5lSPkK5B1QxuXSliw2STbO/U7fP5iSiqyKkUbfos2jE=

    7. 验证
      我们输入encrypted.toString()得出结果为UIGK5b9ieBXhTw+9qK88cqXfJkDWUBnkLaqoBN8FHpXx4xVSIUqXZScdmAqz9rQN5lSPkK5B1QxuXSliw2STbO/U7fP5iSiqyKkUbfos2jE=

      从POST包也可以验证结果一样.

  • 相关阅读:
    Vue 常用指令
    Vue起飞前的准备
    Django ORM 高性能查询优化
    Django 缓存、序列化、信号
    关于Django ModelForm渲染时间格式问题
    Django自定义分页并保存搜索条件
    Docker容器中用户权限管理
    Linux三种SSH协议登陆方式
    Docker部署Nextcloud私有网盘
    Zabbix官方部署搭建
  • 原文地址:https://www.cnblogs.com/Young-shi/p/14867815.html
Copyright © 2011-2022 走看看