从0到1 使用mitmproxy实现对jeecg-boot精准的被动打击:点点网页,漏洞不就有了么?
字数 1565 2025-08-10 13:48:25
Mitmproxy 实战:针对 Jeecg-Boot 的被动漏洞探测
1. Mitmproxy 简介
1.1 基本概念
Mitmproxy 是一个基于 Python 的中间人代理工具,名称来源于 "Man-in-the-Middle Proxy"。它能够拦截、检查和修改 HTTP/HTTPS 流量,是安全测试和开发调试的强大工具。
1.2 核心功能
- 流量拦截与修改
- 请求/响应记录与重放
- 支持 Python 脚本扩展
- 提供命令行、终端和 Web 界面三种操作方式
1.3 与其他代理工具对比
相比 Burp Suite 等工具,Mitmproxy 的优势在于:
- 完全开源免费
- 可通过 Python 快速开发定制功能
- 轻量级且易于自动化集成
2. 环境安装与配置
2.1 安装要求
- Python 3.6 或更高版本
- pip 包管理工具
2.2 安装步骤
# Linux
sudo pip3 install mitmproxy
# Windows (管理员权限运行)
pip3 install mitmproxy
# MacOS
brew install mitmproxy
2.3 验证安装
mitmproxy --version
2.4 证书配置
与 Burp Suite 类似,需要安装 Mitmproxy 的 CA 证书到受信任的根证书颁发机构存储区中。
3. Mitmproxy 基本使用
3.1 三种运行模式
- mitmproxy:终端交互式界面
- mitmweb:Web 界面(默认 8081 端口)
- mitmdump:命令行模式,适合脚本化操作
3.2 启动命令
# 默认端口 8080
mitmproxy
mitmweb
# 指定端口
mitmproxy -p 8081
4. 脚本开发基础
4.1 脚本编写模式
Mitmproxy 支持两种脚本编写模式:
模式一:函数式
import mitmproxy.http
from mitmproxy import ctx
num = 0
def request(flow: mitmproxy.http.HTTPFlow):
global num
num += 1
ctx.log.info(f"We've seen {num} flows")
模式二:面向对象式(推荐)
import mitmproxy.http
from mitmproxy import ctx
class Counter:
def __init__(self):
self.num = 0
def request(self, flow: mitmproxy.http.HTTPFlow):
self.num += 1
ctx.log.info(f"We've seen {self.num} flows")
addons = [Counter()]
4.2 主要事件类型
Mitmproxy 提供了多个生命周期事件钩子:
HTTP 生命周期事件
http_connect:收到 HTTP CONNECT 请求时触发requestheaders:HTTP 请求头被成功读取时触发request:完整的 HTTP 请求被读取时触发responseheaders:HTTP 响应头被成功读取时触发response:完整的 HTTP 响应被读取时触发error:发生 HTTP 错误时触发
5. Jeecg-Boot 被动漏洞探测实战
5.1 问题背景
Jeecg-Boot 是一个流行的 Java 快速开发平台,存在多个已知漏洞:
- 接口未授权访问
- SQL 注入
- SSTI 模板注入
- JDBC 代码执行
实际渗透测试中遇到的挑战:
- 业务路由可能变化,不在标准路径下
- 真实接口隐藏在 JS 中,需要登录后才能发现
5.2 解决方案设计
使用 Mitmproxy 实现:
- 自动识别 Jeecg-Boot 站点
- 动态发现真实接口路径
- 自动验证漏洞存在
- 只需浏览网站即可完成探测
5.3 实现步骤
1. 指纹识别
识别 Jeecg-Boot 站点的特征:
- 特定 HTTP 头
- 静态资源特征
- 特定错误页面
2. 接口提取
通过正则匹配从流量中提取真实接口路径
3. 漏洞验证
对发现的接口自动发送测试请求验证漏洞
5.4 示例代码框架
import mitmproxy.http
from mitmproxy import ctx
import re
class JeecgScanner:
def __init__(self):
self.targets = set()
self.vuln_endpoints = []
def response(self, flow: mitmproxy.http.HTTPFlow):
# 1. 指纹识别
if self.is_jeecg_boot(flow):
ctx.log.info(f"Jeecg-Boot identified: {flow.request.url}")
self.targets.add(flow.request.host)
# 2. 接口提取
endpoints = self.extract_endpoints(flow.response.text)
for endpoint in endpoints:
ctx.log.info(f"Found API endpoint: {endpoint}")
# 3. 漏洞验证
if self.check_vulnerability(endpoint):
self.vuln_endpoints.append(endpoint)
self.save_to_csv(endpoint)
def is_jeecg_boot(self, flow):
# 实现指纹识别逻辑
pass
def extract_endpoints(self, text):
# 实现接口提取逻辑
pass
def check_vulnerability(self, endpoint):
# 实现漏洞验证逻辑
pass
def save_to_csv(self, endpoint):
# 保存结果
pass
addons = [JeecgScanner()]
5.5 运行方式
mitmweb -s jeecg_scanner.py
6. 高级技巧与优化
6.1 性能优化
- 使用缓存减少重复处理
- 异步处理耗时操作
- 限制扫描范围避免误操作
6.2 错误处理
- 添加异常捕获防止脚本崩溃
- 实现重试机制处理网络问题
- 记录详细日志便于调试
6.3 扩展功能
- 集成其他扫描工具
- 实现自动化报告生成
- 添加通知机制(邮件、Webhook等)
7. 安全与法律注意事项
- 仅对授权目标使用此技术
- 遵守当地法律法规
- 测试前获取书面授权
- 避免对生产环境造成影响
8. 总结
Mitmproxy 结合 Python 脚本能够实现高度定制化的被动漏洞扫描:
- 自动识别目标系统
- 动态发现隐藏接口
- 精准验证漏洞存在
- 极大提高测试效率
通过本文介绍的方法,只需正常浏览网站,后台脚本即可自动完成漏洞探测工作,显著提升安全测试的效率和质量。