|
很多人以为Metasploit只是漏洞个拿shell的工具,其实它内置的扫描扫描模块足够应付日常渗透测试里八成以上的信息收集工作。上周帮朋友看一台暴露在公网的漏洞Jenkins,我没急着上Nmap,扫描直接开了msfconsole,漏洞用auxiliary/scanner/http/jenkins_enum跑了一遍,扫描三分钟不到就列出了版本号和插件列表——比手动翻页面快得多。漏洞 Metasploit的扫描扫描模块集中在auxiliary/scanner目录下,按协议分门别类:http、漏洞smb、扫描ssh、漏洞ftp、扫描mysql……每个模块干的漏洞事很单一,但组合起来覆盖面相当广。扫描拿SMB来说,漏洞smb_version模块能直接读出目标Windows的精确版本、主机名、域信息,有时候连补丁级别都能猜个大概。这比Nmap的smb-os-discovery脚本返回的结果更细,因为Metasploit的Ruby代码里对SMB协议指纹的解析写得更“较真”。 实际操作流程不复杂。启动msfconsole,use auxiliary/scanner/smb/smb_version,然后set RHOSTS 192.168.1.0/24,run。它会并发扫描整个C段,结果直接标出每台机器的系统版本。我习惯把THREADS调到10左右,再高容易触发目标IDS,尤其在内网里遇到老旧的Windows Server 2003,线程一多SMB服务直接卡死,别问我怎么知道的。 HTTP扫描模块更实用。http_version能抓Server头,http_header能枚举不安全的HTTP方法,dir_scanner自带一份精简字典,虽然比不上DirBuster的字典量,但胜在跟Metasploit的数据库联动——扫出来的路径直接存进notes里,后面做漏洞利用时不用再翻记录。有个细节:dir_scanner默认只请求HEAD方法,遇到只响应GET的站点会漏报,得手动把VHOST和RPORT设对,再改HTTP_METHOD。 数据库支持是Metasploit扫描的隐藏优势。启动postgresql,db_connect连上,所有扫描结果自动入库。跑完db_nmap再跑services命令,端口、服务、版本一目了然。有次做内网横向,我先用scanner/discovery/udp_sweep摸了一遍,再针对性跑scanner/mssql/mssql_ping,最后在services里直接筛出所有1433端口对应的主机,省了至少半小时手工整理。 但别把Metasploit当万能扫描器。它的指纹库更新频率不如Nexpose或Nessus,碰到新出的中间件漏洞,往往要等社区提交模块。而且auxiliary模块的误报率不低,尤其http_*系列,一个自定义的404页面就能骗过dir_scanner。我的做法是:Metasploit扫一遍拿初步结果,再用Nmap的NSE脚本交叉验证,两边都报的才重点跟进。 速度方面,Ruby的解释执行确实拖后腿。同样扫一个C段的445端口,smb_version比nmap -p445 --script smb-os-discovery慢将近一倍。但Metasploit的好处是扫完直接能use exploit/windows/smb/ms17_010_eternalblue,不用切换工具。这种“扫描-利用”一条龙在打CTF或者做授权渗透时特别顺手,省去了复制粘贴IP的功夫。 最后提一句db_autopwn。这插件早被移除了,现在网上还能搜到老教程教人用,别信。替代方案是analyze命令,配合services -p 445过滤,手动挑模块更可控。扫描这事,自动化程度越高,漏掉的关键信息往往越多。 |