Next.js CVE-2025-29927漏洞自动化扫描器

Next.js CVE-2025-29927漏洞自动化扫描器

项目简介

本项目是一个专为安全研究人员设计的自动化扫描工具。它通过分析目标网站的HTTP响应头及特定端点,智能识别其是否使用Next.js框架,并精确判断其版本是否受到CVE-2025-29927漏洞的影响。工具支持从命令行参数或文件批量读取URL,并可选地进行漏洞利用尝试,所有操作均可通过丰富的命令行选项进行精细控制。

功能特性

  • Next.js框架识别:自动检测目标网站是否基于Next.js构建。
  • 漏洞版本检测:核对Next.js版本,准确判断其是否属于已修复的安全版本(如15.2.3, 14.2.25, 13.5.9, 12.3.5)。
  • 自动化漏洞利用尝试:在用户明确授权下,可结合自定义字典文件对潜在漏洞进行探测。
  • 灵活的输入源:支持通过命令行直接输入URL列表,或从文本文件中按行读取URL。
  • 可定制的浏览器环境:允许指定自定义的Chromium/Chrome可执行文件路径,增强环境兼容性。
  • 多重输出选项:支持在控制台输出详细的扫描日志(Verbose模式)或简洁的JSON格式结果,并可将结果保存至指定文件。
  • 可选的请求控制:提供跟随重定向、使用特定请求头等高级选项,以适应不同的扫描场景。

安装指南

  1. 环境准备:确保系统中已安装Node.js运行环境。

  2. 克隆项目 :使用Git将项目代码克隆到本地。

    bash 复制代码
    git clone https://github.com/ferpalma21/Automated-Next.js-Security-Scanner-for-CVE-2025-29927.git
    cd Automated-Next.js-Security-Scanner-for-CVE-2025-29927.git
  3. 安装依赖 :进入项目目录,使用npm安装所需依赖包(包括puppeteeryargs)。

    bash 复制代码
    npm install
  4. 浏览器驱动puppeteer默认会下载Chromium。如果你的系统中已有特定路径的Chromium/Chrome(例如/snap/bin/chromium),可以通过-c参数指定,以避免重复下载。

使用说明

工具通过命令行参数进行配置和调用。

基础扫描命令

扫描单个网站:

bash 复制代码
node index.js -u "https://example.com"

从文件批量扫描URL(每行一个):

bash 复制代码
node index.js -f urls.txt

常用参数组合示例

启用详细输出模式,便于观察扫描过程:

bash 复制代码
node index.js -u "https://example.com" -v

扫描并将检测到的易受攻击站点保存到结果文件:

bash 复制代码
node index.js -f targets.txt -o vulnerable_sites.json

尝试利用漏洞(谨慎使用,请确保拥有测试授权):

bash 复制代码
node index.js -u "https://target-site.com" -a -w paths_wordlist.txt

指定自定义浏览器路径并启用无头模式:

bash 复制代码
node index.js -u "https://example.com" -c "/usr/bin/google-chrome-stable" -t

命令行参数速查表

短参数 长参数 描述
-u --urls 待扫描的URL列表,用空格或逗号分隔。
-f --file 包含URL列表的文件路径,每行一个URL。
-c --chrome Chromium/Chrome可执行文件路径(默认:/snap/bin/chromium)。
-o --output 用于保存漏洞扫描结果的文件路径。
-v --verbose 启用详细日志输出模式。
-r --redirect 跟随HTTP重定向(可能导致误报)。
-a --attack 尝试对发现的潜在漏洞进行利用测试。
-w --wordlist 用于漏洞利用尝试的路径字典文件。
-t --headless 以无头模式启动Puppeteer浏览器。
-x --headers 测试失败时,尝试使用备用请求头格式。
-h --help 显示帮助信息。

核心代码

以下是项目中的关键代码片段,展示了参数解析、日志记录和核心检测逻辑。

1. 命令行参数配置与解析

此部分代码使用yargs库定义和解析所有命令行选项,并设置默认的URL列表。

javascript 复制代码
const puppeteer = require('puppeteer');
const yargs = require('yargs');
const fs = require('fs');

const argv = yargs
  .option('u', {
    alias: 'urls',
    description: 'List of URLs separated by space or comma',
    type: 'string'
  })
  .option('f', {
    alias: 'file',
    description: 'A file with URLs, one for each line',
    type: 'string'
  })
  .option('c', {
    alias: 'chrome',
    description: 'Chromium Path',
    default: '/snap/bin/chromium',
    type: 'string'
  })
  .option('o', {
    alias: 'output',
    description: 'Output file of vulnerable sites',
    type: 'string'
  })
  .option('v', {
    alias: 'verbose',
    description: 'A small description of the process'
  })
  .option('r', {
    alias: 'redirect',
    description: 'Follow redirect (not recommended might lead to false positives)'
  })
  .option('a', {
    alias: 'attack',
    description: 'It will try to exploit the vulnerability'
  })
  .option('w', {
    alias: 'wordlist',
    description: 'A wordlist of paths'
  })
  .option('t', {
    alias: 'headless',
    description: 'If the t flag or headless flag is set, it will launch a headless puppeteer.',
  })
  .option('x', {
    alias: 'headers',
    description: 'It will try with middleware:middleware:middleware:middleware:middleware first; in case it fails. It will retry with src/middleware:src/middleware:src/middleware:src/middleware:src/middleware'
  })
  .help('help').alias('h', 'help').argv;

const WEBSITES = argv.u ? argv.u.split(/[\s,]+/).map(url => url.trim()) : argv.f ? fs.readFileSync(argv.f, 'utf8').split('\n').map(url => url.trim()).filter(Boolean) : [
  'https://www.boxeurdesrues.com', 'https://www.sportsshoes.com/',
];

2. 日志记录函数

一个条件式日志函数,仅在启用了详细输出(-v)时,将带颜色的消息打印到控制台。

javascript 复制代码
const log = (message, colorCode='\x1b[0m') => {
  if (argv.v) console.log(`${colorCode}${message}\x1b[0m`);
};

3. 漏洞修复版本定义

一个常量数组,列出了针对CVE-2025-29927已修复的安全版本号,用于与检测到的版本进行比对。

javascript 复制代码
const VERSIONS_PATCHED = ['15.2.3', '14.2.25', '13.5.9', '12.3.5'];

6HFtX5dABrKlqXeO5PUv/9hUQdIGzBuLffwHXrPCx7A=

相关推荐
mys55182 小时前
杨建允:AI搜索优化对本地生活、本地服务行业的影响
人工智能·ai搜索优化·ai引擎优化
code tsunami2 小时前
如何将 Helium 与 CapSolver 集成,实现无缝 CAPTCHA 自动化解决
运维·数据库·人工智能·爬虫·python·自动化
AI科技星2 小时前
空间螺旋电磁耦合常数 Z‘:拨开迷雾,让电磁力变得直观易懂
服务器·人工智能·科技·算法·生活
玄同7652 小时前
Python 异常捕获与处理:从基础语法到工程化实践的万字深度指南
开发语言·人工智能·python·自然语言处理·正则表达式·nlp·知识图谱
云说智树2 小时前
从硅基劳动力到智能工厂:研华iFactory.AI Agent重塑制造新质生产力
人工智能
Coder个人博客2 小时前
Llama.cpp GGML 模块深度分析
人工智能·自动驾驶·llama
Das12 小时前
【机器学习】02_线性模型
人工智能·机器学习
用户5191495848452 小时前
Apache Tomcat CVE-2025-24813漏洞检测工具
人工智能·aigc
yongui478342 小时前
基于BP_Adaboost的分类器和RBF神经网络回归的实现方法
人工智能·神经网络·回归