ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

ActiveScan++ 源码解析:PerHostScans 与 PerRequestScans 扫描架构深度剖析

ActiveScan++ 源码解析:PerHostScans 与 PerRequestScans 扫描架构深度剖析 ActiveScan 源码解析PerHostScans 与 PerRequestScans 扫描架构深度剖析【免费下载链接】ActiveScanPlusPlusActiveScan Burp Suite Plugin项目地址: https://gitcode.com/gh_mirrors/ac/ActiveScanPlusPlusActiveScan 是一款广受安全研究者欢迎的 Burp Suite 扫描增强插件它的核心卖点不是无脑爆破而是用最小的网络开销发现高级漏洞。本文将以源码解析的方式带你深度剖析该插件中最重要的两大扫描器——PerHostScans每主机扫描与 PerRequestScans每请求扫描拆解它们的触发机制、去重策略与防误报算法。无论你是 Burp 插件开发新手还是想优化自建扫描器的工程师这份扫描架构分析都能给你带来可直接借鉴的设计思路。扫描架构总览一个插件如何编排 9 个扫描器在深入两大核心类之前先看整体架构。插件入口是 BurpExtender.java它在registerExtenderCallbacks中一次性注册了 9 个IScannerCheck包括 PerHostScans、PerRequestScans、CodeExec、SimpleFuzz、SolrScan 等。Burp Suite 会把这 9 个检查器统一挂到主动/被动扫描器上任何一次扫描都会经过它们。Burp Suite 主动扫描器 │ ▼ BurpExtender插件入口注册 9 个 ScannerCheck │ ├── PerHostScans 每个主机只执行一次 ├── PerRequestScans 每个请求精准触发一次 ├── CodeExec / SimpleFuzz / SolrScan ... │ ▼ CustomScanIssue统一漏洞上报分级输出值得注意的设计是所有扫描器继承自ParamScan基类来自 Burp 官方公共库只需实现doPassiveScan、doActiveScan、consolidateDuplicateIssues三个方法即可接入扫描引擎。这种插件即检查器的模式是理解整个扫描架构的钥匙。PerHostScans 源码解析每主机一次的敏感文件猎手设计理念扫一次就够PerHostScans 负责的检测项如/.git/config泄露、/server-status调试信息与具体参数无关只与主机相关。如果对每个请求、每个参数都重复探测会造成大量冗余流量。因此它在 PerHostScans.java 中用了一个静态SetString scannedHosts做全局去重String host basePair.getHttpService().getHost(); if (scannedHosts.contains(host)) { return Collections.emptyList(); // 已扫过直接跳过 } scannedHosts.add(host);这段代码是整个最小网络开销理念的缩影一个主机只放行一次攻击请求之后所有来自该主机的流量都会被快速短路。敏感文件探测表可扩展的检测核心去重之后真正干活的是interestingFileScan它的检测清单是一个静态二维数组 PerHostScans.java每行包含三个要素URL 路径、预期出现的特征字符串、提示原因探测路径特征字符串检测目标/.git/config[core]源码泄露/server-statusServer uptime调试信息暴露/.well-known/apple-app-site-associationapplinks通用链接配置/.well-known/openid-configurationauthorization_endpoint隐藏 OAuth 攻击面/.well-known/oauth-authorization-serverauthorization_endpoint隐藏 OAuth 攻击面/users/confirmationonfirmation tokenDevise 框架邮箱伪造竞态这种路径 特征 原因的表格化设计让扩展变得极其简单——想加新探测项只需往数组里加一行扫描器自动生效。防误报的双请求基线对比算法探测敏感文件最容易产生误报PerHostScans 的解法很聪明命中特征字符串后不直接上报而是再发一个请求做基线对比。具体逻辑在 PerHostScans.java请求/.git/config若响应包含[core]初步命中请求修改后的 URL去掉最后一个字符如/.git/confi作为基线只有当基线响应中不包含该特征时才确认漏洞成立并上报。这个改动 URL → 特征消失 → 确认的思路用一次额外请求换来了高置信度是安全扫描器防误报的经典范式。PerRequestScans 源码解析只测第一个参数的精准打击手扫描链一次请求跑完 4 类攻击PerRequestScans 的职责与 PerHostScans 正好互补它处理的是和具体请求强相关的检测。构造方法里定义了一条扫描链 PerRequestScans.java每个检查项都是一个函数引用scanChecks Arrays.asList( this::doHostHeaderScan, // Host 头攻击检测 this::doCodePathScan, // XML 代码路径探测 this::doStrutsScan, // Struts2 RCECVE-2017-5638 this::doRailsScan // Rails 文件泄露CVE-2019-5418 );doActiveScan会遍历这条链逐个执行且每个检查都被 try-catch 包裹——单个检查抛异常不会拖垮整个扫描流程。这种检查器列表 独立异常隔离的结构非常适合做安全扫描器的高内聚低耦合设计。触发门控为什么只测第一个参数扫描链虽然强大但 Burp 会对每个插入点都调用doActiveScan。如果对每个参数都跑一遍 Host 头攻击流量会爆炸。PerRequestScans 的解决方案是shouldTriggerPerRequestAttacks门控函数 PerRequestScans.java核心规则有两条只对第一个参数触发按 Body、URL、JSON、XML、Cookie 的优先级找出偏移量最小的参数仅当当前插入点就是它时才放行User-Agent 头特例如果插入点是 User-Agent 请求头也直接放行。这背后是深刻的工程思考Host 头、Struts 这类漏洞与哪个参数无关只要该请求参与一次测试即可。把测试收敛到单一插入点能在保持覆盖率的同时把请求量压缩到最低。核心检测算法拆解从 Host 头攻击到 Struts RCEHost 头攻击检测金丝雀Canary三重验证doHostHeaderScan是 PerRequestScans 中最复杂的检查它的算法值得单独拆解 PerRequestScans.java生成两个随机字符串hostCanary和refererCanary构造恶意 Host 头hostCanary 真实域名同时把refererCanary放入 Referer若响应中出现 hostCanary 而没有refererCanary说明应用把 Host 头的值渲染进了页面——这就是 Host 头注入可能引发密码重置投毒、缓存投毒、DNS Rebinding同样的 Canary 手法还会分别测试绝对 URL 路径和X-Forwarded-Host两种变体。Referer 金丝雀存在的意义是排除误报如果两个随机串都出现在页面里说明页面本身就渲染了请求头而不是 Host 注入。一正一反两个金丝雀让结论更可靠。Struts2 RCE 检测随机数回显验证 OGNLdoStrutsScan检测 CVE-2017-5638Struts2 OGNL 注入的手法堪称经典 PerRequestScans.java生成两个随机数 x、y1000~9999计算 x×y把 OGNL 表达式拼进 Content-Type 头让目标服务器执行x*y并把结果写入响应头X-Ack若响应头中出现 x×y 的计算结果则确认表达式被执行——RCE 漏洞实锤。随机数回显是漏洞验证的黄金标准它彻底规避了巧合命中的误报可能因为攻击者无法预知每次生成的随机数组合。Rails 文件泄露检测路径穿越 回显判定doRailsScan针对 CVE-2019-5418把Accept头替换成深度路径穿越串../../.../etc/hosts{{PerRequestScans.java。如果响应中出现127.0.0.1基本可判定存在任意文件读取。它还借助 Burp Collaborator 排除自身 DNS 服务的干扰避免自误报。值得借鉴的 5 个扫描器设计技巧纵观两大扫描器的源码可以提炼出 5 个通用性极强的安全工具设计原则去重先行PerHostScans 的scannedHosts证明用内存集合做全局去重能在不损失覆盖率的前提下大幅压缩流量基线双请求命中特征后补一个变体请求做对比把误报率降到最低随机金丝雀用随机字符串代替固定 payload靠出现/不出现的对照关系做判定数学回显用x*y之类的可计算结果验证命令执行杜绝巧合误报异常隔离每个检查独立 try-catch单个失败不影响整条扫描链。此外插件对漏洞报告也做了分级Firm确凿/Certain确定/Tentative存疑三档置信度配合 High/Medium/Low 严重级别统一通过 CustomScanIssue.java 上报让测试人员能快速区分可确认的漏洞与值得人工复核的线索。如何运行与扩展这套扫描架构安装与触发方式按照 README.md 的说明将编译好的 jar 包通过 Burp Suite 的Extensions → Installed → Add加载即可。安装后无需任何配置直接运行一次普通的主动扫描上述所有检查就会自动生效——这也是该插件易用性的体现。扩展你自己的检测项想往插件里加检测项非常简单在 PerHostScans.java 的interestingFileMappings数组里追加一行即可新增一条敏感文件探测或者模仿PerRequestScans的ScanCheck接口在scanChecks列表中加入你自己的检测函数。整个插件的可扩展性设计让二次开发成本极低。总结PerHostScans 与 PerRequestScans 代表了安全扫描器的两种经典粒度按主机收敛的广度扫描与按请求收敛的深度扫描。前者用全局去重控制流量后者用插入点门控实现精准打击两者配合共同构成了 ActiveScan 以最小网络开销发现高价值漏洞的核心竞争力。理解这套扫描架构不仅能帮你更熟练地使用这款 Burp Suite 插件更能为设计自己的安全检测工具提供一套经过实战检验的范式参考。【免费下载链接】ActiveScanPlusPlusActiveScan Burp Suite Plugin项目地址: https://gitcode.com/gh_mirrors/ac/ActiveScanPlusPlus创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表