漏洞扫描工具
「黑客用漏洞扫描器找入口,安全工程师用漏洞扫描器找盲区。」
漏洞扫描器是安全工程师最重要的工具之一。但工具终究只是工具,会用工具和用好工具是两回事。
很多新手拿着扫描器一通扫,导出报告发给开发团队,然后就没然后了。这不是漏洞扫描,这是「漏洞报告自动生成器」。
真正有价值的漏洞扫描,需要结合人工分析,才能发现业务逻辑漏洞、认证绕过等扫描器无法检测的问题。
漏洞扫描器的分类
根据扫描目标和层次,漏洞扫描器可以分为几类:
| 类型 | 扫描目标 | 代表工具 | 特点 |
|---|---|---|---|
| Web 漏洞扫描器 | Web 应用/API | Burp Suite、AWVS、AppScan | 检测 SQL 注入、XSS 等 Web 漏洞 |
| 系统漏洞扫描器 | 操作系统/服务 | Nessus、OpenVAS | 检测 CVE 漏洞、配置缺陷 |
| 网络设备扫描器 | 路由器/交换机/防火墙 | Nessus、绿区 | 检测设备漏洞 |
| 数据库漏洞扫描器 | MySQL/Oracle/SQL Server | DBscan、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 * * *" --scanAWVS 特点:
- 扫描速度快,误报率相对较低
- 内置 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-shelljava
// 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 --listNessus 扫描策略:
| 策略名称 | 适用场景 | 检测内容 |
|---|---|---|
| Basic Network Scan | 常规内网扫描 | 常见服务漏洞、弱口令 |
| Advanced Scan | 深度扫描 | 全面漏洞检测 |
| Web Application Tests | Web 应用 | 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:latestyaml
# .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 Suite | Web 安全测试 | 功能全面,可扩展 | 需手动测试,速度慢 |
| AWVS | Web 漏洞扫描 | 速度快,准确率高 | 商业软件,价格昂贵 |
| SQLMap | SQL 注入测试 | 专注注入,自动化强 | 仅限 SQL 注入 |
| Nessus | 系统漏洞扫描 | 插件丰富,报告完善 | 资源消耗大 |
| OpenVAS | 系统漏洞扫描 | 开源免费 | 配置复杂 |
| Trivy | 容器镜像扫描 | 简单易用,专注容器 | 仅限容器领域 |
总结
漏洞扫描是安全工作中最基础但也最重要的环节之一。
核心要点回顾:
- 工具选型:根据扫描目标选择合适的工具,Web 用 Burp/AWVS,系统用 Nessus
- 扫描策略:先被动后主动,先快速后深入,控制频率避免触发阻断
- 结果验证:扫描结果必须人工验证,消除误报
- 修复跟踪:漏洞修复后要复扫验证,确保修复有效
- 持续监控:漏洞不断出现,需要周期性扫描
工具能发现已知的漏洞,但发现不了未知的安全风险。真正的安全,需要技术和管理的双重保障。
面试追问方向
- Burp Suite 的 Proxy 是如何工作的?
- SQLMap 如何判断注入类型(布尔盲注 vs 时间盲注)?
- 如何绕过 WAF 进行漏洞扫描?
- Nessus 扫描结果中误报率高的漏洞有哪些?
- 容器镜像扫描和主机漏洞扫描有什么区别?
