第四章:信息收集与侦察——Nmap集成使用、服务扫描、版本探测与Auxiliary模块实战

各位同学,欢迎来到第四章。说实话,信息收集这一步,在我眼里比后面真正的漏洞利用还要关键。你想想看,你连目标跑的是什么服务、什么版本都不知道,拿什么去打?盲打那是电影里的情节,现实中的渗透测试,九成时间都在侦察。

我个人习惯,拿到一个目标IP,第一件事不是开Metasploit,而是先跑一遍Nmap。为什么?因为Nmap就像你的眼睛,它能告诉你目标开了哪些端口、跑了什么服务、甚至能猜出操作系统。今天我们就来聊聊,怎么把Nmap和Metasploit结合起来,把信息收集做到极致。

4.1 Nmap集成使用:从命令行到MSF内部

很多新手喜欢在终端里跑Nmap,然后把结果手动复制到Metasploit里。嗯,这当然可以,但效率太低。Metasploit其实内置了Nmap的集成接口,你可以在msfconsole里直接调用。

先看个最简单的例子:

msf6 > nmap -sS -sV -O 192.168.1.100

这条命令会执行一次SYN扫描、版本探测和操作系统识别。注意,这里的nmap是msfconsole内部封装好的命令,它会调用系统安装的Nmap,然后把结果直接显示在MSF里。

我的小技巧: 如果你想让Nmap结果自动导入到Metasploit的数据库中,记得先启动数据库服务。我个人习惯在启动msfconsole前先执行 systemctl start postgresql,然后 msfdb init。这样Nmap扫描结果可以直接存到数据库里,后续用 hostsservices 命令就能查。

为什么要这么做?因为一旦数据进了数据库,你就可以用Metasploit的查询功能快速筛选目标。比如你发现了一堆主机,只想看那些开了445端口的,一条命令就搞定。

4.2 服务扫描与版本探测:别只看端口号

端口号只是线索,真正的宝藏是服务版本。我记得有一次项目,客户说他们的服务器很安全,我扫了一圈发现开了80端口,但版本探测显示是Apache 2.2.15。嗯,这个版本有个著名的mod_cgi漏洞。你看,如果我只看了端口号,可能就错过了。

Nmap的版本探测靠的是-sV参数。它会尝试连接目标端口,发送一些特定的探测包,然后根据响应来匹配服务指纹库。Metasploit里也有类似的模块,比如:

msf6 > use auxiliary/scanner/portscan/tcp
msf6 > set RHOSTS 192.168.1.0/24
msf6 > set PORTS 1-1000
msf6 > run

这个模块会做TCP端口扫描,但说实话,它的速度和灵活性不如Nmap。所以我通常的做法是:先用Nmap做全端口扫描和版本探测,把结果存到数据库,然后再用Metasploit的模块做针对性利用。

核心要点: 版本探测不是万能的。Nmap的指纹库虽然大,但总有识别不了的服务。遇到这种情况,我建议你手动连接一下目标端口,看看banner信息。比如用 nc -nv 192.168.1.100 22,有时候banner会直接告诉你版本号。

4.3 使用Auxiliary模块进行目标信息收集

Metasploit的Auxiliary模块,说白了就是一堆现成的信息收集工具。你不需要自己写脚本,直接加载模块、设置参数、运行就行。我个人觉得,这是Metasploit最实用的功能之一。

举个例子,你想收集目标主机的SNMP信息:

msf6 > use auxiliary/scanner/snmp/snmp_enum
msf6 > set RHOSTS 192.168.1.100
msf6 > set COMMUNITY public
msf6 > run

这个模块会尝试用默认的SNMP团体字(public)去读取目标的信息。如果成功,你能拿到系统描述、运行时间、网络接口等一大堆数据。我曾经在一个项目中,靠这个模块发现了一台打印机的SNMP服务没关,直接读到了网络拓扑信息。

再比如,你想收集SMB信息:

msf6 > use auxiliary/scanner/smb/smb_version
msf6 > set RHOSTS 192.168.1.100
msf6 > run

这个模块会探测SMB服务的版本,还能告诉你是否支持SMB1、SMB2等协议。嗯,这里要注意,SMB1协议现在基本被视为安全漏洞了,如果目标还开着SMB1,那基本上就是个大靶子。

避坑指南: 我曾经在一次内网渗透中,用Auxiliary模块扫描了所有主机,结果触发了IDS告警。原因是扫描频率太高,被安全设备识别为扫描行为。所以,如果你在真实环境中做测试,记得调整线程数。比如在模块里设置 set THREADS 1,慢一点但更隐蔽。

4.4 实战案例:一次完整的信息收集流程

好了,理论讲完了,我们来看一个完整的实战流程。假设你拿到了一个目标IP:10.10.10.5。

第一步,用Nmap做全端口扫描和版本探测:

nmap -sS -sV -O -p- 10.10.10.5 -oA target_scan

这里-p-表示扫描所有65535个端口,-oA表示输出所有格式的结果。扫描结果会保存到target_scan文件中。

第二步,把结果导入Metasploit数据库:

msf6 > db_import target_scan.xml

第三步,查看收集到的信息:

msf6 > hosts
msf6 > services

第四步,针对发现的服务,使用对应的Auxiliary模块做深度探测。比如发现开了3306端口(MySQL),那就用:

msf6 > use auxiliary/scanner/mysql/mysql_version
msf6 > set RHOSTS 10.10.10.5
msf6 > run

如果发现开了21端口(FTP),那就试试匿名登录:

msf6 > use auxiliary/scanner/ftp/anonymous
msf6 > set RHOSTS 10.10.10.5
msf6 > run

你看,整个流程下来,你对目标已经有了比较全面的了解。接下来才是真正的漏洞利用阶段。

4.5 知识体系结构图

为了让大家更直观地理解本章的知识脉络,我画了一张图:

信息收集与侦察知识体系 信息收集核心目标 Nmap集成使用 服务扫描与版本探测 Auxiliary模块 Nmap集成 • msfconsole内直接调用nmap • 结果自动导入数据库 • 结合hosts/services命令查询 服务扫描与版本探测 • -sV参数进行版本指纹匹配 • 手动banner抓取补充 • 端口号+版本号双重确认 Auxiliary模块 • SNMP枚举模块 • SMB版本探测模块 • MySQL/FTP等专项模块 输出:目标IP、开放端口、服务版本、操作系统、潜在漏洞 进入漏洞利用阶段

这张图把整个信息收集的流程串起来了。从核心目标出发,通过三大手段,最终输出一份完整的目标画像。你想想看,有了这份画像,后面的漏洞利用是不是就有的放矢了?

4.6 本章小结

信息收集不是一蹴而就的事。我个人经验是,宁可多花半小时做侦察,也不要急着去打。因为很多时候,你漏掉的一个端口或者一个服务版本,可能就是整个渗透测试的突破口。

最后提醒一句:扫描行为本身是有风险的。在真实环境中,一定要获得授权。我曾经见过一个测试人员,因为扫描频率太高,被客户的安全团队直接报警抓了现行。嗯,这可不是什么好体验。

好了,这一章就到这里。记住,信息收集越充分,后面的路就越顺。


公众号:蓝海资料掘金营,微信deep3321