Skip to content

漏洞扫描工具

「黑客用漏洞扫描器找入口,安全工程师用漏洞扫描器找盲区。」

漏洞扫描器是安全工程师最重要的工具之一。但工具终究只是工具,会用工具和用好工具是两回事。

很多新手拿着扫描器一通扫,导出报告发给开发团队,然后就没然后了。这不是漏洞扫描,这是「漏洞报告自动生成器」。

真正有价值的漏洞扫描,需要结合人工分析,才能发现业务逻辑漏洞、认证绕过等扫描器无法检测的问题。

漏洞扫描器的分类

根据扫描目标和层次,漏洞扫描器可以分为几类:

类型扫描目标代表工具特点
Web 漏洞扫描器Web 应用/APIBurp Suite、AWVS、AppScan检测 SQL 注入、XSS 等 Web 漏洞
系统漏洞扫描器操作系统/服务Nessus、OpenVAS检测 CVE 漏洞、配置缺陷
网络设备扫描器路由器/交换机/防火墙Nessus、绿区检测设备漏洞
数据库漏洞扫描器MySQL/Oracle/SQL ServerDBscan、SQL注入工具检测数据库配置和注入
容器漏洞扫描器Docker/K8s 镜像Trivy、Clair检测镜像中的漏洞

Web 漏洞扫描器

Burp Suite:Web 渗透测试必备

Burp Suite 是 Web 安全测试的瑞士军刀,分为社区版和专业版。

核心模块:

java
// Burp Suite 主要功能模块
public class BurpSuiteModules {
    // 1. Proxy(代理)
    // 拦截并修改 HTTP/HTTPS 请求
    void proxyFunction() {
        // 拦截请求 → 修改参数 → 放行
        // 修改响应 → 改写内容 → 放行
    }

    // 2. Spider(爬虫)
    // 自动爬取网站结构
    void spiderFunction() {
        // 从起始 URL 开始
        // 解析 HTML 中的链接
        // 发现隐藏表单和参数
        // 递归爬取直到完成
    }

    // 3. Scanner(扫描器,仅专业版)
    // 自动检测 Web 漏洞
    void scannerFunction() {
        // 发送恶意请求
        // 分析响应特征
        // 识别漏洞类型
        // 生成扫描报告
    }

    // 4. Intruder( Intruder)
    // 暴力破解、FUZZ 测试
    void intruderFunction() {
        // 枚举用户名
        // 暴力破解密码
        // 参数 Fuzz 测试
        // 暴力猜解目录/文件
    }

    // 5. Repeater(重放器)
    // 手动修改并重发请求
    void repeaterFunction() {
        // 从 Proxy 发送请求
        // 修改参数测试漏洞
        // 多次迭代尝试
    }

    // 6. Decoder(解码器)
    // URL/Base64/HTML 解码
    void decoderFunction() {
        // URL encode/decode
        // Base64 encode/decode
        // HTML entity decode
        // 哈希计算
    }
}

Burp Suite 实战用法:

bash
# 1. 配置浏览器代理
# 浏览器 → 设置 → 手动代理配置 → 127.0.0.1:8080

# 2. 拦截请求并测试 SQL 注入
# 拦截请求,修改 id 参数:
# id=1' OR 1=1--
# 观察响应是否异常

# 3. 使用 Intruder 暴力破解登录
# positions: 设置攻击点
# payloads: 设置字典
# attack type: sniper/battering ram/pitchfork/cluster bomb

# 4. 被动扫描
# 只浏览流量,不主动发包
# 可以检测到反射型 XSS、路径遍历等

AWVS(Acunetix)

AWVS 是一款商业 Web 漏洞扫描器,以扫描速度快、检测准确著称。

bash
# AWVS 命令行使用
# 添加目标
awvs.exe -h https://target.com -c "add_target"

# 启动扫描
awvs.exe -h https://target.com --scan

# 导出报告
awvs.exe --generate_report --format pdf

# 定时扫描
awvs.exe --schedule "0 2 * * *" --scan

AWVS 特点:

  • 扫描速度快,误报率相对较低
  • 内置 WVS 爬虫,可处理 JavaScript
  • 支持 SQL 注入、XSS、CSRF、文件上传等检测
  • 可集成 CI/CD 流水线

SQLMap:SQL 注入专用工具

SQLMap 是开源的 SQL 注入检测和利用工具,专注于自动化 SQL 注入。

bash
# 基本用法
sqlmap -u "http://target.com/product?id=1"

# 指定 Cookie(需登录)
sqlmap -u "http://target.com/product?id=1" --cookie="session=xxx"

# 批量测试
sqlmap -m urls.txt

# 获取数据库信息
sqlmap -u "http://target.com/product?id=1" --dbs
sqlmap -u "http://target.com/product?id=1" -D database_name --tables
sqlmap -u "http://target.com/product?id=1" -D database_name -T users --columns
sqlmap -u "http://target.com/product?id=1" -D database_name -T users -C username,password --dump

# 指定注入技术
# B: Boolean-based blind
# E: Error-based
# U: Union query-based
# S: Stacked queries
# T: Time-based blind
sqlmap -u "http://target.com/product?id=1" --technique B

# 进阶:写文件(需要 DBO)
sqlmap -u "http://target.com/product?id=1" --os-shell
java
// SQLMap 注入检测逻辑
public class SqlmapDetection {
    // 1. 检测注入点
    void detectInjectionPoint(String url) {
        // 发送正常请求,记录响应
        String normalResponse = httpGet(url + "?id=1");
        
        // 发送测试 payload
        String[] testPayloads = {"'", "\"", "1 AND 1=1", "1 AND 1=2"};
        
        for (String payload : testPayloads) {
            String testResponse = httpGet(url + "?id=" + payload);
            if (!normalResponse.equals(testResponse)) {
                // 发现注入点
                return;
            }
        }
    }

    // 2. 识别数据库类型
    void identifyDbms() {
        // 通过错误信息识别
        // MySQL: "You have an error in your SQL syntax"
        // SQL Server: "Unclosed quotation mark"
        // Oracle: "ORA-01756"
    }

    // 3. 枚举数据
    void enumerateData() {
        // UNION 注入获取数据
        // 布尔盲注逐字符猜解
        // 时间盲注绕过无回显情况
    }
}

系统漏洞扫描器

Nessus:系统漏洞扫描标杆

Nessus 是最流行的系统漏洞扫描器,有免费版(最多扫描 16 个 IP)和专业版。

bash
# Nessus 命令行
# 创建扫描策略
nessuscli scan --policy basic --target target.txt

# 查看扫描结果
nessuscli report --scan-id <id> --format html --output /tmp/report.html

# 查看插件列表
nessuscli plugin --list

Nessus 扫描策略:

策略名称适用场景检测内容
Basic Network Scan常规内网扫描常见服务漏洞、弱口令
Advanced Scan深度扫描全面漏洞检测
Web Application TestsWeb 应用SQLi、XSS、配置错误
Credentialed Patch Audit授权扫描补丁缺失、配置基线
Intel AMT Security Check固件安全Intel AMT 漏洞

Nessus 报告解读:

java
// Nessus 漏洞等级
public class NessusSeverity {
    int CRITICAL = 4;  // CVSS 9.0-10.0,需立即修复
    int HIGH = 3;      // CVSS 7.0-8.9,本周内修复
    int MEDIUM = 2;    // CVSS 4.0-6.9,下月修复
    int LOW = 1;       // CVSS 0.1-3.9,计划修复
    int INFO = 0;      // 信息类,非漏洞
    
    // 典型漏洞
    String[] criticalVulns = {
        "EternalBlue (MS17-010)",  // SMB 远程代码执行
        "Heartbleed (CVE-2014-0160)", // OpenSSL 心脏出血
        "Shellshock (CVE-2014-6271)", // Bash 远程代码执行
    };
}

OpenVAS:开源漏洞扫描器

OpenVAS 是 Greenbone Security Assistant 的开源版本,功能强大且免费。

bash
# 安装和使用
apt-get install openvas
openvas-setup  # 首次配置

# 命令行使用
omp -u admin -w password -h localhost -p 9390 \
  --xml="<create_task><name>Scan</name></create_task>"

# 扫描一个目标
omp -u admin -w password --target 192.168.1.100 --task MyScan --activate

容器安全扫描

Trivy:最流行的容器镜像扫描器

bash
# 安装
brew install trivy

# 扫描镜像
trivy image nginx:latest
trivy image myregistry/myapp:v1.2.3

# 扫描目录(用于 Dockerfile 分析)
trivy fs --security-checks vuln,config /path/to/project

# 输出格式
trivy image --format json --output report.json nginx:latest
trivy image --format sarif --output report.sarif nginx:latest

# 忽略已知漏洞
trivy image --ignorefile .trivyignore nginx:latest
yaml
# .trivyignore 示例
# CVE 容忍策略
CVE-2021-99999
CVE-2022-88888
# 理由:已通过 WAF 防护,暂不升级

Trivy 检测的漏洞类型:

扫描类型检测内容
OS 包(Alpine、Debian、Ubuntu 等)系统软件包漏洞
语言包(pip、npm、gem 等)应用依赖漏洞
Dockerfile 配置Dockerfile 不安全写法
Kubernetes 配置K8s 安全配置问题

漏洞扫描的最佳实践

扫描前准备

java
public class PreScanChecklist {
    // 1. 确定扫描范围
    void scopeConfirmation() {
        // 明确扫描目标 IP/域名
        // 确定扫描时间段(避开业务高峰期)
        // 识别禁止扫描的系统
    }

    // 2. 准备扫描环境
    void environmentSetup() {
        // 带宽充足的网络
        // 目标系统已备份
        // 应急回滚方案就绪
    }

    // 3. 获取授权
    void getAuthorization() {
        // 书面授权书
        // 明确测试范围和限制
        // 应急联系人清单
    }
}

扫描执行策略

bash
# 1. 先被动扫描,再主动扫描
# 被动扫描:只接收流量,不发包,不易被发现

# 2. 控制扫描频率
# 避免触发 IPS/防火墙阻断
--max-rate 100  # 每秒最多 100 个请求

# 3. 分阶段扫描
# 第一阶段:快速扫描,只测高危漏洞
# 第二阶段:深度扫描,全面覆盖
# 第三阶段:验证扫描,确认可疑问题

# 4. 夜间扫描
# 避开业务高峰期
crontab -e
# 0 2 * * * /opt/tools/nessus.sh  # 每天凌晨 2 点执行

扫描后处理

java
public class PostScanHandling {
    // 1. 验证漏洞
    void verifyVulnerabilities() {
        // 自动化扫描存在误报
        // 手动验证每个高危漏洞
        // 确认漏洞可利用性和实际影响
    }

    // 2. 去重和归类
    void deduplicate() {
        // 同一漏洞可能有多个 CVE
        // 合并相同根因的漏洞
        // 按业务系统分类
    }

    // 3. 优先级排序
    void prioritize() {
        // 可直接利用 → 优先修复
        // 需要特殊条件 → 次优先
        // 理论上存在但难利用 → 低优先
    }

    // 4. 修复建议
    void provideRemediation() {
        // 具体的修复方案
        // 补丁版本号
        // 配置修改建议
    }
}

扫描工具对比

工具适用场景优点缺点
Burp SuiteWeb 安全测试功能全面,可扩展需手动测试,速度慢
AWVSWeb 漏洞扫描速度快,准确率高商业软件,价格昂贵
SQLMapSQL 注入测试专注注入,自动化强仅限 SQL 注入
Nessus系统漏洞扫描插件丰富,报告完善资源消耗大
OpenVAS系统漏洞扫描开源免费配置复杂
Trivy容器镜像扫描简单易用,专注容器仅限容器领域

总结

漏洞扫描是安全工作中最基础但也最重要的环节之一。

核心要点回顾:

  1. 工具选型:根据扫描目标选择合适的工具,Web 用 Burp/AWVS,系统用 Nessus
  2. 扫描策略:先被动后主动,先快速后深入,控制频率避免触发阻断
  3. 结果验证:扫描结果必须人工验证,消除误报
  4. 修复跟踪:漏洞修复后要复扫验证,确保修复有效
  5. 持续监控:漏洞不断出现,需要周期性扫描

工具能发现已知的漏洞,但发现不了未知的安全风险。真正的安全,需要技术和管理的双重保障。

面试追问方向

  • Burp Suite 的 Proxy 是如何工作的?
  • SQLMap 如何判断注入类型(布尔盲注 vs 时间盲注)?
  • 如何绕过 WAF 进行漏洞扫描?
  • Nessus 扫描结果中误报率高的漏洞有哪些?
  • 容器镜像扫描和主机漏洞扫描有什么区别?

基于 VitePress 构建