☰
Metasploit后渗透实战:权限提升、持久化与横向移动核心思路
2026/10/14 22:22:54 网站建设 项目流程

1. 后渗透阶段的工作拆解与核心目标

1.1 拿到Meterpreter会话之后,真正的工作才刚开始

很多初学者在Kali里成功利用漏洞、看到meterpreter >提示符出现时,会觉得"目标已经拿下了"。实际上,我个人的经验是:利用漏洞拿到会话,只是整个渗透测试流程里最"运气"的一步,后渗透才是真正拉开差距的环节。

后渗透阶段(Post-Exploitation)处理的不是一个单一问题,而是一连串问题:当前拿到了什么权限?这台机器在目标网络里处于什么位置?系统里有没有其他有价值的信息?能否把普通用户权限提升到管理员或SYSTEM?在被防守方发现之前,能不能完成数据收集和权限维持?这些问题环环相扣,任何一个环节没想清楚,都可能让前面拿到的会话白白浪费掉。

Metasploit Framework 之所以把后渗透做得这么重,是因为它不只是给你一个shell就结束了,而是把大量常见操作封装成了模块和命令。以 Meterpreter 为例,它能直接在内存里做信息收集、文件操作、权限提升、进程迁移等工作,不用像传统方式那样反复上传工具,这大大降低了被杀毒软件发现的概率。这也是后渗透阶段学习笔记里非常重要的一条主线:少碰磁盘、多用内存操作、一切以隐蔽为前提。

1.2 后渗透阶段的基本工作流

我习惯把后渗透阶段分成五个模块,每次拿到会话后都会按这个顺序过一遍:

  1. 环境识别:查看系统版本、当前用户、网络连接、进程列表,确认自己在哪、有什么权限。
  2. 信息收集:抓取系统内敏感文件、用户密码哈希、浏览器记录、WiFi密码等,评估数据价值。
  3. 权限提升:从普通用户提升到管理员或SYSTEM,为后续操作解锁更高权限。
  4. 权限维持:通过后门模块或系统机制确保会话断开后还能重新拿回来。
  5. 横向移动:以当前机器为跳板,探测内网其他主机,扩大控制范围。

这篇笔记主要讲后渗透阶段(二),所以重点放在后面三个环节:权限提升、权限维持和横向移动。基础的环境识别和信息收集,属于后渗透(一)的内容,我在这里就简单带过。建议大家在实际练习时也按这个顺序来,不要一拿到shell就急着上传工具到处翻文件,先冷静下来把环境摸清楚,往往能少踩很多坑。


2. 会话管理与基础信息收集的深耕

2.1 session的查看、后台化和切换

进入后渗透阶段,一个很容易被忽略的问题就是会话管理。当你同时维持着多个目标机器的会话时,要是没有管理好,很容易混乱。

实际操作中,常用到这样几条命令:

# 在当前Meterpreter会话中查看所有活动会话 sessions # 将会话转入后台,回到msf6主控端 background # 重新回到某个后台会话 sessions -i 3

关于编号要提醒一句:sessions命令列出的编号是动态分配的,后台化之后不会重新排序。如果你同时开着五六个会话,建议用sessions -i 编号切换前,先看一眼列表,别凭记忆硬点。

还有一个非常实用的技巧:给会话设置注释和排序,方便后期维护。

# 给会话加上备注,有助于区分不同目标 sessions -n 3 "win7-办公区-10.10.14.5"

实际测试中,这个备注功能特别有用。尤其是横向移动之后,你手上可能有十几个会话,没有备注的话,过半小时你自己都会忘了每个会话对应哪台机器。

2.2 系统信息与网络信息收集的组合拳

进入 Meterpreter 后,我一般先用sysinfo确认系统基本信息:

sysinfo getuid ipconfig

这三条命令的顺序很讲究。sysinfo告诉你系统的版本、架构和 Meterpreter 类型,这决定了后续提权和利用模块的选择方向。getuid确认当前权限是谁,是普通用户还是管理员。ipconfig则能让你快速了解这台机器有几张网卡、接入了哪些网段,这对判断横向移动路径很关键。

举个例子,我在一次授权测试中碰到一台双网卡 Windows 主机,一张网卡连办公网,一张网卡连服务器网段。本来以为只是个普通工作站,看到第二张网卡之后才确定这是一台跳板机,后续横向移动的路线立刻清晰了很多。这种拓扑判断,靠的就是后渗透第一步的信息收集。

除了这些基础命令,arp命令也能提供不少线索:

arp route

arp能看到当前主机最近通信过的内网IP,很多时候比扫描器更快帮你圈定活跃主机范围。而route则展示路由表,可以判断是否有多层网络。

2.3 键盘记录与屏幕截图的正确打开方式

后渗透阶段常见的两个功能是键盘记录(keylog)和屏幕截图(screenshot)。

keyscan_start keyscan_dump keyscan_stop
screenshot

这两个功能很容易操作,但有几个细节一定要掌握:

键盘记录必须迁移到目标用户所在进程才能生效。比如你拿到的会话跑在某个服务进程下,而这个服务进程是以SYSTEM权限运行的,那么敲键盘的用户可能根本不在这个会话的上下文里。处理办法是先在ps命令里找到用户正在使用的进程,比如explorer.exe,然后用migrate迁移过去,再开始键盘记录。

屏幕截图同样受制于会话所在会话层。如果你迁移到了SYSTEM服务进程中,截出来的往往是一个空白桌面或者锁屏界面,因为服务进程不持有用户的桌面交互句柄。想要截到真实的用户桌面,需要迁移到该用户启动的进程里。

有一次我在授权的测试环境里,迁移到explorer.exe之后截图,意外看到桌面上开着客户的内部运维系统页面,上面还有登录账户名。这个信息价值比一堆密码哈希还高。所以你看,后渗透阶段的操作顺序不是随便定的,每一步之间都有因果关系。


3. 权限提升的思路与踩坑记录

3.1 getsystem与令牌模拟的核心区别

提到提权,Metasploit 里最常用的就是getsystem:

getsystem

很多人以为getsystem是直接利用某个系统漏洞打入SYSTEM账户,其实它的底层原理是结合了几种令牌模拟和进程注入技术,强行把当前会话权限提升到NT AUTHORITY/SYSTEM。你可以简单把它理解成Metasploit自带的一条"提权捷径"。

但getsystem有时候会失败,原因很常见:当前用户不是管理员,或者系统不允许当前进程开启调试权限。遇到这种情况,我的建议是先别急着换提权漏洞,先把用户切换到管理员再说。

令牌模拟(Token Impersonation)则是一个更精细的操作。Metasploit 的steal_token命令可以从某个进程中窃取令牌:

ps steal_token 1234 drop_token

这条命令的原理是,Windows系统中某些进程会携带更高权限的访问令牌,如果你能拿到这个令牌,就可以以令牌所代表的身份执行操作。这个过程不需要密码,也不需要加载驱动,是典型的令牌伪造利用。

不过要特别注意:窃取令牌成功之后,当前getuid显示的不一定是SYSTEM。有时候拿到的是一个域管理员令牌,但Windows会在特定操作时才验证令牌权限。所以窃取令牌后,尽量顺手执行一条getuid或者尝试访问受保护目录,验证一下当前身份是否真的有效。

3.2 内核提权模块的挑选逻辑

当getsystem和令牌模拟都失败时,就得考虑内核漏洞提权了。Metasploit 里有大量exploit/windows/local/目录下的模块,但千万不要看到哪个模块就乱跑,很多模块会直接把目标系统打崩溃。

我挑选提权模块时,遵循三条原则:

  1. 先看系统版本和补丁情况。在目标主机上执行systeminfo,查看安装的补丁编号,然后去模块描述里确认是否覆盖该补丁。
  2. 优先使用经过广泛验证的模块。一些著名提权模块的兼容性写在描述里,比如"tested on Windows 7 x64",这类模块相对可靠。
  3. 使用前先拍快照或备好恢复方案。尤其是物理机和生产机器,提权失败导致蓝屏的案例太多了。

举个例子,对一台打了补丁的 Windows 10 机器,你还在跑针对旧版本系统的提权模块,大概率会失败,甚至可能让目标进程崩溃,直接把会话整没了。这是典型的"操作前不看版本"的翻车现场。

还有一个小技巧:提权前先执行getsystem,如果失败,用background把当前会话暂时后台化,然后通过search exploit/windows/local 提权关键词来搜索匹配模块,选好模块后再sessions -i回来执行。这样不至于在主控台和会话之间来回切换得手忙脚乱。

3.3 提权成功后的验证

提权成功不是终点,必须验证当前权限身份:

getuid

正常情况下应该显示类似NT AUTHORITY\SYSTEM的信息。如果只是Administrator,说明你拿到的是管理员但不是系统最高权限,很多操作依然受限。

提权完成之后,别忘了重新查看一下sysinfo。有些提权漏洞会改变 Token 权限,可能导致之前的网络连接、SMB共享访问都失效。另外,某些提权操作会被防病毒软件记录行为特征,所以提权完成后最好不要在原会话里立刻做大规模文件操作,先快速验证权限,然后进入下一阶段。

提示:任何提权操作都存在系统崩溃风险,我只建议在授权的测试环境和虚拟机靶场里操作。生产环境必须提前获得书面授权,并做好出现蓝屏和重启的应急预案。


4. 持久化与痕迹清理:从攻击链路看系统薄弱点

4.1 持久化到底在解决什么问题

一次完整的渗透测试,会话丢失是大概率事件。目标机器重启、网络断开、杀毒软件查杀进程,都可能导致 Meterpreter 会话失效。持久化的目的是在会话丢失后,你依然能通过某种方式重新获得访问权。

Metasploit 的持久化模块,本质上是往目标系统写入一段可以被周期性执行的载荷,常见的方式包括注册表自启动、服务创建、计划任务、启动目录脚本等。

4.2 常见持久化模块及其原理

Metasploit 中有几个典型的持久化模块:

  • exploit/windows/local/persistence:通过注册表或启动目录实现自启动。
  • post/windows/manage/persistence_exe:上传一个可执行文件并设置自启动项。
  • exploit/windows/local/scheduler:通过计划任务定时触发载荷。

以注册表持久化为例,它的执行流程大致是:把载荷放到指定目录,然后在注册表Run键下写入一条指向载荷的启动项。这样每次用户登录,载荷就会跟着启动,回连到你的监听端口。

但持久化模块的使用在真实测试中争议很大。一方面是稳定性问题,运行一段时间后目标机器可能因为载荷兼容性出问题;另一方面,这本质上是留后门行为,在授权范围外使用是违法的。所以我对这个模块的建议是:了解原理、在本地虚拟机里做验证、从防御角度理解注册表和计划任务里哪些位置是攻击者最常埋雷的地方。

应急响应的朋友可以把这些位置当成排查重点:注册表HKCU\Software\Microsoft\Windows\CurrentVersion\Run、服务列表、计划任务、启动文件夹,都是后门高频藏身处。

4.3 防御视角看痕迹清理

从攻击者角度看的痕迹清理,本质上就是对抗防御方的日志分析。Metasploit 里没有一条"一键清除所有痕迹"的命令,因为日志分散在系统事件、应用日志、网络连接记录和文件访问记录等多个位置。

实操中需要关注的痕迹包括:

  • timestomp命令修改文件时间戳,避免被时间线分析发现。
  • 删除临时上传的工具文件。
  • 清理端口监听痕迹,避免留下异常连接信息。

但从防御方来看,真正的重点是:Windows 的很多行为痕迹不是简单删除就能抹干净的。比如 PowerShell 的历史记录、内存中的执行痕迹、WMI 事件日志,都会留下蛛丝马迹。所以我的立场是,在学习阶段把"痕迹清理"理解为"如何理解攻击者的操作会在哪些层面留下数据",这对蓝队和应急响应更有价值。


5. 横向移动的常见姿势与实验建议

5.1 pass the hash与psexec的原理

拿到一台主机的管理员权限后,下一步往往就是横向移动。Metasploit 中最经典的手段是pass the hash(哈希传递)配合psexec模块。

原理要先说清楚:Windows 的 NTLM 认证允许直接使用密码哈希进行网络身份验证,而不需要明文密码。你只要从一台机器上抓到了管理员账户的 NTLM 哈希,就可以拿着这个哈希去访问同一内网里的其他机器,只要那台机器上存在相同账户且开启了 SMB 服务。

Metasploit 的调用方式大致是:

use exploit/windows/smb/psexec set RHOSTS 内网目标IP set SMBDomain 域名 set SMBUser 管理员账号 set SMBPass 哈希值 run

这个模块会把一个服务二进制上传到目标机器,并通过 SMB 创建服务、执行载荷,最后删除服务。整个过程会留下明显的事件日志,属于"容易踩坑也容易被发现"的技术。

5.2 令牌窃取在域环境中的作用

在域环境下,横向移动还有一个更隐蔽的手段是令牌窃取。如果你在一台机器上的会话是SYSTEM权限,且这台机器上某位域管理员恰好在线,那么它的登录令牌可能就留在当前机器的内存里。通过steal_token把这个令牌偷过来,你就能以域管理员的身份去访问域内其他机器。

这个操作的难点在于:你要先找到持有高价值令牌的进程。实操时可以关注那些以管理员用户身份运行的进程,比如explorer.exe、mmc.exe等。

要注意的是,窃取到的令牌不一定能立刻用于所有场景。有些服务在认证时会要求重新验证凭据,令牌就不起作用。所以我建议遇到令牌窃取成功但访问失败的情况,冷静退回一步,改用哈希传递。

5.3 横向移动的实验建议

横向移动想练好,单机靶场是不够的,至少需要三台以上的虚拟机组成一个小内网。推荐的结构是:

  • 一台 Kali 作为攻击机。
  • 一台 Windows 7 作为第一跳板。
  • 一台 Windows Server 作为域控或业务主机。

如果你没有现成的环境,用本地虚拟机软件手动搭建即可。网络设成 NAT 或自定义虚拟网段,确保三台机器能互通。整个实验过程中,建议开一个抓包工具,在跳板机上抓一下 SMB 流量,看看哈希传递的过程到底在网络上长什么样。这样你对原理的理解会扎实很多。

注意:横向移动操作极易触发安全设备告警,这种能力只应在授权渗透测试或自建靶场中使用。在未经授权的情况下扫描或尝试登录其他主机,哪怕只是探测,都已经越界。


6. 常见问题与排查技巧速查表

6.1 会话无故掉线

这是后渗透阶段最常遇到的问题。会话掉线的原因通常有三个:

  1. 目标机器重启:这是最常见的,很多提权模块或持久化操作容易引起蓝屏。
  2. 网络断开:如果你是通过远程办公网络做授权测试,中间任意一跳断开都会导致会话中断。
  3. 杀毒软件拦截:Meterpreter 的流量特征和行为特征被安全软件识别,直接杀掉会话进程。

排查思路:先用ping或curl确认目标主机是否在线,如果在线但会话没了,那大概率是载荷被干掉了。此时可以重新利用漏洞建立会话,但这次建议先做进程迁移,尽量迁移到常见的系统进程里。

6.2 杀毒软件拦住了所有操作

真实环境中基本不可能完全绕过杀毒软件,Metasploit 的原始载荷很容易被查杀。我的经验是:

  • 不要在目标机器上大量写入文件,优先使用upload到临时目录,用后立即删除。
  • 尽量避免使用默认的windows/meterpreter/reverse_tcp载荷,可以换成基于 HTTPS 的载荷,通信流量更像正常网页访问。
  • 实际操作中,大量操作可以通过 PowerShell 或内存执行来完成,减少落地文件。

关于免杀,我不展开细讲,因为它是一个巨大的独立领域,而且容易走偏。初学者只需要记住:如果你的测试环境里装的是真实杀毒软件,先用最简单的载荷确认连通性,再考虑进一步操作,别在提权和横向移动上浪费太多时间——也许杀毒才是你真正的对手。

6.3 提权失败之后的下一步

提权失败不要死磕同一个方法。我的排查顺序是:

  1. 确认当前getuid的结果,是否只是普通用户。
  2. 查看系统版本和补丁,搜索匹配的本地提权模块。
  3. 尝试令牌窃取和getsystem的组合。
  4. 如果都失败,退回信息收集阶段,看看目标系统里有没有保存的明文密码、脚本中的硬编码凭据、浏览器保存的密码等。

很多时候,提权失败不是因为技术不到位,而是因为你从一开始就没找到最有价值的信息入口。后渗透阶段本质上是一个信息驱动的过程,系统给的信息越多,你的下一步就越清晰。


最后再分享一个我自己的体会:学 Metasploit 后渗透,最忌讳的就是只记命令不练场景。命令敲一百遍,不如在靶场里完整跑一遍"信息收集-提权-横向移动-痕迹清理"的流程。把每个模块为什么这么设计、在真实环境里会遇到什么问题搞清楚,比背住一堆模块路径有用得多。后面这个系列的笔记,我会继续往里填实际的靶场操作记录和踩坑过程,欢迎一起交流。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询