第四章:漏洞扫描技术——Nessus、OpenVAS与AWVS实战

各位同学,欢迎来到漏洞扫描这一章。说实话,在渗透测试的整个流程里,扫描阶段是最容易让人「上头」的——你想想看,一堆工具跑完,几千条告警砸脸上,新手直接懵圈。我当年第一次用Nessus扫内网,看到满屏的红色高危,差点以为整个公司都要被我搞瘫痪了。后来才发现,一半是误报。

这一章,我们就来聊聊三款主流扫描器:Nessus、OpenVAS和AWVS。我会把安装、配置、使用以及最重要的——报告解读与误报分析,都掰开揉碎了讲清楚。

4.1 Nessus:商业扫描器的标杆

Nessus这玩意儿,说白了就是漏洞扫描界的「瑞士军刀」。功能全、插件多、报告漂亮。我个人习惯用它做内网资产的全面体检。

4.1.1 安装与激活

安装其实不复杂,但有几个坑我得提前说。

# 下载(以Debian系为例)
wget https://www.tenable.com/downloads/api/v2/pages/nessus/files/Nessus-10.7.3-debian10_amd64.deb

# 安装
dpkg -i Nessus-10.7.3-debian10_amd64.deb

# 启动服务
systemctl start nessusd
systemctl enable nessusd

# 访问Web界面
https://your-ip:8834

第一次访问时,会让你选择部署模式。这里注意:选「Managed Scanner」还是「Standalone」? 如果你只是个人做渗透测试,选Standalone就行。我在项目里见过有人选了Managed Scanner,结果死活连不上Tenable.io,折腾了半天才发现选错了。

⚠️ 避坑指南: 我曾经在虚拟机里装Nessus,发现扫描速度奇慢。后来排查发现,虚拟机只分配了2GB内存。Nessus这货很吃资源,建议至少4GB内存,8GB更稳。否则扫描到一半直接OOM,你哭都来不及。

4.1.2 策略配置与扫描

登录进去后,第一件事是创建扫描策略。我个人习惯这样配:

配置项 推荐值 说明
扫描类型 Basic Network Scan 最通用的全端口扫描
端口范围 1-65535 别偷懒只扫常见端口,很多漏洞藏在高端口
扫描速度 Normal 生产环境建议用Slow,避免打挂业务
插件组 全部启用 除非你知道自己在干什么,否则别乱关

嗯,这里要特别说一下扫描速度。我遇到过一位学员,在客户生产环境用「Fast」模式扫数据库服务器,结果Oracle直接挂了。客户差点让我们赔钱。所以记住:生产环境,慢就是快。

4.2 OpenVAS:开源界的良心

如果你预算有限,或者想自己折腾,OpenVAS是个好选择。它现在叫Greenbone Vulnerability Management(GVM),但大家还是习惯叫OpenVAS。

4.2.1 安装与初始化

安装OpenVAS比Nessus麻烦一点,但也不是什么难事。

# 安装(Kali自带,其他系统需手动)
apt update && apt install -y openvas

# 初始化(这一步会下载插件库,大概要20分钟)
gvm-setup

# 检查安装状态
gvm-check-setup

# 启动服务
gvm-start

初始化这一步,我建议你找个网速好的时候做。有一次我在客户现场,用手机热点下载插件库,结果下了两个小时还没完,场面一度非常尴尬。

💡 小技巧: 如果你发现gvm-setup卡在某个插件下载上,可以试试手动更新:greenbone-nvt-sync。这招我用了好几年,屡试不爽。

4.2.2 配置扫描任务

登录OpenVAS的Web界面(默认https://127.0.0.1:9392),你会看到它的配置逻辑和Nessus不太一样。它把扫描拆成了几个概念:

  • Target:你要扫的目标(IP、域名、网段)
  • Task:扫描任务(关联Target和扫描配置)
  • Scan Config:扫描配置(决定扫哪些漏洞)
  • Report:扫描报告(结果汇总)

我个人习惯这样创建任务:先建Target,再选一个「Full and fast」的扫描配置,最后创建Task。为什么选Full and fast?因为它兼顾了全面性和速度。你想想看,如果选「Full」模式,一个C段扫下来可能要一整天,谁受得了?

4.3 AWVS:Web应用的专属猎手

Nessus和OpenVAS虽然也能扫Web,但术业有专攻。AWVS(Acunetix Web Vulnerability Scanner)才是Web应用扫描的王者。

4.3.1 安装与破解(仅供学习)

AWVS是商业软件,价格不菲。但作为学习用途,我们可以用社区版或者...嗯,你懂的。

# 下载AWVS(以Linux版为例)
wget https://s3.amazonaws.com/acunetix-wvs/.../acunetix_23.9.230928145_x64.sh

# 赋予执行权限
chmod +x acunetix_23.9.230928145_x64.sh

# 安装
./acunetix_23.9.230928145_x64.sh

安装过程中会让你设置Web界面端口(默认3443)和管理员密码。这里我建议端口别改,但密码一定要复杂。为什么?因为AWVS的Web界面直接暴露在网络上,如果密码太弱,别人就能直接控制你的扫描器,那乐子就大了。

4.3.2 扫描Web应用

AWVS的扫描配置非常细致。我一般这样设置:

  1. 目标URL:输入完整的URL,包括协议(http/https)
  2. 扫描模式:选「Full Scan」
  3. 登录设置:如果目标需要登录,配置自动登录脚本
  4. 爬虫设置:限制爬取深度,避免爬得太深触发WAF
🔑 关键点: AWVS的「Deep Scan」模式会尝试发送大量Payload,很容易触发WAF(Web应用防火墙)。我在一次红蓝对抗中,用AWVS扫目标站点,结果直接把对方的WAF打成了「拒绝服务」状态——对方蓝队还以为我们在搞DDoS攻击。所以,扫描前最好确认目标有没有WAF,或者先做一次轻量扫描探探路。

4.4 扫描报告解读与误报分析

好了,工具跑完了,报告出来了。然后呢?这才是真正的考验。

4.4.1 报告结构

不管是Nessus、OpenVAS还是AWVS,报告结构都大同小异:

部分 内容 我的建议
执行摘要 漏洞总数、风险等级分布 给老板看的,别太较真
漏洞列表 每个漏洞的详细信息 重点看这里,逐条分析
漏洞详情 描述、影响、修复建议 修复方案的参考依据
附录 扫描参数、时间戳等 用于复现和审计

4.4.2 误报分析——这才是真功夫

说实话,扫描器报出来的漏洞,有一半可能是误报。为什么?因为扫描器是通过「特征匹配」来判断漏洞的,它不会思考上下文。

举个例子:Nessus报了一个「Apache HTTP Server 2.4.49 路径遍历漏洞」(CVE-2021-41773)。但你一看,目标服务器明明打了补丁。为什么会误报?因为Nessus只是检测了Apache的版本号,而版本号可能被管理员手动修改过。

我总结了一套误报分析的流程:

  1. 看证据:扫描器有没有提供PoC或请求/响应数据?
  2. 手动验证:用Burp Suite或curl复现一下漏洞
  3. 看上下文:这个漏洞在目标环境下是否真的可利用?
  4. 查补丁:目标系统是否已经安装了安全更新?
  5. 问业务:这个服务是不是业务必须的?有没有其他缓解措施?
⚠️ 重要提醒: 我曾经遇到过一个案例,扫描器报了一个「SQL注入」漏洞,但手动测试怎么也复现不了。后来发现,是因为目标网站用了WAF,扫描器的Payload被拦截了,但WAF返回了「200 OK」的假象。所以,不要完全相信扫描器的结果,手动验证永远是最后一道防线。

4.4.3 如何降低误报率

想减少误报?我有几个小技巧:

  • 更新插件库:Nessus和OpenVAS每周都有新插件,及时更新能减少很多已知问题的误报
  • 配置认证扫描:给扫描器提供SSH或Windows凭据,让它能登录系统内部检查,准确率会高很多
  • 调整扫描策略:有些扫描项在特定环境下就是误报,可以手动禁用
  • 交叉验证:用Nessus扫一遍,再用OpenVAS扫一遍,对比结果。两个工具都报的漏洞,基本就是真的了

好了,这一章的内容就到这里。扫描工具只是手段,真正的价值在于你如何解读报告、如何从海量告警中找出真正的威胁。下一章,我们会进入漏洞利用阶段,到时候你会感谢今天认真做扫描的自己。

记住:扫描做得好,利用没烦恼。