JS应用

JS应用

68650063f9f73767844dac8a4dec747b

作用域(本地&全局)

运行后相关的数据值

调用堆栈(由下到上)

是代码的执行逻辑顺序

常见分析调试

  • 代码全局搜索
  • 文件流程断点
  • 代码标签断点
  • XHR提交

用途

  • 针对JS开发应用
  • 密码登录枚举爆破
  • 参数提交漏洞检测
  • 泄漏URL有更多测试

JS逆向

登录算法

流程&全局搜索

  • 流程断点:审查元素抓网络请求包发起程序
  • 全局搜索:通过抓包参数名进行代码全局搜索

标签&XHR断点

  • 标签断点:审查元素对应标签按钮加入断点
  • XHR断点:审查元素源代码加入XHR断点配置

BurpSuite插件应用

  1. 下载phantomjs并设置环境变量 https://phantomjs.org/download.html

  2. BurpSuite加载jsEncrypter插件 https://github.com/c0ny1/jsEncrypter/releases

  3. 对逆向的加密算法提取JS文件及代码

  4. 将代码写入到模版中(引用JS和调用加密-phantomjs_server.js)

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    var wasSuccessful = phantom.injectJs('JSEncrypt.js');  //引用js

    //调用加密代码
    function encrypt(password){
    var r = new JSEncrypt;
    o = "xxxxxxxxx";
    r.setPublicKey(o);
    var s = r.encrypt(password)
    return s;
    }

    // 处理函数(不要把调用加密代码直接写进去,容易卡死,单独写一个调用加密函数)
    function js_encrypt(payload){
    var newpayload;
    /**********在这里编写调用加密函数进行加密的代码************/
    var newpayload=encrypt(payload);
    /**********************************************************/
    return newpayload;
    }

  5. 运行刚写入的模版文件后插件连接测试

    1
    phantomjs phantomjs_server.js
  6. 正常设置发包后选择引用插件选项


反调试

什么是反调试?

实现防止他人调试、动态分析自己的代码

如何检测反调试?

  • 键盘监听(F12)
  • 检测浏览器的高度插值
  • 检测开发者人员工具变量是否为true
  • 利用console.log调用次数
  • 利用代码运行的时间差
  • 利用toString
  • 检测非浏览器

如何绕过反调试?

  • 禁用断点法
  • 条件断点法
  • 此处暂停法
  • 置空函数法
  • 本地覆盖法

混淆加密

  1. 开源代码混淆解密 JJEncode AAEncode JSFuck https://www.sojson.com/
  2. 商业代码混淆解密 https://www.jsjiami.com/ https://jsdec.js.org/

JS安全泄露

  • 会增加攻击面(URL、接口,分析调试代码逻辑)
  • 敏感信息(用户密码、ak/sk、token/session)
  • 潜在危险函数(eval、dangerallySetInnerHTML)
  • 开发框架类(寻找历史漏洞Vue、NodeJS、Angular 等)

打包器Webpack:PackerFuzzer AK/SK

云安全利用:工具箱CF(云安全后续会讲更多)

浏览器插件:Pentestkit FindSomething Wappalyzer(前期的JS 收集项目)