Metasploit 最让人上瘾的洞攻地方,不是洞攻它那两千多个模块,而是洞攻你敲下 exploit 回车后,目标机器真的洞攻弹回一个 shell 的那种感觉。我第一次用 msf 打穿一台 Windows Server 2008 的洞攻 MS17-010,整个过程不到三分钟。洞攻那台机器没打补丁,洞攻445 端口敞着,洞攻msfconsole 里 use exploit/windows/smb/ms17_010_eternalblue,洞攻设好 RHOSTS 和 payload,洞攻run。洞攻屏幕滚了几行,洞攻然后一个 Meterpreter 会话就挂在那儿了。洞攻当时有点恍惚——这玩意儿比 SSH 还顺畅。洞攻
但 msf 不是洞攻魔法。它的本质是一个漏洞利用框架,把 exp 代码、payload 投递、编码器、后渗透模块串成流水线。真正决定成败的,是你对目标环境判断得准不准。端口扫出来 445 开着,不代表就能打;系统版本、补丁级别、防火墙规则、甚至目标是不是在域里,都会影响你选哪个模块、用哪种 payload。我见过有人对着 Windows 10 1809 硬打 EternalBlue,打了半小时没反应,最后发现那台机器压根不在漏洞影响范围内。
Payload 的选择比 exploit 本身更磨人。reverse_tcp 最常用,但目标出站流量被限制时就废了。bind_tcp 要求目标开放入站端口,NAT 后面基本没戏。meterpreter 功能强,可它体积大、特征明显,碰上带 EDR 的环境,刚落地就被掐。这时候得换 shell,或者用 msfvenom 自己生成编码过的 payload,再配合 handler 接回来。有一次打一台内网机器,reverse_tcp 死活连不上,换成 reverse_https 走 443 端口,直接穿透了出口防火墙。那种感觉就像拿错钥匙拧了半天,换一把,咔哒一声。
后渗透才是 msf 真正拉开差距的地方。拿到 meterpreter 之后,hashdump 抓本地哈希,getsystem 提权,migrate 注入到稳定进程,portfwd 做内网穿透。这些命令单看没什么,串起来就是一条完整的攻击链。我习惯拿到 shell 先 sysinfo,确认权限和系统版本,再决定下一步。如果是域内机器,load kiwi 抓内存里的明文密码,往往能直接拿到域管凭证。有一次从一台普通员工机抓到域管哈希,再 psexec 横向到域控,整个过程没写一行 exp 代码,全是 msf 现成模块。
msf 的模块更新速度是个双刃剑。新 exp 进来快,但质量参差不齐。有些模块作者自己都没在真实环境测过,跑起来各种报错。我养成了一个习惯:用之前先 info 看模块描述和参考链接,确认影响版本和利用条件。碰到不熟的模块,先在本地虚拟机试一遍。有次用某个 WebLogic 的 exp,本地打没问题,到目标环境就卡在反序列化那步,后来发现是目标 JDK 版本差异导致 gadget 链断了。这种坑,文档里不会写,只能自己踩。
最后说一句实在的:msf 再强,也只是工具。它帮你省去写 exp 和搭环境的功夫,但目标踩点、漏洞判断、权限维持、痕迹清理,每一步都得自己动脑子。我见过太多人对着 msfconsole 一顿 run,打不穿就换模块,换到最后也不知道为什么失败。真正好用的不是那两千个模块,是你对目标那台机器的理解。