NodeJS Headless 动态漏扫爬虫学习记录(漏洞检测篇)
字数 1203 2025-08-25 22:58:56
NodeJS Headless 动态漏扫爬虫与BurpSuite插件开发实战指南
一、概述
本文详细记录如何结合NodeJS Headless浏览器(Puppeteer)与BurpSuite插件开发实现高效的动态漏洞扫描技术。主要内容包括工作流程设计、漏洞检测思路、BurpSuite插件开发全流程等关键技术点。
二、核心工作流程
-
完整流程链:
- 浏览器插件同步Cookie → Server → Spider → 正向代理(Burp/Xray等)实现漏洞检测
- 使用Puppeteer作为Headless浏览器驱动爬虫
- 流量通过正向代理转发至漏洞检测工具
-
技术架构优势:
- 无需手动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. 环境配置
开发环境准备:
-
从Burp导出API接口文件:
- Burp → Extender → APIs → Save Interface Files
-
命令行编译:
javac -d build src/burp/*.java
jar cf plugin.jar -C build burp
- 动态调试配置(破解版):
java -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005 \
-Xbootclasspath/p:burp-loader-keygen.jar \
-jar -Xmx4G burpsuite_community.jar
- 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"));
五、开发建议与最佳实践
-
学习资源:
- 仔细阅读Burp官方API文档
- 研究官方示例插件代码
- 学习优秀开源插件实现
-
调试技巧:
- 保持本地代码与打包代码一致
- 合理使用stdout输出调试信息
- 利用Burp的Logger功能跟踪请求
-
性能优化:
- 合理控制并发请求数量
- 实现智能的payload调度策略
- 避免重复检测相同参数
六、进阶方向
-
自主代理开发:
- 实现HTTP正向代理功能
- 构建智能代理池
- 开发自定义规则引擎
-
检测能力扩展:
- XSS检测模块
- 命令注入检测
- 文件包含/路径遍历检测
-
集成方案:
- 与现有扫描器(Xray等)深度集成
- 开发分布式扫描架构
- 实现自动化报告生成
七、开源资源
参考实现: SQLScan项目
八、总结
本文系统介绍了基于NodeJS Headless浏览器和BurpSuite插件的动态漏洞扫描技术,涵盖了从基础原理到实战开发的完整知识体系。通过这种技术组合,安全研究人员可以构建高效、精准的自动化漏洞检测系统,显著提升安全测试的效率和深度。