网络安全实战第12期:三步定位已知漏洞CVE+NSE+searchsploit

从版本号到漏洞清单:CVE 查询 + NSE 脚本 + searchsploit 三步定位已知漏洞

网络安全实战 90 天 · Week 2 侦察 · 难度 ★★★ 进阶 | 关键词:漏洞初判 CVE CVSS NSE searchsploit vsftpd 后门 Samba RCE

扫出一堆版本号之后,真正的工作才开始:哪个有洞、洞有多严重、有没有现成 EXP。这篇把「漏洞初判」拆成三步------查 CVE 确认存在性、跑 NSE 脚本做主动验证、用 searchsploit 找可用的利用代码,最后整理成一份按 CVSS 排序的漏洞清单。

一、漏洞初判在侦察流程里的位置

前面三篇做完,手里有的是一张「端口 + 版本」清单。这份清单本身没有意义------真正的价值在于把它翻译成「哪些服务有已知漏洞、严重程度如何、能不能打」。

这一步是纯信息分析,绝大部分工作不需要碰目标。只有 NSE 脚本那一步会发探测包,而且也只是发送特定的验证请求,不构成实际攻击。

说明 本文所有 CVE 查询在公开漏洞库完成,NSE 与 searchsploit 仅做版本存在性验证,未执行任何利用代码。目标为自建 Metasploitable2 靶机。

二、第一步:圈出可疑版本

先做最粗糙的筛选:哪些版本「看起来就有问题」。经验法则是看发布年份------2010 年以前发布的服务,基本都有公开的漏洞记录,因为那时候安全研究刚起步,大量服务在设计时没有考虑对抗环境。

上一篇文章扫出来的五个版本,按年份排一下就很清楚:

服务 版本 发布年份 初判
vsftpd 2.3.4 2011 有源码植入后门,CVSS 9.8
OpenSSH 4.7p1 2008 无重大 RCE,但加密算法过时
Apache httpd 2.2.8 2008 多个 DoS 与信息泄露
Samba 3.0.20 2008 usermap_script 远程命令执行
MySQL 5.0.51a 2008 默认配置下 root 空口令

三、第二步:查 CVE 确认

3.1 四个常用漏洞库

站点 特点 适合场景
cve.mitre.org CVE 官方编号库,最权威 确认编号是否存在、看原始描述
nvd.nist.gov NIST 维护,带 CVSS 评分和 CPE 匹配 查严重程度、查影响版本范围
cvedetails.com 按厂商/产品聚合,可视化好 看某个产品的历史漏洞全貌
exploit-db.com 漏洞利用代码库 找现成 EXP、对应到 searchsploit

3.2 查一条漏洞要抓四个东西

  • CVE 编号:唯一标识,后续沟通和报告都用它。

  • 影响版本范围:确认自己的目标版本在不在范围内------这一步最容易出错,很多漏洞只影响特定小版本。

  • 漏洞类型:RCE、信息泄露、DoS、提权,决定了危害方向。

  • 有无公开 EXP:有 EXP 意味着利用门槛极低,优先级要往前提。

3.3 实例:vsftpd 2.3.4

在 NVD 上搜 vsftpd 2.3.4,第一条就是 CVE-2011-2523,CVSS 9.8(Critical)。

这条漏洞的性质非常特殊------不是代码缺陷,是源码被恶意植入了后门。2011 年 vsftpd 官方下载服务器被攻破,2.3.4 这个版本的源码里被加了一段:当登录用户名中包含「😃」这个表情符号时,服务会在 6200 端口启动一个 root 权限的 shell。

这意味着:只要版本是 2.3.4,不需要任何技巧,一个特定用户名就能拿到 root。这类「供应链投毒」型漏洞的危害远高于普通代码缺陷,因为它是设计上就给你留了门。

四、第三步:NSE 脚本主动验证

CVE 库告诉你「这个版本理论上存在漏洞」,NSE 脚本告诉你「这台机器上确实存在」。前者是情报,后者是证据。

4.1 先看有哪些脚本

列出漏洞检测脚本

bash 复制代码
ls /usr/share/nmap/scripts/ | grep vuln

Nmap 自带几百个 NSE 脚本,vuln 类别下是专门的漏洞检测。命名规律是 服务名-vuln-漏洞名,比如 ftp-vsftpd-backdoor、smb-vuln-ms08-067。

4.2 按服务逐个跑

按服务分组检测

bash 复制代码
nmap --script ftp-vsftpd-backdoor -p 21 192.168.159.137
nmap --script "smb-vuln*" -p 139,445 192.168.159.137
nmap --script "http-vuln*" -p 80 192.168.159.137

脚本返回 VULNERABLE 就说明漏洞真实存在,同时会给出 CVE 编号和利用参考。这比单纯查版本可靠得多------有些系统打了补丁但版本号没变,脚本能区分出来。

靶机上 ftp-vsftpd-backdoor 报 VULNERABLE,smb-vuln-ms08-067 也报 VULNERABLE。两条都拿到了明确的验证证据。

4.3 别用 --script vuln 一把梭

全量漏洞脚本(不推荐)

bash 复制代码
nmap --script vuln 192.168.159.137

这个命令会跑所有 vuln 类脚本,听起来很爽,实际体验很差------几百个脚本逐个跑,一台机器能耗掉半小时以上,而且输出量大到没法读。

正确做法是按服务分组:先看开了哪些端口,只对相关服务跑对应的脚本组。21 端口跑 ftp-,139/445 跑 smb-,80 跑 http-*。这样又快又能读懂。

五、第四步:searchsploit 找现成 EXP

确认漏洞存在之后,下一个问题是「有没有现成的利用代码」。searchsploit 是 Exploit-DB 的命令行客户端,本地就有一份完整的漏洞库副本。

搜索利用代码

text 复制代码
searchsploit vsftpd
searchsploit samba 3.0
searchsploit openssh 4.7

结果里有两个直接对应的:17491.rb 是 vsftpd 2.3.4 后门的 Metasploit 模块,usermap_script 是 Samba 3.0.20 的 CVE-2007-2447 远程命令执行。

5.1 下载与查看 EXP

下载并查看利用代码

text 复制代码
searchsploit -m 17491
searchsploit -x exploits/unix/remote/17491.rb

-m 把 EXP 复制到当前目录,-x 直接在终端打开看源码。看源码的意义不是「学会怎么打」,而是搞清楚触发条件------比如 vsftpd 那个需要用户名含「😃」,Samba 那个需要特定的用户名格式,这些细节决定了后续能不能成功。

openssh 4.7 搜出来是空的。这个结果本身也是情报:说明这个版本没有公开的可用 EXP。前面查到它「无重大 RCE」,两者互相印证。

六、第五步:整理漏洞清单

所有信息汇到一起,按 CVSS 分数排序,形成一份可直接执行的清单。

# 服务/端口 漏洞 CVE CVSS 等级 有 EXP
1 vsftpd 2.3.4 / 21 源码植入后门,可获 root shell CVE-2011-2523 9.8 严重 有
2 Samba 3.0.20 / 139,445 usermap_script 远程命令执行 CVE-2007-2447 9.3 严重 有
3 bindshell / 1524 直接暴露 root shell --- 9.0 严重 无需
4 MySQL 5.0.51a / 3306 root 空口令 --- 8.5 严重 无需
5 Apache 2.2.8 / 80 多类 DoS 与信息泄露 多个 7.5 高 有
6 UnrealIRCd 3.2.8.1 后门命令执行 CVE-2010-2075 7.5 高 有
7 DistCC / 3632 未授权远程命令执行 CVE-2004-2687 7.1 高 有
8 OpenSSH 4.7p1 / 22 算法过时,无重大 RCE --- 4.3 中 无

8 条里 5 条严重。这个比例在 Metasploitable2 上很正常------它本身就是故意做旧的教学靶机。但清单的结构值得记住:编号、位置、漏洞、编号、分数、等级、有无 EXP,七列足够支撑后续的利用决策。

6.1 CVSS 分级标准

分数区间 等级 含义
9.0 -- 10.0 严重 Critical 远程可直接拿到最高权限,或造成大范围影响
7.0 -- 8.9 高 High 远程可利用,但可能需要特定条件
4.0 -- 6.9 中 Medium 需要本地权限或特定前置条件
0.1 -- 3.9 低 Low 影响有限,通常是信息泄露

七、踩坑记录

现象 原因 解决办法
searchsploit openssh 4.7 无结果 该版本无公开 EXP 缩短关键词只搜 openssh,看整体情况
--script vuln 跑半小时 几百个脚本全量执行 按服务分组,只跑相关脚本
NSE 脚本报错或超时 脚本对目标服务版本不兼容 跳过该脚本,用版本+CVE 的方式判断
版本号对不上 CVE 的影响范围 补丁后版本号不变,或发行版自己 backport 以 NSE 脚本的实际检测结果为准
清单越整理越乱 没有统一的字段结构 固定七列:编号/位置/漏洞/CVE/CVSS/等级/EXP

坑 1:searchsploit 搜不到就以为没洞

searchsploit openssh 4.7 返回空,第一反应是「这个版本很安全」。

实际上「没有公开 EXP」和「没有漏洞」是两件事。OpenSSH 4.7p1 确实没有重大 RCE 的公开利用,但它的加密算法已经过时(不支持现代密钥交换),在实战中会限制后续的横向手段。

所以搜不到的时候,要缩短关键词再搜一遍(openssh 而不是 openssh 4.7),看这个产品的整体漏洞历史,再结合版本判断哪些可能适用。

坑 2:--script vuln 一把梭

看教程说 nmap --script vuln 能一次跑完所有漏洞检测,直接照做,结果跑了半小时还没完,输出几百行根本读不下去。

原因:vuln 类别下有几百个脚本,Nmap 会逐个对每个开放端口跑一遍。8 个端口 × 几百个脚本,组合爆炸。

正确做法是按服务分组。先看端口,21 就跑 ftp-vsftpd-backdoor,139/445 就跑 smb-vuln*,80 就跑 http-vuln*。针对性强、速度快、输出干净。

坑 3:版本号对不上 CVE 的影响范围

查到一个 CVE 说影响 Apache 2.2.x,但靶机是 2.2.8,不确定在不在范围内。

这种情况很常见,原因是:发行版会自己 backport 安全补丁但不动版本号,所以「版本号相同」不等于「漏洞存在」。

判断方法:优先信 NSE 脚本的实测结果,其次看 NVD 的 CPE 匹配(它列出了精确的版本范围),最后才靠版本号猜。三者冲突时,实测优先。

坑 4:清单没有统一结构

第一版漏洞清单是随手记的,一会儿写「21 端口有后门」,一会儿写「CVE-2007-2447 严重」,格式混乱,没法排序也没法交给别人看。

改法:固定七列------编号、服务/端口、漏洞描述、CVE 编号、CVSS 分数、等级、有无 EXP。有了固定结构才能按 CVSS 排序,才能一眼看出先打哪个。

八、小结

  • 漏洞初判三步走:圈可疑版本(看年份)→ 查 CVE(确认存在)→ 跑 NSE(实测验证)。

  • 查 CVE 抓四样:编号、影响版本范围、漏洞类型、有无公开 EXP。

  • NSE 脚本是「证据」不是「情报」------它验证的是这台机器上确实存在,比查版本可靠。

  • searchsploit 搜不到不等于没洞,只说明没有公开 EXP;缩短关键词重搜看全貌。

  • 清单必须结构化:编号/位置/漏洞/CVE/CVSS/等级/EXP,七列固定,才能排序决策。

  • CVSS 9.0 以上是严重,7.0--8.9 是高;但实战中「有无 EXP」往往比分数更能决定先打哪个。

下一篇:Day013 把一周的侦察成果写成一份能交付的渗透测试报告------七段式结构、证据链组织、攻击路径规划。

相关推荐
自由彩虹1 小时前
靶场通关15--bossplayersctf
linux·服务器·网络·安全·web安全·网络安全
武雄(小星Ai)1 小时前
Cursor市场Claude Code扩展被植入SSH后门:一次供应链投毒的完整拆解与自查手册
安全·网络安全·供应链攻击
叼烟扛炮1 小时前
Linux 学习笔记(四十五):Web 安全基石——Cookie、Session 与 HTTPS 原理解析
linux·前端·网络·笔记·学习·tcp/ip·安全
~央千澈~1 小时前
优雅草新产品2026 年 10 月 31 日公测完毕v1.0.0 优雅草人机盾正式运营上线
安全·网络安全·安全防御
是真的小外套1 小时前
网络安全实战第10期:Nmap主机发现之一键扫清整个网段
网络·安全·web安全
垚垚学技术_聚焦云原生1 小时前
Ansible Vault 安全实践:敏感密码、密钥加密存储方案
安全·elasticsearch·ansible
鬼手点金2 小时前
提示注入:上下文安全的核心威胁
人工智能·安全·microsoft·机器学习·缓存·prompt
ScilogyHunter3 小时前
Hercules系列安全MCU功能安全原理详解
java·单片机·安全·hercules
Data-Miner3 小时前
不本地部署,大模型怎么安全用?
大数据·人工智能·安全