Sdclt.exe 是 Windows 內建的「備份與還原」功能的主要執行檔,
位置放在 C:\Windows\System32,
因為本身帶數位簽章,而且有 Auto-elevate,
所以常常會被拿來當作攻擊的工具,
今天我們就一起來看看他的用法吧。
什麼是登錄碼 Registry?
先來看看什麼是登錄碼吧,
我們可以把登錄碼當成是整個 OS 的中央大腦,
他可以存電腦上幾乎所有東西的設定、選項,
主要功能:
- 硬體設定:紀錄有哪些硬體,像是顯示卡,USB 裝置,還有它們的驅動跟設定。
- 軟體設定:當安裝一個程式的時候,他會把自己的資訊寫進 Registry,包括安裝路徑、版本號,還有檔案關聯(像是 .docx 要用哪個程式打開)
- 使用者設定:每個使用者帳號都有自己的設定區塊,可以存像是桌布、視窗顏色、程式個人設定等內容。
- 作業系統設定:Windows 自身的行為也會存在這邊。
登錄碼結構:
- 機碼(Keys):可以想成是資料夾,是一個可以包含其他機碼(形成子資料夾)或鍵值的容器。
- 鍵值(Values):可以想成是檔案,每個 Value 都有一個名稱、資料類型、具體值。
五個主要的根目錄:
上面我們有看到類比成資料夾、檔案的相應關係,
其實如果我們更深入去看的話,
整個 Registry 的最頂層有五個主要的根 Keys
HKEY_CLASSES_ROOT(HKCR):主要管理檔案關聯和 COM 物件。HKEY_CURRENT_USER(HKCU):儲存目前登入使用者的個人設定。這就是我們這次攻擊利用的地方,因為改這邊不需要管理員權限。HKEY_LOCAL_MACHINE(HKLM):儲存與本機電腦相關的設定,對所有使用者都有效。修改這裡需要管理員權限。HKEY_USERS(HKU):儲存了電腦上所有使用者帳號的設定檔。HKEY_CURRENT_USER 其實只是 HKEY_USERS 下目前使用者設定的一個快捷方式。HKEY_CURRENT_CONFIG(HKCC):儲存目前硬體設定檔的資訊。
來看一下 Demo 吧
sdclt.exe 的 UAC Bypass,其實就是一種 Registry Hijacking,
用 Windows Shell 的命令指派、委託機制來達成攻擊,
而且我們最主要利用的就是上面提到的 HKCU。
攻擊核心
我們要修改的是這個路徑:
HKEY_CURRENT_USER\Software\Classes\Folder\shell\open\command
拆開來看一下:
HKEY_CURRENT_USER(HKCU): 重點部分。這是專屬當前登入使用者的 Registry 區域。對這個區域的任何修改完全不需要系統管理員權限,我們就可以在一個低權限的 Shell 中完成所有準備工作。Software\Classes: HKCU 中用來覆蓋系統級別(HKEY_LOCAL_MACHINE\Software\Classes)檔案關聯和 COM 物件設定的地方。系統在尋找如何處理某個檔案類型時,會優先檢查目前使用者的這個路徑。Folder\shell\open\command: 定義當系統對一個資料夾執行「開啟」動作的時候,應該執行的命令。正常情況打開資料夾是由 explorer.exe 處理,但我們可以劫持這個行為。
兩個關鍵 Values
等等攻擊的過程,我們主要會設定兩個 Value:
- (Default) 預設值:
- 作用:裡面原本是存要執行的命令,等等我們會把它改成 cmd.exe,所以只要有「開啟」的動作產生的時候,就會執行 cmd。
- DelegateExecute:
- 作用:正常情況下這個值會存一個 COM 物件的 CLSID,Windows Shell 看到它存在時,就不會直接執行 (Default) 值裡的命令,而是把任務委派給對應的 COM 物件去處理。我們刻意把它設成空字串,讓委派找不到目標,Shell 就會回頭直接執行 (Default) 裡的命令。
- 提權說明:因為 sdclt.exe 本身是 auto-elevate(以高完整性啟動、不彈 UAC),由它來讀取這個被劫持的機碼並觸發執行時,(Default) 裡的 cmd 就會繼承這個高權限了
攻擊步驟
Step 1: Registry Hijacking
New-Item "HKCU:\Software\Classes\Folder\shell\open\command" -Force
Set-ItemProperty "HKCU:\Software\Classes\Folder\shell\open\command" -Name "(Default)" -Value "cmd.exe" -Force
Set-ItemProperty "HKCU:\Software\Classes\Folder\shell\open\command" -Name "DelegateExecute" -Value "" -Force
Step 2: 去觸發開啟動作,讓 Default 裡的 Payload 出來
sdclt.exe

應該就會發現不會有任何 UAC 視窗跳出來,
然後有帶 admin 權限的 cmd 就跳出來了,
這樣我們就成功 UAC Bypass 了。
補充:這個手法主要適用於 Windows 10 上的特定版本。sdclt.exe 的 manifest 在 Windows 10 才標記為 auto-elevate(Windows 7 的 requestedExecutionLevel 是 AsInvoker),而且微軟在後續的 Windows 版本已陸續修復這類透過 HKCU 檔案關聯劫持 auto-elevate 程式的手法,在已更新的 Windows 11 上通常無法復現。
結論!
這邊也就整理一下 Sdclt.exe 在攻擊方面的一些優勢:
- 不需要下載任何東西
- 不需要網路連線
- 使用內建 Windows 工具,不易被過濾