打造一款适合自己的扫描工具(二)
字数 1167 2025-08-06 20:12:36

基于mitmproxy的被动式漏洞扫描工具开发指南

0x01 概述

本教学文档详细讲解如何利用mitmproxy结合Python开发一款被动式漏洞扫描工具。该工具能够拦截HTTP/HTTPS请求,自动检测URL中的参数并进行漏洞探测。

0x02 核心组件与原理

2.1 mitmproxy简介

mitmproxy是一组强大的HTTP/HTTPS代理工具,具有以下特性:

  • 支持HTTP/1、HTTP/2和WebSockets协议
  • 提供SSL/TLS拦截能力
  • 可实时修改请求和响应
  • 支持流量记录和重放
  • 提供Python API进行脚本化操作

核心工具包括:

  • mitmproxy:交互式控制台界面
  • mitmweb:基于Web的界面
  • mitmdump:命令行版本(本教程主要使用)

2.2 被动扫描原理

  1. 通过mitmproxy拦截所有经过代理的HTTP/HTTPS请求
  2. 提取请求中的URL和参数
  3. 将参数值替换为测试payload
  4. 发送修改后的请求并分析响应
  5. 根据响应内容判断是否存在漏洞

0x03 环境准备

3.1 安装mitmproxy

# Linux/macOS
pip3 install mitmproxy

# Windows
pip3 install mitmproxy

3.2 证书配置

  1. 访问 http://mitm.it/ 下载对应操作系统的证书
  2. 将证书导入浏览器和系统信任库
  3. 配置浏览器使用mitmproxy代理(默认端口8080)

0x04 核心代码实现

4.1 基础拦截模块

from mitmproxy import ctx

def request(flow):
    """拦截HTTP请求的基本函数"""
    request = flow.request
    info = ctx.log.info
    info(request.url)  # 打印请求URL

运行脚本:

mitmdump -s script.py

4.2 URL参数提取与替换

import re

def request(flow):
    request = flow.request
    url = request.url
    
    # 使用正则替换参数值
    modified_url = re.sub("(?<==)([^&]*)", "xxxxxxx", url)
    print(modified_url)

4.3 漏洞检测模块

4.3.1 POC文件格式

POC以JSON格式存储,示例:

{
    "name": "XSS注入漏洞",
    "payload": "\"><ScRiPt>alert(98760);</ScRiPt>",
    "res": "(\\S)ScRiPt(\\S)alert(\\S){2}98760(\\S){5}ScRiPt(\\S)"
}

字段说明:

  • name: 漏洞名称
  • payload: 测试用的攻击载荷
  • res: 用于检测响应中是否包含漏洞特征的正则表达式

4.3.2 扫描函数实现

import requests
import re
import json
import os

def scan(url):
    header = {
        "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:99.0) Gecko/20100101 Firefox/99.0",
    }
    
    # 遍历POC目录
    pathDir = os.listdir('../plug/vul/')
    for allDir in pathDir:
        p = os.path.join('../plug/vul/' + allDir)
        try:
            with open(p, 'rt', encoding='utf-8') as f:
                json_data = json.load(f)
                
            # 替换参数值为payload
            modified_url = re.sub("(?<==)([^&]*)", json_data['payload'], url)
            
            # 发送请求
            response = requests.get(modified_url, headers=header)
            
            # 检测响应
            if re.search(json_data['res'], response.text):
                print('[+] 存在漏洞:' + json_data['name'])
                print(modified_url)
                
                # 记录结果
                with open('../result/report.txt', 'at') as f:
                    f.writelines(modified_url + '\n')
                    
        except Exception as e:
            pass

4.4 多线程优化

import threading

def request(flow):
    request = flow.request
    url = request.url
    mutex = threading.Lock()
    
    for i in range(2):  # 创建2个线程
        t = threading.Thread(target=scan, args=(url, mutex))
        t.start()

def scan(url, t):
    t.acquire()
    # ... 扫描逻辑同上 ...
    t.release()

0x05 工具使用与扩展

5.1 运行方式

mitmdump -s scan_script.py

5.2 自定义配置

  1. 修改代理端口:
mitmdump -s scan_script.py -p 8888
  1. 透明代理模式(Linux/macOS):
mitmdump -s scan_script.py --mode transparent

5.3 扩展建议

  1. 增加POC库:在../plug/vul/目录下添加更多漏洞的POC文件
  2. 支持POST请求:扩展脚本以处理POST请求和表单数据
  3. 结果可视化:将结果输出到数据库或Web界面
  4. 性能优化:使用连接池、异步请求等技术提高扫描速度
  5. 与主动扫描结合:将被动发现的URL作为主动扫描的输入

0x06 安全注意事项

  1. 仅在授权测试的环境中使用该工具
  2. 注意测试payload可能对目标系统造成的影响
  3. 避免在生产环境进行高强度扫描
  4. 遵守当地法律法规

0x07 总结

通过本教程,我们实现了一个基于mitmproxy的被动式漏洞扫描工具,具备以下功能:

  • HTTP/HTTPS流量拦截
  • URL参数自动提取和替换
  • 基于POC的漏洞检测
  • 多线程扫描支持
  • 结果记录功能

开发者可以根据实际需求扩展和完善该工具,打造适合自己工作流程的自动化安全测试工具。

基于mitmproxy的被动式漏洞扫描工具开发指南 0x01 概述 本教学文档详细讲解如何利用mitmproxy结合Python开发一款被动式漏洞扫描工具。该工具能够拦截HTTP/HTTPS请求,自动检测URL中的参数并进行漏洞探测。 0x02 核心组件与原理 2.1 mitmproxy简介 mitmproxy是一组强大的HTTP/HTTPS代理工具,具有以下特性: 支持HTTP/1、HTTP/2和WebSockets协议 提供SSL/TLS拦截能力 可实时修改请求和响应 支持流量记录和重放 提供Python API进行脚本化操作 核心工具包括: mitmproxy :交互式控制台界面 mitmweb :基于Web的界面 mitmdump :命令行版本(本教程主要使用) 2.2 被动扫描原理 通过mitmproxy拦截所有经过代理的HTTP/HTTPS请求 提取请求中的URL和参数 将参数值替换为测试payload 发送修改后的请求并分析响应 根据响应内容判断是否存在漏洞 0x03 环境准备 3.1 安装mitmproxy 3.2 证书配置 访问 http://mitm.it/ 下载对应操作系统的证书 将证书导入浏览器和系统信任库 配置浏览器使用mitmproxy代理(默认端口8080) 0x04 核心代码实现 4.1 基础拦截模块 运行脚本: 4.2 URL参数提取与替换 4.3 漏洞检测模块 4.3.1 POC文件格式 POC以JSON格式存储,示例: 字段说明: name : 漏洞名称 payload : 测试用的攻击载荷 res : 用于检测响应中是否包含漏洞特征的正则表达式 4.3.2 扫描函数实现 4.4 多线程优化 0x05 工具使用与扩展 5.1 运行方式 5.2 自定义配置 修改代理端口: 透明代理模式(Linux/macOS): 5.3 扩展建议 增加POC库 :在 ../plug/vul/ 目录下添加更多漏洞的POC文件 支持POST请求 :扩展脚本以处理POST请求和表单数据 结果可视化 :将结果输出到数据库或Web界面 性能优化 :使用连接池、异步请求等技术提高扫描速度 与主动扫描结合 :将被动发现的URL作为主动扫描的输入 0x06 安全注意事项 仅在授权测试的环境中使用该工具 注意测试payload可能对目标系统造成的影响 避免在生产环境进行高强度扫描 遵守当地法律法规 0x07 总结 通过本教程,我们实现了一个基于mitmproxy的被动式漏洞扫描工具,具备以下功能: HTTP/HTTPS流量拦截 URL参数自动提取和替换 基于POC的漏洞检测 多线程扫描支持 结果记录功能 开发者可以根据实际需求扩展和完善该工具,打造适合自己工作流程的自动化安全测试工具。