burpsuite配合mitmproxy实现加解密数据
字数 1195 2025-08-20 18:18:23

Burpsuite配合mitmproxy实现数据加解密教学文档

1. 实现原理概述

Burpsuite通过上游代理(Upstream Proxy)将请求转发给mitmproxy代理,mitmproxy通过加载自定义的加解密脚本实现对请求和响应数据的加解密处理,然后将处理后的请求转发给目标服务器。

2. 环境准备

2.1 安装mitmproxy

pip install mitmproxy

安装完成后,mitmproxy提供三个可执行命令:

  • mitmproxy:命令行界面版本
  • mitmweb:Web界面版本
  • mitmdump:无界面版本

2.2 Burpsuite配置

  1. 打开Burpsuite
  2. 进入"User options"选项卡
  3. 找到"Upstream Proxy Servers"设置
  4. 添加mitmproxy作为上游代理:
    • 目标主机:通常设置为*(所有请求)
    • 代理主机:127.0.0.1
    • 代理端口:mitmproxy监听的端口(如8888)

3. mitmproxy启动方式

3.1 命令行启动

mitmproxy.exe -p 8888 -s md5.py

3.2 Web界面启动

mitmweb.exe -p 8888 -s md5.py

参数说明:

  • -p:指定监听端口
  • -s:指定加载的脚本文件(加解密脚本)

4. 加解密脚本开发

4.1 基本结构

一个完整的mitmproxy加解密脚本包含以下部分:

from mitmproxy import http, ctx

class AddonName:
    def request(self, flow: http.HTTPFlow) -> None:
        # 请求处理逻辑
        pass
    
    def response(self, flow: http.HTTPFlow) -> None:
        # 响应处理逻辑
        pass

addons = [AddonName()]

4.2 MD5加密示例

以下是一个完整的MD5加密处理脚本:

# -*- coding: utf-8 -*-
from mitmproxy import http, ctx
import hashlib

def md5_encryption(pwd):
    """
    MD5加密函数
    :param pwd: 明文字符串
    :return: MD5加密后的字符串
    """
    md5 = hashlib.md5()
    md5.update(pwd.encode('utf-8'))
    md5_pass = md5.hexdigest()
    return md5_pass

class MD5:
    def request(self, flow: http.HTTPFlow) -> None:
        # 获取请求POST数据,如m=1&username=admin&password=admin
        data = flow.request.text
        
        # 将数据以'='分切成数组,如['m', '1&username', 'admin&password', 'admin']
        d = data.split('=')
        
        # 通过md5_encryption加密方法对明文密码加密
        md5_pass = md5_encryption(d[3])
        
        # 将加密后的密文重新赋值给数组
        d[3] = md5_pass
        
        # 将数组元素重新变成post字符串格式
        data = '='.join(d)
        
        # 将加密后data数据赋值给flow.request.text
        flow.request.text = data
        
        # 调试信息输出(可选)
        # info = ctx.log.info
        # info(data)

    def response(self, flow: http.HTTPFlow):
        # 获取响应对象
        response = flow.response
        
        # 实例化输出类
        info = ctx.log.info
        
        # 打印响应码
        info(str(response.status_code))
        
        # 打印所有头部
        info(str(response.headers))
        
        # 打印cookie头部
        info(str(response.cookies))
        
        # 打印响应报文内容
        info(str(response.text))

addons = [MD5()]

4.3 脚本功能说明

  1. 请求处理(request方法)

    • 获取请求的原始数据
    • 对特定字段进行MD5加密
    • 修改请求数据并发送
  2. 响应处理(response方法)

    • 获取服务器响应
    • 输出响应状态码、头部、Cookie和内容
    • 可用于响应数据的解密处理

5. 实际应用场景

5.1 请求数据加密

适用于:

  • 登录密码自动加密
  • API请求参数加密
  • 敏感数据保护

5.2 响应数据解密

适用于:

  • 解密服务器返回的加密数据
  • 处理加密的API响应
  • 调试加密通信过程

6. 调试技巧

  1. 使用ctx.log.info()输出调试信息
  2. 在Burpsuite中查看原始请求和修改后的请求对比
  3. 使用mitmweb界面实时观察请求/响应处理

7. 扩展应用

7.1 支持多种加密算法

可以扩展脚本以支持:

  • AES加密/解密
  • RSA加密/解密
  • Base64编码/解码
  • 自定义加密算法

7.2 条件处理

可以根据请求特征决定是否进行加解密:

if "login" in flow.request.path:
    # 只处理登录请求
    pass

7.3 多字段处理

处理包含多个需要加密字段的请求:

params = dict(pair.split('=') for pair in data.split('&'))
params['password'] = md5_encryption(params['password'])
params['token'] = md5_encryption(params['token'])
flow.request.text = '&'.join([f"{k}={v}" for k, v in params.items()])

8. 注意事项

  1. 确保Burpsuite和mitmproxy的代理设置正确,避免循环代理
  2. 加解密脚本需要与目标应用的加密逻辑完全一致
  3. 处理HTTPS请求时需要安装mitmproxy的CA证书
  4. 复杂的加密逻辑可能需要结合JavaScript引擎(如PyExecJS)来实现

通过以上方法,可以灵活地实现Burpsuite与mitmproxy的配合使用,完成各种复杂的加解密需求,提高安全测试的效率。

Burpsuite配合mitmproxy实现数据加解密教学文档 1. 实现原理概述 Burpsuite通过上游代理(Upstream Proxy)将请求转发给mitmproxy代理,mitmproxy通过加载自定义的加解密脚本实现对请求和响应数据的加解密处理,然后将处理后的请求转发给目标服务器。 2. 环境准备 2.1 安装mitmproxy 安装完成后,mitmproxy提供三个可执行命令: mitmproxy :命令行界面版本 mitmweb :Web界面版本 mitmdump :无界面版本 2.2 Burpsuite配置 打开Burpsuite 进入"User options"选项卡 找到"Upstream Proxy Servers"设置 添加mitmproxy作为上游代理: 目标主机:通常设置为 * (所有请求) 代理主机: 127.0.0.1 代理端口:mitmproxy监听的端口(如8888) 3. mitmproxy启动方式 3.1 命令行启动 3.2 Web界面启动 参数说明: -p :指定监听端口 -s :指定加载的脚本文件(加解密脚本) 4. 加解密脚本开发 4.1 基本结构 一个完整的mitmproxy加解密脚本包含以下部分: 4.2 MD5加密示例 以下是一个完整的MD5加密处理脚本: 4.3 脚本功能说明 请求处理(request方法) : 获取请求的原始数据 对特定字段进行MD5加密 修改请求数据并发送 响应处理(response方法) : 获取服务器响应 输出响应状态码、头部、Cookie和内容 可用于响应数据的解密处理 5. 实际应用场景 5.1 请求数据加密 适用于: 登录密码自动加密 API请求参数加密 敏感数据保护 5.2 响应数据解密 适用于: 解密服务器返回的加密数据 处理加密的API响应 调试加密通信过程 6. 调试技巧 使用 ctx.log.info() 输出调试信息 在Burpsuite中查看原始请求和修改后的请求对比 使用mitmweb界面实时观察请求/响应处理 7. 扩展应用 7.1 支持多种加密算法 可以扩展脚本以支持: AES加密/解密 RSA加密/解密 Base64编码/解码 自定义加密算法 7.2 条件处理 可以根据请求特征决定是否进行加解密: 7.3 多字段处理 处理包含多个需要加密字段的请求: 8. 注意事项 确保Burpsuite和mitmproxy的代理设置正确,避免循环代理 加解密脚本需要与目标应用的加密逻辑完全一致 处理HTTPS请求时需要安装mitmproxy的CA证书 复杂的加密逻辑可能需要结合JavaScript引擎(如PyExecJS)来实现 通过以上方法,可以灵活地实现Burpsuite与mitmproxy的配合使用,完成各种复杂的加解密需求,提高安全测试的效率。