核心工具详解
基于 OWASP ZAP 官方文档(zaproxy.org/docs)+ PortSwigger Burp Suite 文档 + Nmap Network Scanning(nmap.org/book)+ Tenable Nessus 文档 + OWASP DevSecOps Guideline 编写,对照 ZAP 2.x / Burp 2024+ / Nessus 10.x / Nmap 7.x
速查
- ZAP 主动 vs 被动本质区别:主动发新请求 + 攻击载荷(破坏性);被动只观察不发新请求(零影响)
- ZAP 主动扫描官方警告:「You should NOT use it on web applications that you do not own」
- ZAP Scan Policy:预定义含 API Policy / Default / Developer CI-CD / Full / Standard / Penetration Tester / QA;按场景选可控制范围与时长
- ZAP 被动规则热门 Alert ID:X-Frame-Options=10020、X-Content-Type-Options=10021、HSTS=10035、CSP 缺失=10038、Cookie HttpOnly=10010、Cookie Secure=10011、Cookie SameSite=10054、混合内容=10040、CORS=10098
- ZAP CSP frame-ancestors 优先级:当存在 CSP
frame-ancestors时,X-Frame-Options 缺失不报警(frame-ancestors 已覆盖) - ZAP CI/CD 三 Docker 模式:Baseline(spider + 被动,PR 门禁)/ Full(含主动)/ API Scan(OpenAPI/SOAP/GraphQL);Automation Framework(YAML 驱动)是现代推荐
- ZAP AddZapHeader.js:给所有 ZAP 流量加
X-ZAP-Initiator标头,便于 WAF 放行 / 识别扫描器 - Burp Intruder 四类型:Sniper(1 集轮流,请求数=位数×payload数)/ Battering Ram(1 集同值,请求数=payload数)/ Pitchfork(≤20 集并行,请求数=最小集)/ Cluster Bomb(≤20 集全组合,请求数=乘积)
- Burp Proxy Intercept:Intercept on 暂停、off 放行;Forward/Drop 控制单条;Match-and-Replace 自动篡改;需装 CA 证书解密 HTTPS
- Burp 版本差异:Repeater 两版均可用;Intruder Community 限速 / Pro 全功能;主动扫描仅 Professional
- Nmap -sS 为默认首选:半开扫描不完成三次握手,快且多数系统不记录;需 root;无 root 退到 -sT
- Nmap -sT 暴露意图:全连接被 syslog 记录;隐蔽场景应选 -sS 或 -sI Idle 扫描
- Nmap 五端口状态:open / closed / filtered(防火墙阻断)/ unfiltered(ACK 无法定开/关)/ open|filtered(UDP / 隐蔽扫描常见)
- Nmap -A:等价于
-sV -O --script + traceroute,激进扫描 - Nmap NSE 分类:default / safe / vuln / brute / exploit / auth / broadcast / version
- Nessus 凭据 vs 无凭据:无凭据看 banner(可能不准),凭据看本地补丁 / 配置 / 合规基线(CIS / PCI / HIPAA)
- Nessus 凭据通道:SSH(密码 / 密钥,读 rpm / dpkg / lslpp / swlist 包清单)/ Windows SMB(本地管理员访问注册表与管理共享)
- Nessus plugin 21745:检测凭据失败;凭据扫描失败会静默退化为无凭据,必须主动核对
- Nessus Windows 需本地管理员:才能做 direct file analysis 判断真实补丁级别
- 核心反模式:对生产 / 非自有跑主动扫描、Cluster Bomb 当默认、无凭据声称覆盖完整、NULL/FIN/Xmas 扫 Windows、期望主动扫描发现业务逻辑漏洞、前端只配 SAST 不配 SCA
OWASP ZAP
主动扫描(Active Scan)
主动扫描会发实际攻击载荷——XSS / SQLi / 路径遍历等测试向量,因此对目标会产生真实影响。OWASP 官方明确警告:「You should NOT use it on web applications that you do not own」。
- 触发方式:Active Scan 标签 / Sites 右键 Attack / History 右键 / API(
GET/POST /JSON/ascan/action/scan) - Scan Policy:决定运行哪些规则;预定义含 API Policy / Default / Developer CI-CD Standard / Full / Standard / Penetration Tester / QA
- Modern Automation:Automation Framework 的
activeScanJob,YAML 驱动
主动扫描本质是攻击行为——会产生破坏性载荷(如注入测试可能写入 / 删除数据),对生产或他人系统运行属违法且可能造成数据损坏。只在自有 / 受控环境执行。
被动扫描(Passive Scan)
被动扫描只观察经代理流量,不发任何新请求——因此零影响可高频跑,是 DAST 进入 CI/CD 的低成本入口。
- Passive Scanner add-on:监听经 ZAP 代理的 HTTP / WebSocket 流量
- 规则按 Alert ID 编号:
| Alert ID | 检查项 |
|---|---|
| 10020 | X-Frame-Options 缺失 |
| 10021 | X-Content-Type-Options 缺失 |
| 10035 | HSTS 缺失 |
| 10038 | CSP 缺失 |
| 10055 | CSP 分析(规则缺陷) |
| 10010 | Cookie HttpOnly 缺失 |
| 10011 | Cookie Secure 缺失 |
| 10054 | Cookie SameSite 缺失 |
| 90033 | Cookie 松散作用域 |
| 10036 | Server 头版本泄露 |
| 10037 | X-Powered-By 泄露 |
| 10062 | PII(敏感信息) |
| 90003 | SRI(子资源完整性)缺失 |
| 10108 | 反向标签劫持 |
| 10202 | CSRF 防护缺失 |
| 10040 | 混合内容 |
| 10098 | CORS 配置错误 |
| 10097 | Hash 泄露 |
- CSP frame-ancestors 优先级:当响应存在 CSP
frame-ancestors时,X-Frame-Options 缺失不报警(已被 frame-ancestors 覆盖)
代理与脚本
- 本地代理:浏览器流量 → ZAP 代理(默认
localhost:8080)→ 目标站点 - AddZapHeader.js:给所有 ZAP 流量加
X-ZAP-Initiator标头,便于 WAF / IDS 放行 + 白名单 - Trusted Domains:
rules.domains.trusted配置可信域名正则 - Script Console:支持 Script Scan Rules 自定义主动规则
Docker 扫描与 Automation Framework
| 模式 | 内容 | 适用场景 |
|---|---|---|
| Baseline Scan | spider(默认 1 分钟)+ 被动扫描,无攻击载荷 | CI/CD PR 门禁(被动零影响) |
| Full Scan | spider + 被动 + 主动攻击 | 预发布 / 夜间构建(隔离环境) |
| API Scan | 按 OpenAPI / SOAP / GraphQL 定义扫描 | API 项目 |
| Automation Framework | YAML 驱动编排 spider / activeScan / passiveScan | 现代推荐方案,取代旧 Docker 脚本 |
被动扫描只看经代理的流量——未浏览的页面 / 参数不会被覆盖,覆盖度取决于爬虫深度。Baseline 结果不等于完整漏洞评估。
Burp Suite
Proxy Intercept(拦截代理)
工作流:浏览器 → Burp Proxy(拦截 / 编辑)→ 服务器。
| 操作 | 行为 |
|---|---|
Intercept on | 暂停每条消息,等待手动处理 |
Intercept off | 自动放行(仍记录历史) |
Forward / Forward all | 放行单条 / 全部 |
Drop / Drop all | 丢弃单条 / 全部 |
| 编辑 | 可修改请求 / 响应与目标地址 |
Match and Replace | 自动篡改请求 / 响应(含脚本创建) |
| WebSocket | 支持拦截 WebSocket 消息 |
| HTTP/2 | 支持编辑 |
HTTPS 解密需安装 Burp CA 证书到浏览器 / 系统信任根。
Repeater(重放)
手动重放与修改单条 HTTP 请求的利器:
- 多标签并行,每个标签独立编辑请求
- 完整保留修改轨迹与历史
- Community 与 Professional 两版均可用
- 渗透测试人员验证漏洞存在性的主力
Intruder(四种攻击类型)
四种攻击类型的 payload 集数量与请求数公式:
| 类型 | payload 集数 | 分配方式 | 请求数公式 | 典型场景 |
|---|---|---|---|---|
| Sniper | 1 | 逐位置轮流插入同一集 | 位置数 × payload 数 | 单参数模糊测试 |
| Battering Ram | 1 | 所有位置同值 | payload 数 | 多位置同值(如多字段同密码) |
| Pitchfork | ≤20 | 多集同步并行迭代 | 最小集大小 | 多位置相关不同值 |
| Cluster Bomb | ≤20 | 多集全组合 | 所有集乘积 | 用户名 + 密码独立爆破 |
Cluster Bomb 请求数爆炸:1000×1000=百万请求,既拖垮目标(构成 DoS)又淹没有效结果。只有独立未知值才用 Cluster Bomb,多位置相关不同值用 Pitchfork。
Community vs Professional
| 功能 | Community | Professional |
|---|---|---|
| Proxy Intercept | ✅ | ✅ |
| Repeater | ✅ | ✅ |
| Intruder | 限速 | 全功能 |
| 主动扫描(Burp Scanner) | ❌ | ✅ |
| 价格 | 免费 | 付费 |
2024+ 版本 Community 与 Professional 合并安装器、共用代码库。
Nessus
扫描模板
| 模板 | 用途 |
|---|---|
| Basic Network Scan | 基础网络漏洞扫描 |
| Host Discovery | 主机发现(仅探活) |
| Web Application | Web 应用扫描 |
| Malware | 恶意软件检测 |
| Advanced Scan | 自定义高级扫描 |
| Credentialed Patch Audit | 凭据补丁审计 |
凭据扫描(Credentialed Checks)
凭据扫描通过登录目标读取本地视角,覆盖率与准确率远超无凭据。
| 凭据通道 | 验证方式 | 能拿到 |
|---|---|---|
| SSH(密码 / 密钥) | rpm / dpkg / lslpp / swlist 包清单输出 | Linux 补丁清单、配置、合规基线 |
| Windows SMB(本地管理员) | 注册表 + 管理共享访问 | Windows 补丁、配置、direct file analysis |
铁律:
- 优先使用凭据扫描:无凭据扫描只能从外部视角看,依赖服务 banner(Tenable 官方明确「may be inconclusive or incorrect」)
- plugin 21745 检测凭据失败:SSH / SMB 登录失败会让凭据扫描静默退化为无凭据扫描,必须主动核对 21745 与补丁清单是否成功
- Windows 需本地管理员:才能做 direct file analysis 判断真实补丁级别;普通用户读取的注册表信息可能不准
插件与版本
- 插件用 NASL(Nessus Attack Scripting Language) 编写
- 按 family 分组(如 Windows / Web Servers / Databases)
- 映射 CVE(如 CVE-2024-XXXX)
- 产品线:Nessus Essentials(免费 5 IP)/ Expert / Professional / Manager
- 与 Tenable Vulnerability Management / Security Center 集成
Nmap
端口扫描标志(一次只能用一种)
| 标志 | 名称 | 原理 | 权限要求 | 隐蔽性 |
|---|---|---|---|---|
| -sS | SYN 半开扫描 | 发 SYN,收到 SYN/ACK 后发 RST 不完成三次握手 | 需 root | 默认首选,多数系统不记录 |
| -sT | TCP 全连接 | 完成三次握手 | 普通 | 被 syslog 记录,暴露意图 |
| -sU | UDP 扫描 | 发 UDP 包等 ICMP | 普通 | 慢(ICMP 限速),可与 -sS 组合 |
| -sN / -sF / -sX | NULL / FIN / Xmas | 利用 RFC 793(关闭端口回 RST,开放端口无响应) | 需 root | 主要对 Unix 有效;Windows / Cisco 误判(全端口回 RST) |
| -sA | ACK 扫描 | 发 ACK,映射防火墙规则 | 需 root | 结果为 unfiltered / filtered |
| -sW | Window 扫描 | 利用 TCP 窗口大小 | 需 root | 部分操作系统可识别开放端口 |
| -sM | Maimon 扫描 | FIN/ACK | 需 root | 类似 NULL/FIN/Xmas |
| -sI | Idle 空闲扫描 | 借僵尸主机 | 需 root | 真盲扫(隐藏真实 IP) |
| -sO | IP 协议扫描 | 发不同 IP 协议号 | 需 root | 识别支持的协议 |
| -b | FTP bounce | 借 FTP 代理 | 普通 | 老旧扫描,多数 FTP 已关闭 |
-sS 为默认首选的原因:不完成三次握手,速度快且多数系统不记录;-sT 会留下完整连接日志易暴露。
五种端口状态
| 状态 | 含义 | 产生扫描 |
|---|---|---|
| open | 应用接受 TCP 连接 / UDP 包 | -sS / -sT / -sU |
| closed | 可达但无监听 | -sS / -sT |
| filtered | 防火墙 / 路由器阻断,无法判定 | 多种 |
| unfiltered | 可达但 ACK 扫描无法定开/关 | -sA |
| open|filtered | 无法区分开放还是过滤 | -sU / 隐蔽扫描(-sN/-sF/-sX) |
服务版本与 OS 指纹
| 标志 | 作用 |
|---|---|
| -sV | 服务版本探测(探明 nginx 1.25.4 / OpenSSH 9.6 等) |
| -O | OS 指纹(TCP/IP 协议栈指纹识别) |
| -A | 激进扫描(等价于 -sV -O --script + traceroute) |
| --script | NSE 脚本(如 --script vuln) |
| --script-args | 给脚本传参 |
NSE(Nmap Scripting Engine)
NSE 脚本按分类组织:
| 分类 | 用途 |
|---|---|
| default | 默认安全基础扫描 |
| safe | 不会崩溃目标的安全脚本 |
| vuln | 漏洞检测(如 heartbleed、shellshock) |
| brute | 口令爆破(FTP / SSH / HTTP) |
| exploit | 主动利用漏洞 |
| auth | 绕过鉴权或枚举用户 |
| broadcast | 局域网广播发现 |
| version | 服务版本扩展探测 |
--script后可接分类名(如--script vuln)或具体脚本名(如--script ssl-heartbleed)。
前端 SAST / DAST / SCA
SAST(Static Application Security Testing)
白盒分析源码 / 字节码 / 二进制,在编码期发现自写代码缺陷。
- 代表工具:ESLint security 插件 / SonarQube / Semgrep / CodeQL
- 能发现:SQL 拼接、
eval()/innerHTML危险 API、硬编码密钥、原型污染 sink - 看不到:运行时配置错误、依赖 CVE、业务逻辑漏洞
- 集成位置:IDE 实时检查 / pre-commit hook / CI 流水线
DAST(Dynamic Application Security Testing)
黑盒测试运行中的应用,注入载荷发现运行时漏洞。
- 代表工具:OWASP ZAP / Burp Scanner / Nessus Web Application
- 能发现:认证绕过、注入、配置错误、HTTP 安全头缺失
- 看不到:源码级缺陷、依赖 CVE
- 集成位置:预发布环境 / 夜间构建
SCA(Software Composition Analysis)
扫描第三方 / 开源依赖,识别已知 CVE 与许可证问题。
- 代表工具:npm audit / Snyk / Dependabot / Renovate
- 能发现:依赖中的已知 CVE、许可证冲突(GPL / AGPL 商业风险)
- 看不到:自写代码缺陷、业务逻辑漏洞
- 集成位置:
package-lock.json提交后 CI 自动跑
前端项目核心反模式:只配 SAST 不配 SCA。前端自写代码漏洞占比低,真正高危多在
node_modules依赖里——漏配 SCA 等于放任供应链风险。
三类工具为何必须互补
OWASP DevSecOps Guideline 明确三类工具的盲区:
SAST 看不到 → 运行时配置错误 + 依赖 CVE
DAST 看不到 → 源码级缺陷 + 依赖 CVE
SCA 看不到 → 业务逻辑漏洞 + 自写代码缺陷
↓
只用一种会有系统性盲区,必须 SAST + DAST + SCA + 人工渗透组合业务逻辑漏洞(如越权 broken access control)三类工具都发现不了——OWASP ZAP 官方文档明确自动化扫描只能发现特定类型漏洞,逻辑漏洞必须人工渗透测试。
分层扫描策略
最佳实践:按影响大小与频率分层调度。
| 层 | 工具 | 频率 | 理由 |
|---|---|---|---|
| 被动扫描 | ZAP Baseline | CI 每次提交 / PR | 零影响可高频跑 |
| 主动扫描 | ZAP Full Scan | 预发布 / 夜间 | 会发攻击流量,必须隔离环境低频 |
| 凭据扫描 | Nessus Credentialed | 每周 | 拿本地补丁 / 配置清单 |
| 端口扫描 | Nmap | 周期性资产清点 | 识别新开放端口、服务变化 |
| 依赖扫描 | SCA(npm audit / Snyk) | package-lock 提交触发 | 性价比最高的前端安全投入 |
| 代码扫描 | SAST(ESLint security) | IDE / pre-commit | 编码期消灭自写代码缺陷 |
扫描结果按 Risk × Confidence 分级处理,高置信度高风险优先修复。扫描器存在误报,盲目全修成本高。
反模式(避坑)
- 对生产环境或非自有系统跑 ZAP 主动 / Nessus / Nmap -A:这是攻击行为,可能违法且造成服务中断或数据破坏
- 用 Nmap -sT 做隐蔽侦察且期望不被发现:全连接被 syslog 记录,暴露意图;隐蔽场景应选 -sS 或 -sI Idle 扫描
- 把 Intruder Cluster Bomb 当默认选择:1000×1000=百万请求爆炸,拖垮目标构成 DoS;只有独立未知值(用户名 + 密码同时爆破)才用
- 只跑 Nessus 无凭据扫描就声称覆盖完整:无凭据漏掉补丁 / 配置 / 合规类本地漏洞,且依赖可能不准的 banner
- 期望主动扫描能发现业务逻辑漏洞(如越权):OWASP ZAP 文档明确指出自动化只能发现特定类型漏洞,逻辑漏洞必须人工渗透
- 用 NULL / FIN / Xmas(-sN/-sF/-sX)扫 Windows / Cisco 并采信结果:这些系统不遵循 RFC 793,会对所有端口回 RST,全部误判为 closed
- 只信任单一工具结果:ZAP / Burp / Nessus / Nmap 各有盲区,不做交叉验证会漏报;正确做法是 SAST + DAST + SCA + 人工组合
- 把 ZAP Baseline(被动)结果当作完整漏洞评估:被动扫描只看经代理流量,未浏览的页面 / 参数不被覆盖,覆盖度取决于爬虫深度
- 扫描后忽略凭据失败信号:Nessus plugin 21745 无结果 ≠ 扫描成功——SSH/SMB 登录失败会让凭据扫描静默退化为无凭据扫描
- 前端项目只配 SAST 不配 SCA:前端自写代码漏洞占比低,真正高危多在 node_modules 依赖里,漏配 SCA 等于放任供应链风险
- 用 --scanflags 自定义标志却不指定基础扫描类型:Nmap 会默认用 SYN 逻辑解释响应,可能导致状态判断错误
- 扫描前没在 WAF 配 X-ZAP-Initiator 标头放行:扫描流量会被 WAF 拦截导致漏报,或触发安全告警 / 封 IP
下一步
- 参考:四大工具对比表、ZAP 被动规则 Alert ID 表、Burp Intruder 攻击类型公式表、Nmap 端口状态与扫描标志对照表、官方资源链接