Burpsuite+Mitmproxy+Python解决Web渗透测试过程中遇到的自定义JS加密防护问题
字数 1101 2025-08-15 21:31:27

Web渗透测试中处理自定义JS加密防护的解决方案

背景与问题

在Web渗透测试过程中,经常会遇到使用自定义JavaScript加密防护的网站,这给测试工作带来了诸多挑战:

  1. 自定义加密算法:网站使用JavaScript实现的独特加密/编码算法
  2. 重写成本高:用其他语言重写算法耗时且容易出错
  3. 测试效率低:需要在BurpSuite和命令行之间频繁切换
  4. 请求体加密:BurpSuite中只能看到编码后的请求体,难以修改

解决方案概述

使用以下工具组合解决上述问题:

  • BurpSuite:一级代理,用于拦截和修改响应
  • mitmproxy:二级代理,用于自动处理加密/解密
  • Python + PyExecJS:调用JavaScript加密函数

工具安装

  1. PyExecJSpip3 install pyexecjs
  2. mitmproxypip3 install mitmproxy
  3. BurpSuite:社区版或专业版均可

实施步骤

1. 定位加密JavaScript方法

  • 在JS文件中搜索关键字:encode, encrypt
  • 查找AJAX请求,搜索post,检查发送请求前的操作
  • 使用BurpSuite插件jsrainbow辅助分析

2. 验证JavaScript功能

使用PyExecJS测试JavaScript加密函数:

import execjs

data = '{"NAME":"xxx","ID":"xxx","_DATA":"示例数据"}'

def myencoder(data):
    jsstr = get_js()
    loader = execjs.compile(jsstr)  # 加载JS文件
    return loader.call('xxx', data)  # 调用js方法

def get_js():
    with open("C:\\xxx.js", 'r', encoding='utf-8') as f:
        return f.read()

if __name__ == '__main__':
    print(myencoder(data))

3. 修改响应中的JavaScript

通过BurpSuite修改响应,去除加密函数调用:

  1. 进入ProxyOptionsMatch & Replace
  2. 添加规则匹配加密函数调用并移除
  3. 清除浏览器缓存确保加载修改后的JS

4. 编写mitmproxy插件

创建自动加密的mitmproxy插件:

from mitmproxy import ctx, http
import execjs

def myencoder(data):
    jsstr = get_js()
    loader = execjs.compile(jsstr)
    return loader.call('xxx', data)

def get_js():
    with open("C:\\xxx.js", 'r', encoding='utf-8') as f:
        return f.read()

class Modify:
    def request(self, flow):
        if flow.request.url.startswith("https://www.xxx.com/"):
            if flow.request.urlencoded_form:
                flow.request.urlencoded_form["PASSWD"] = myencoder(
                    flow.request.urlencoded_form["PASSWD"]
                )

addons = [Modify()]

5. 配置代理链

  1. 启动mitmproxy:

    mitmdump -p 8081 -s addon_jsenc.py --quiet
    
    • -p:指定端口
    • -s:指定插件脚本
    • --quiet:静默模式(调试时可去掉)
  2. 配置BurpSuite上游代理:

    • User optionsConnectionsUpstream Proxy Servers
    • 添加mitmproxy作为上游代理

优势与效果

  1. 无需重写算法:直接调用原JavaScript加密函数
  2. 透明加密:BurpSuite中操作明文,自动加密
  3. 支持其他工具:SQLmap等工具可通过代理直接使用
  4. 高效测试:无需手动切换工具或复制粘贴

参考资源

  1. BurpSuite调用JavaScript处理Payload
  2. mitmproxy自定义脚本编写

通过这套方案,可以高效处理Web渗透测试中遇到的各种JavaScript加密防护,显著提升测试效率。

Web渗透测试中处理自定义JS加密防护的解决方案 背景与问题 在Web渗透测试过程中,经常会遇到使用自定义JavaScript加密防护的网站,这给测试工作带来了诸多挑战: 自定义加密算法 :网站使用JavaScript实现的独特加密/编码算法 重写成本高 :用其他语言重写算法耗时且容易出错 测试效率低 :需要在BurpSuite和命令行之间频繁切换 请求体加密 :BurpSuite中只能看到编码后的请求体,难以修改 解决方案概述 使用以下工具组合解决上述问题: BurpSuite :一级代理,用于拦截和修改响应 mitmproxy :二级代理,用于自动处理加密/解密 Python + PyExecJS :调用JavaScript加密函数 工具安装 PyExecJS : pip3 install pyexecjs mitmproxy : pip3 install mitmproxy BurpSuite :社区版或专业版均可 实施步骤 1. 定位加密JavaScript方法 在JS文件中搜索关键字: encode , encrypt 查找AJAX请求,搜索 post ,检查发送请求前的操作 使用BurpSuite插件 jsrainbow 辅助分析 2. 验证JavaScript功能 使用PyExecJS测试JavaScript加密函数: 3. 修改响应中的JavaScript 通过BurpSuite修改响应,去除加密函数调用: 进入 Proxy → Options → Match & Replace 添加规则匹配加密函数调用并移除 清除浏览器缓存确保加载修改后的JS 4. 编写mitmproxy插件 创建自动加密的mitmproxy插件: 5. 配置代理链 启动mitmproxy: -p :指定端口 -s :指定插件脚本 --quiet :静默模式(调试时可去掉) 配置BurpSuite上游代理: User options → Connections → Upstream Proxy Servers 添加mitmproxy作为上游代理 优势与效果 无需重写算法 :直接调用原JavaScript加密函数 透明加密 :BurpSuite中操作明文,自动加密 支持其他工具 :SQLmap等工具可通过代理直接使用 高效测试 :无需手动切换工具或复制粘贴 参考资源 BurpSuite调用JavaScript处理Payload mitmproxy自定义脚本编写 通过这套方案,可以高效处理Web渗透测试中遇到的各种JavaScript加密防护,显著提升测试效率。