新闻详情

新闻详情

首页 / 资讯中心 / 详情

用GVM+Nmap构建自动化漏洞扫描流程:从资产发现到复扫

发布时间:2026/9/25 8:41:35来源:尧图网络
用GVM+Nmap构建自动化漏洞扫描流程:从资产发现到复扫
最近在做内部网络资产梳理的时候我又把GVM、Nmap这套漏洞扫描工具组合整体跑了一遍。这次跟上一次随手开一个扫描器就跑完全不同我把工具串成了一条流程线从资产发现、服务识别、漏洞探测、报告去误报到最后的验证复扫每一步都让对应的工具去接手。整体跑完之后最后拿出来的那份漏洞清单比单纯跑一个扫描器干净太多了。这篇我就把整套自动化扫描漏洞流程从头到尾拆开讲重点是漏洞扫描工具怎么联合使用以及GVM这个主引擎到底怎么用才顺手。刚接触网络渗透的朋友可以把它当作一份能直接照着操作的基础教程。先说清楚这套流程解决了什么问题。接手一个内网或者一段IP段我面对的第一件事是“我到底有哪些系统在跑”第二件事是“这些系统上有没有能被打穿的点”。单靠一个工具这两件事很难同时高质量完成。Nmap擅长发现GVM擅长评估但把两者打通再叠加一点自动化调度和人工复核效果就完全不一样了。下面我会按实际执行顺序把每一步该干什么、为什么这么干、有哪些坑都写出来。1. 为什么我坚持把漏洞扫描工具“联合起来”用1.1 单一扫描器的三个硬伤先说结论任何一个单兵工具都有明显短板这不是工具不好是定位不同。第一是覆盖度不够。Nmap的核心能力是主机发现和端口服务识别它本身不负责报漏洞虽然带了一些NSE脚本能做一些基础检测但跟专门的漏洞评估工具比深度差远了。GVM这种平台型工具恰恰相反它内置了大量NVT插件对CVE、配置问题、弱口令、Web应用风险都能做系统化检测可它对整个网段的资产探测效率又很低如果直接拿一个大网段丢给GVM等待时间足够让人怀疑人生。第二是误报率偏高。GVM在默认策略下会把“可能存在问题”的项目大量上报尤其是Web类检测和版本指纹类检测经常出现“检测到目标可能存在某漏洞”这种模糊描述。这类结果如果在没有交叉验证的情况下直接写进报告那这份报告基本没法看因为响应团队会把时间浪费在根本不存在的漏洞上。第三是效率没法保障。漏洞扫描本身就是一件重资源的事一个常见的内网C类地址段如果用Full and fast配置全量跑跑上大半天很正常。但其中真正有价值的目标比如开放了Web端口、数据库端口、远程管理端口的主机可能只有不到三成。把资源均匀摊在每一个IP上是极大的浪费。1.2 联合使用的分工逻辑所以我把工具拆成三条线各管一段。Nmap管“发现”。它负责找出哪些主机在线、开放了哪些端口、跑了什么服务。这一环节追求的是速度和覆盖不追求深度。GVM管“评估”。等拿到存活IP和端口清单后我把这些IP按批次喂给GVM让它用庞大的NVT插件库去做系统性漏洞检测。这个环节拼的是广度和深度。之后是人工或者轻量工具做“验证”。GVM报出来的高危漏洞我会再用Nuclei这类开源验证工具去探测一遍或者直接手工看响应包确认漏洞真实存在同时判断漏洞在业务上下文里的实际影响。这套流程跑通之后你会发现扫描报告里的噪音明显减少高危漏洞的置信度高了很多而且每一步用了什么工具、扫描范围是什么都可以追溯。这比“一键扫描导出报告”的方式专业得多也是网络渗透工作里一个很基础但又很关键的思维习惯。2. 主引擎GVM从安装到一次完整扫描2.1 GVM到底是什么值得用它吗GVM的全称是Greenbone Vulnerability Management可能老玩家更熟悉它前身OpenVAS这个名字。OpenVAS当年是Nessus开源分支里最有影响力的一个后来持续迭代成了现在的GVM架构。我现在用的这套系统核心由几部分组成openvas扫描引擎负责真正发探测包、跑NVT插件gvmd是管理守护进程负责任务调度和结果存储gsad提供Web控制台我们用浏览器登录操作的就是它另外还有一套NVT插件库可以理解成漏洞检测规则库跟杀毒软件的病毒库一个概念。如果拿GVM跟商业扫描器对比比如Nessus Professional或者QualysGVM在报告美观度和某些商业插件覆盖上有差距但作为开源方案它的检测能力、社区更新频率、以及可脚本化的管理接口已经足够支撑大部分中小规模内网的安全评估需求。特别适合安全测试初学者、企业蓝队做常态化资产风险管理或者像我这样需要频繁批量复查漏洞修复情况的场景。2.2 部署GVMDocker方式最省心GVM的依赖组件很多如果直接从源码编译安装光是处理各种库的版本冲突就能折腾一整天新手极容易在这一步就被劝退。我个人比较推荐直接用Docker镜像部署这里用社区维护的securecompliance/gvm做示例。docker run -d \ --name gvm \ -p 9392:443 \ -p 9390:9390 \ --restartalways \ securecompliance/gvm启动之后等一分钟左右浏览器访问https://127.0.0.1:9392因为默认是自签名证书浏览器会提示不安全直接放行进入即可。默认用户名是admin初始密码需要从容器日志里找docker logs gvm 21 | grep password这里有两个容易踩的坑。第一个是端口冲突尤其9390这个端口容易被其他软件占用启动前先ss -tlnp看一眼。第二个是磁盘空间GVM的插件库加扫描结果数据会占用不少空间至少给Docker数据目录留30GB以上否则后面feed更新很容易失败。2.3 别忘了更新漏洞库这是新手最容易忽略的一步安装完成的第一件事不是急着建扫描任务而是更新漏洞库。NVT插件的更新频率基本上决定了扫描结果的上限一个半年没更新的GVM扫描结果参考价值非常低因为新出的CVE它根本不知道。更新命令在容器内执行docker exec -it gvm greenbone-feed-sync不要期待几分钟搞定。这个feed同步包含NVT、GVMD数据和SCAP数据根据网络情况快则一二十分钟慢则可能需要一两个小时。更新的时候注意别中断容器。同步完成后建议顺手重建一下gvmd缓存避免出现扫描任务报错或者结果无法正常入库的情况docker exec -it gvm gvmd --rebuild2.4 Web界面完成一次完整扫描需要配置哪些东西在GVM的Web界面里完成一次有效扫描至少需要理解五个概念Target、Credentials、Scan Config、Task、Report。首先建Target也就是扫描目标。在侧边栏Configuration下找到Targets新建时填IP或者网段。这里我习惯把多个IP写在同一行或者使用主机名。Target里比较关键的一项叫Ports我通常不会留空默认而是先把Nmap扫出来的端口清单一并填进去格式类似T:22,80,443,3306,6379,8080,9090只扫这些端口扫描速度会快很多而且能降低扫描器发出的无效流量。如果对目标一无所知可以先用GVM自带的端口列表后面再慢慢调整。然后是Credentials认证凭据。如果你有目标主机的SSH账号、Windows的SMB账号建议在Credentials里先建好凭据然后在Target里把它关联上。这一步很多人会跳过但默认的“无凭据扫描”只能从外部探测很多高危漏洞根本测不出来。有凭据后扫描器能登录系统检查补丁级别、配置文件、已安装软件版本检测深度完全不是一个量级。接下来是Scan Config扫描配置。新建Task的时候会要求选择配置默认的Full and fast是使用最多的它涵盖了漏洞检测、服务识别、操作系统指纹、弱口令测试等常见项目。如果是内网大范围资产梳理我会先用Discovery这种轻量配置快速摸底再对重点目标做Full and fast。最后是Task和Report。Task就是任务调度单元把Target、Config、Credentials、Schedule绑定在一起。扫描跑完之后Report里会按严重程度分级列漏洞。导出报告时我一般选XML格式因为后续做数据去重和处理时XML比PDF或者HTML更方便脚本操作。新手在操作GVM时最常见的报错就是“Task的状态一直停在Requested不动”这种情况八成是gvmd和scanner之间的通信出了问题。用Docker部署的话先重启容器再看docker logs gvm的输出基本都能排查出来。3. 把流程串起来一套能落地的自动化扫描漏洞流程3.1 第一步Nmap先做资产发现和服务识别我不会让GVM直接去盲扫一个大网段而是先用Nmap做一轮资产发现。Nmap在这方面轻量高效非常合适。基础命令很简单nmap -sn 192.168.10.0/24 -oG alive_hosts.txt-sn表示只做主机发现不扫端口。得到的alive_hosts.txt里会列出所有在线IP这样我就能初步把目标范围锁定下来。第二步是针对存活主机做端口和服务指纹识别。我一般会先扫Top 1000端口效率高覆盖也够用nmap -sS -sV -T4 -iL alive_hosts.txt -oA service_scan-sS是TCP SYN半开扫描速度快且相对隐蔽-sV做服务版本探测这是后续判断漏洞的关键信息。等这步跑完把输出结果过滤整理一下就能得到一份包含IP、端口、服务版本的小清单。这份清单既可以直接人工浏览也可以作为后续GVM扫描的目标输入。3.2 第二步把Nmap结果整理成GVM的目标清单直接复制粘贴Nmap输出到GVM里当然也可以但如果主机数量多还是要用脚本处理。我通常会把open端口里明显是Web服务、中间件、数据库、远程管理端口的IP单独挑出来优先喂给GVM加深扫剩下的主机再分批次做常规扫描。这一步的自动化并不复杂核心逻辑就是读取Nmap输出的文件提取IP列表再通过GVM的API创建Target和Task。下面的脚本用的是GVM官方推荐的python3-gvm库它比直接敲XML格式的GMP请求友好得多from gvm.connections import TLSConnection from gvm.protocols.gmp import Gmp from gvm.transforms import EtreeTransform hosts open(alive_hosts.txt).read().strip().splitlines() conn TLSConnection(hostname127.0.0.1, port9390) transform EtreeTransform() with Gmp(connectionconn, transformtransform) as gmp: gmp.authenticate(admin, your_password) target_id gmp.create_target( nameauto-target, hostshosts, # 传入IP列表 port_list_id4a4717fe-57d2-11e1-9d26-240c13e5d4f3 ).get(id) config_id daba56c8-73ec-11df-a475-002264764cea # Full and fast 配置 task_id gmp.create_task( nameauto-task, config_idconfig_id, target_idtarget_id ).get(id) gmp.start_task(task_id)注意daba56c8-73ec-11df-a475-002264764cea是GVM内置Full and fast配置的固定UUID建议在自己的环境里用脚本查询一次确认不同版本可能有差异。port_list_id同理需要用gmp的get_port_lists方法查一遍。跑这一遍脚本就相当于把之前手动在Web界面里的操作自动化了。3.3 第三步自动化的两种调度路径自动化扫描的调度我见过两种做法。一种是完全依赖GVM自带的Schedule功能。在创建Task的时候可以设置定期执行GVM会在设定的时间点自动重跑任务报告的增量对比也由系统自己记录。这种方式适合固定目标的常态化巡检不用额外维护外部脚本装上就完事。另一种是在外部用Cron或定时任务在目标变化较多时把工具链串起来。比如我想每周一凌晨先用Nmap重新扫一遍资产发现新增IP后自动喂给GVM再让GVM跑一轮漏洞检查这就需要Cron调用一个外层脚本。我的做法是写一个bash脚本里面依次执行Nmap和Python脚本然后用crontab固定执行时间30 3 * * 1 /data/scan/run_scan.sh /data/scan/log/scan_$(date \%Y\%m\%d).log 21这种方式的灵活性更高也比较好跟其他的告警系统对接。相比之下如果你的需求只是固定资产周期扫描完全不需要折腾外部脚本GVM自带的Schedule足够了。3.4 报告产出和数据归档细节扫描任务跑完GVM会自动生成报告。除非只是想拿一份给人看的PDF否则我会把XML原始报告定期归档文件名带上扫描日期和目标范围比如report_20250112_106段.xml。归档这一步很多人嫌麻烦但后面做漏洞对比的时候非常有用。比如上个月报出来的高危漏洞这个月复查有没有修复直接对比两个XML文件的漏洞编号和影响主机就能快速得到答案。我还会同时把Nmap的服务扫描结果存一份当GVM报某个端口存在漏洞时直接关联到对应的服务版本判断漏洞可利用性就快很多。4. 扫描结果出来之后报告处理和验证4.1 先做去重和去误报再谈风险GVM生成的报告不经过加工是没法直接用的。原始报告里大量条目属于“低危信息类”比如“检测到Web服务器版本信息泄露”这类真实威胁有限。真正需要关注的是中高危漏洞里那些可信度高的条目。我的习惯是先把XML解析出来按“漏洞名称受影响端口CVSS评分”三个维度去重然后再把每一条拉出来人工判断一次。判断不是看标题而是看扫描器给出的证据比如版本号、探测到的响应内容、对应的CVE描述。如果探测依据是版本号推断出来的而目标的实际版本号已经因为特殊配置被改变这种误报就必须标出来。以Web类检测为例GVM经常报“检测到目标存在XSS漏洞”但扫描器的依据往往是某个参数在响应里被反射。这种结果能不能被利用取决于具体场景我会用Nuclei去手工验证一次带一个针对该漏洞的模板看能否稳定复现。4.2 用CVSS评分和资产重要性做优先级排序漏洞不是全部要修的优先级排序才是关键。CVSS评分是一个客观参考但它不看资产重要性。在我的排序逻辑里第一梯队是“CVSS大于等于9.0且暴露在互联网或核心内网段”的漏洞第二梯队是“CVSS 7.0到8.9且存在可直接利用的公开POC”第三梯队才轮到其他中危问题。比如GVM在多个主机上报了同一个SMB漏洞CVSS评分9.8但其中一台只是内网打印共享服务器另一台是核心文件服务器那处理顺序肯定先文件服务器。把资产重要程度和CVSS结合起来才能让有限的修复资源花在最该花的地方。4.3 修复完成之后必须做复扫提交漏洞给业务方之后不能等着对方说“修完了”就结束。我会把修复后的目标重新加入GVM扫描任务单独再跑一轮然后在报告里对比前后差异确认对应漏洞条目已经消失或者评分已经降到可接受范围。复扫还有一个作用就是防止修复动作引入了新的问题。比如为了修补某个Web漏洞运维改了Nginx配置结果把另一个接口暴露了出去。复扫和对比报告能及时发现这类副作用。自动化扫描流程到这里才算闭环。5. 常见问题与排查技巧实录5.1 feed更新失败怎么办这是GVM使用者最常遇到的问题。feed同步突然报错或者进度一直卡着不动。我处理这种问题一般按顺序排查先看网络是否正常再确认磁盘空间最后看日志里有没有明确的报错信息。在Docker容器里直接看日志最方便docker logs gvm | tail -100如果看到类似“Connection timeout”的报错大概率是网络问题。多试几次或者换一个网络时段同步成功率会高很多。磁盘空间不足导致的更新失败也很常见用df -h检查根分区和Docker数据目录不足的话先清掉旧的扫描报告缓存。5.2 扫描任务长期处于Requested或超时有人创建Task之后发现状态一直停在Requested怎么等都不动。这个问题的根源通常是gvmd和scanner进程之间的通信出了问题或者并发任务太多导致scanner没有空闲资源。我自己遇到过的场景是之前手动创建了好几个Task还在排队新任务就被卡住了。处理方式是先停掉一些低优先级任务再重启容器让进程重新握手docker restart gvm重启之后如果还是卡在Requested就看日志是否提示gvmd无法连接scanner。容器环境里出现这种情况的概率不高但如果是手动搭建的环境十有八九是服务启动顺序或者socket权限的问题。5.3 常见问题速查表问题现象可能原因快速处理feed同步失败网络不可达、磁盘满检查网络用df -h看磁盘清空间后重试扫描任务卡在Requested队列拥堵或进程通信异常停低优先级任务重启容器扫描结果为空feed未更新或gvmd缓存异常更新feed后执行gvmd --rebuild大量误报无凭证扫描导致版本推断不准配置凭据重新扫描用Nuclei验证导出PDF乱码容器缺少字体文件换用HTML/XML格式报告扫描速度极慢目标过大、配置过重分IP段、精简端口列表、用Discovery配置摸底5.4 安全合规提醒最后说一句重要的话。上面这套工具链只能在你有明确授权的范围内使用。我平时跑这套流程都是针对自己负责维护的资产或者项目合同里已经写明可以测试的目标范围。漏洞扫描工具是一把双刃剑离开了授权任何扫描行为都可能带来法律和管理上的风险。新手练习建议先在本地搭虚拟机靶场把流程跑熟了再应用到真实环境。网络渗透技术本身是安全工作的基础能力但守住授权边界才是这个领域能长期待下去的前提。我个人测试下来最大的体会是工具联合使用的核心并不在于某个工具多强大而在于你清楚每一步想解决什么问题。GVM再强也不能替代资产发现Nmap再快也没法像GVM那样覆盖成体系的漏洞库。把这几个工具的节奏配合好再用脚本把重复劳动省掉漏洞扫描这件事才能真正变成可持续运行的常态化工作。希望这篇记录能帮刚接触的朋友少走一些弯路。
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

CLI + MCP + OpenRouter:Agent 开发工具链整合实战指南 2026/9/25 9:13:08

CLI + MCP + OpenRouter:Agent 开发工具链整合实战指南

1. 从"treg"这个标题说起:一个被低估的CLI工具链整合思路第一次看到"treg"这个词,我脑子里蹦出来的第一反应是"这又是什么新造的名词"。翻了一圈热词列表才反应过来,这大概率是一个围绕OpenRouter、Agent、CLI…

阅读更多 →
从双绞线到光纤:计算机网络传输介质原理与选型指南 2026/9/25 9:12:55

从双绞线到光纤:计算机网络传输介质原理与选型指南

1. 从一道选择题说起:传输介质为什么值得认真学先问个问题:给你一台交换机、两台电脑,中间隔着五十米,让你把网络通上,你会选什么线?六类双绞线?多模光纤?还是干脆上无线网桥&#x…

阅读更多 →
品牌出海咨询机构怎么选?2026年度Top5实力拆解与避坑指南 2026/9/25 9:12:55

品牌出海咨询机构怎么选?2026年度Top5实力拆解与避坑指南

1. 行业观察的背景:出海咨询为什么成了“显学”大概从两三年前开始,跨境电商圈和品牌圈里出现了一个明显的风向变化:大家聊的不再是“要不要出海”,而是“出海怎么少走弯路”。这个变化的背后,其实是整个行业从流量驱动…

阅读更多 →
go-app 推送通知(Push Notifications)完整接入指南:从 VAPID 订阅到服务端下发 2026/9/25 9:12:49

go-app 推送通知(Push Notifications)完整接入指南:从 VAPID 订阅到服务端下发

前端Web框架WebAssembly 【免费下载链接】go-app A package to build progressive web apps with Go programming language and WebAssembly. 项目地址: https://gitcode.com/gh_mirrors/go/go-app 点击查看 免费下载 导读 推送通知(Push Notification…

阅读更多 →
Atlas 300V 24G推理卡实战:从YOLO模型转换到OM部署全流程解析 2026/9/25 9:12:42

Atlas 300V 24G推理卡实战:从YOLO模型转换到OM部署全流程解析

入行做AI推理这几年,隔三差五就有人拿着Atlas 300V 24G来问我:这卡到底算不算运算加速卡?能不能直接跑YOLO?每次我都会先反问一句:你说的“运算加速”,是想训练模型,还是只想做部署推理&#xf…

阅读更多 →
Atlas 300V 24G推理加速卡YOLO部署全流程实战 2026/9/25 9:12:36

Atlas 300V 24G推理加速卡YOLO部署全流程实战

1. 先搞清楚:Atlas 300V 24G到底是一张什么卡很多人搜“atlas 300v 24g 是运算加速卡吗”,本质上是在确认一件事:这东西买回来能不能直接插到服务器上跑推理。我的回答是:能,而且它在推理场景里的定位非常清晰——它就…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞 ✉