第四章:信息收集与侦察——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里。
systemctl start postgresql,然后 msfdb init。这样Nmap扫描结果可以直接存到数据库里,后续用 hosts、services 命令就能查。
为什么要这么做?因为一旦数据进了数据库,你就可以用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的模块做针对性利用。
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,那基本上就是个大靶子。
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 知识体系结构图
为了让大家更直观地理解本章的知识脉络,我画了一张图:
这张图把整个信息收集的流程串起来了。从核心目标出发,通过三大手段,最终输出一份完整的目标画像。你想想看,有了这份画像,后面的漏洞利用是不是就有的放矢了?
4.6 本章小结
信息收集不是一蹴而就的事。我个人经验是,宁可多花半小时做侦察,也不要急着去打。因为很多时候,你漏掉的一个端口或者一个服务版本,可能就是整个渗透测试的突破口。
最后提醒一句:扫描行为本身是有风险的。在真实环境中,一定要获得授权。我曾经见过一个测试人员,因为扫描频率太高,被客户的安全团队直接报警抓了现行。嗯,这可不是什么好体验。
好了,这一章就到这里。记住,信息收集越充分,后面的路就越顺。
公众号:蓝海资料掘金营,微信deep3321