NodeJS Headless 动态漏扫爬虫学习记录(漏洞检测篇)
字数 1203 2025-08-25 22:58:56

NodeJS Headless 动态漏扫爬虫与BurpSuite插件开发实战指南

一、概述

本文详细记录如何结合NodeJS Headless浏览器(Puppeteer)与BurpSuite插件开发实现高效的动态漏洞扫描技术。主要内容包括工作流程设计、漏洞检测思路、BurpSuite插件开发全流程等关键技术点。

二、核心工作流程

  1. 完整流程链:

    • 浏览器插件同步Cookie → Server → Spider → 正向代理(Burp/Xray等)实现漏洞检测
    • 使用Puppeteer作为Headless浏览器驱动爬虫
    • 流量通过正向代理转发至漏洞检测工具
  2. 技术架构优势:

    • 无需手动hook网络请求获取链接
    • 可复用现有漏洞扫描工具(Burp/Xray等)
    • 实现自动化Cookie同步和会话保持

三、漏洞检测核心思路

1. 高效检测原则

  • 最小化请求原则: 用最少的数据包发现最多漏洞
  • 智能规避原则: 避免触发防御机制(封IP/Cookie注销)
  • 短板检测优先: 专注于发现系统最薄弱环节而非全面覆盖

2. SQL注入检测示例

11^sleep(5)#
'^sleep(5)#
"^sleep(5)#

11^sleep(5)#
')^sleep(5)#
")^sleep(5)#

特点:

  • 使用时间延迟作为检测标志
  • 覆盖多种上下文环境(无引号、单引号、双引号)
  • 局限性: 对limit/insert/update注入检测效果有限

四、BurpSuite插件开发实战

1. 环境配置

开发环境准备:

  1. 从Burp导出API接口文件:

    • Burp → Extender → APIs → Save Interface Files
  2. 命令行编译:

javac -d build src/burp/*.java
jar cf plugin.jar -C build burp
  1. 动态调试配置(破解版):
java -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005 \
     -Xbootclasspath/p:burp-loader-keygen.jar \
     -jar -Xmx4G burpsuite_community.jar
  1. IDEA远程调试配置:
    • 配置Remote JVM Debug
    • 端口与address参数一致(如5005)

2. 插件基础模板

public class BurpExtender implements IBurpExtender, IHttpListener {
    private IBurpExtenderCallbacks callbacks;
    private IExtensionHelpers helpers;
    private PrintWriter stdout;
    private String ExtenderName = "SQL Inject Scan";
    
    @Override
    public void registerExtenderCallbacks(IBurpExtenderCallbacks callbacks) {
        stdout = new PrintWriter(callbacks.getStdout(), true);
        callbacks.printOutput("Author: Passer6y");
        this.callbacks = callbacks;
        helpers = callbacks.getHelpers();
        callbacks.setExtensionName(ExtenderName);
        callbacks.registerHttpListener(this);
    }
    
    @Override
    public void processHttpMessage(int toolFlag, boolean messageIsRequest, 
                                  IHttpRequestResponse messageInfo) {
        // 处理HTTP请求/响应的核心逻辑
    }
}

3. 请求处理与漏洞检测实现

核心处理逻辑:

@Override
public void processHttpMessage(int toolFlag, boolean messageIsRequest, 
                              IHttpRequestResponse messageInfo) {
    if(!messageIsRequest) {      // 仅处理响应
        if ((toolFlag == 4)) {  // 仅处理Proxy流量
            for(byte[] payload : payloads) {
                attack(messageInfo, payload);
            }
        }
    }
}

攻击函数实现:

public void attack(IHttpRequestResponse messageInfo, byte[] payload) {
    List<int[]> matches = new ArrayList<>();
    IHttpService iHttpService = messageInfo.getHttpService();
    IRequestInfo analyzeRequest = this.helpers.analyzeRequest(messageInfo);
    
    List<IParameter> paraList = analyzeRequest.getParameters();
    for (IParameter para : paraList) {
        if (para.getType() == 0 || para.getType() == 1) { // 0=URL, 1=Body, 2=Cookie
            String key = para.getName();
            String value = para.getValue();
            
            try {
                String changedValue = value + this.helpers.bytesToString(payload);
                byte[] new_Request = messageInfo.getRequest();
                IParameter newPara = this.helpers.buildParameter(key, changedValue, para.getType());
                new_Request = this.helpers.updateParameter(new_Request, newPara);
                IHttpRequestResponse messageInfoExp = this.callbacks.makeHttpRequest(iHttpService, new_Request);
                
                // 检测响应是否包含漏洞特征...
            } catch (Exception e) {
                this.stdout.println("[!] Error: " + e.getMessage());
            }
        }
    }
}

4. 漏洞报告生成

this.callbacks.addScanIssue(new CustomScanIssue(
    iHttpService,
    analyzeRequest.getUrl(),
    new IHttpRequestResponse[]{callbacks.applyMarkers(messageInfoExp, null, matches)},
    "SQL Time Delay Injection",
    "Payload: " + key+"="+changedValue + " ,sleep time: " + 
    Long.toString(sleepTime/1000) + ", Netwok Delay: " + 
    Long.toString(networkDelay) + "ms",
    "High"));

五、开发建议与最佳实践

  1. 学习资源:

    • 仔细阅读Burp官方API文档
    • 研究官方示例插件代码
    • 学习优秀开源插件实现
  2. 调试技巧:

    • 保持本地代码与打包代码一致
    • 合理使用stdout输出调试信息
    • 利用Burp的Logger功能跟踪请求
  3. 性能优化:

    • 合理控制并发请求数量
    • 实现智能的payload调度策略
    • 避免重复检测相同参数

六、进阶方向

  1. 自主代理开发:

    • 实现HTTP正向代理功能
    • 构建智能代理池
    • 开发自定义规则引擎
  2. 检测能力扩展:

    • XSS检测模块
    • 命令注入检测
    • 文件包含/路径遍历检测
  3. 集成方案:

    • 与现有扫描器(Xray等)深度集成
    • 开发分布式扫描架构
    • 实现自动化报告生成

七、开源资源

参考实现: SQLScan项目

八、总结

本文系统介绍了基于NodeJS Headless浏览器和BurpSuite插件的动态漏洞扫描技术,涵盖了从基础原理到实战开发的完整知识体系。通过这种技术组合,安全研究人员可以构建高效、精准的自动化漏洞检测系统,显著提升安全测试的效率和深度。

NodeJS Headless 动态漏扫爬虫与BurpSuite插件开发实战指南 一、概述 本文详细记录如何结合NodeJS Headless浏览器(Puppeteer)与BurpSuite插件开发实现高效的动态漏洞扫描技术。主要内容包括工作流程设计、漏洞检测思路、BurpSuite插件开发全流程等关键技术点。 二、核心工作流程 完整流程链 : 浏览器插件同步Cookie → Server → Spider → 正向代理(Burp/Xray等)实现漏洞检测 使用Puppeteer作为Headless浏览器驱动爬虫 流量通过正向代理转发至漏洞检测工具 技术架构优势 : 无需手动hook网络请求获取链接 可复用现有漏洞扫描工具(Burp/Xray等) 实现自动化Cookie同步和会话保持 三、漏洞检测核心思路 1. 高效检测原则 最小化请求原则 : 用最少的数据包发现最多漏洞 智能规避原则 : 避免触发防御机制(封IP/Cookie注销) 短板检测优先 : 专注于发现系统最薄弱环节而非全面覆盖 2. SQL注入检测示例 特点 : 使用时间延迟作为检测标志 覆盖多种上下文环境(无引号、单引号、双引号) 局限性: 对limit/insert/update注入检测效果有限 四、BurpSuite插件开发实战 1. 环境配置 开发环境准备 : 从Burp导出API接口文件: Burp → Extender → APIs → Save Interface Files 命令行编译: 动态调试配置 (破解版): IDEA远程调试配置: 配置Remote JVM Debug 端口与address参数一致(如5005) 2. 插件基础模板 3. 请求处理与漏洞检测实现 核心处理逻辑 : 攻击函数实现 : 4. 漏洞报告生成 五、开发建议与最佳实践 学习资源 : 仔细阅读Burp官方API文档 研究官方示例插件代码 学习优秀开源插件实现 调试技巧 : 保持本地代码与打包代码一致 合理使用stdout输出调试信息 利用Burp的Logger功能跟踪请求 性能优化 : 合理控制并发请求数量 实现智能的payload调度策略 避免重复检测相同参数 六、进阶方向 自主代理开发 : 实现HTTP正向代理功能 构建智能代理池 开发自定义规则引擎 检测能力扩展 : XSS检测模块 命令注入检测 文件包含/路径遍历检测 集成方案 : 与现有扫描器(Xray等)深度集成 开发分布式扫描架构 实现自动化报告生成 七、开源资源 参考实现: SQLScan项目 八、总结 本文系统介绍了基于NodeJS Headless浏览器和BurpSuite插件的动态漏洞扫描技术,涵盖了从基础原理到实战开发的完整知识体系。通过这种技术组合,安全研究人员可以构建高效、精准的自动化漏洞检测系统,显著提升安全测试的效率和深度。