您好,登錄后才能下訂單哦!
怎么實現Windows Service Tracing中的權限提升CVE-2020-0668漏洞的分析 ,相信很多沒有經驗的人對此束手無策,為此本文總結了問題出現的原因和解決方法,通過這篇文章希望你能解決這個問題。
我們將討論Windows Service Tracing中的一個任意文件移動漏洞。在我們的測試過程中,該漏洞將影響從Windows Vista至Windows 10的所有版本操作系統,但是Windows XP也很有可能會受此漏洞影響,因為XP系統中也有這項功能。
Service Tracing這項服務在Windows平臺上歷史悠久,早在XP就已經引入了這個功能。該功能可以給分析人員提供當前正在運行的服務及模塊的相關基本調試信息,任意本地用戶都可以通過編輯注冊表鍵值(HKLM\SOFTWARE\Microsoft\Tracing
)來對其進行配置。
在Windows中,每一個服務或模塊都對應了一個注冊表鍵,每一個鍵包含六個值,我們主要針對其中的三個值,即EnableFileTracing
(啟用/禁用“tracing”)、FileDirectory
(設置日志輸出文件的地址)和MaxFileSize
(設置日志文件的最大文件大小)。
EnableFileTracing啟用之后,目標服務將會開始向我們所選擇的文件路徑寫入其日志文件,當日志文件超過MaxFileSize
的大小時,它將會被移動(即將原本的.LOG后綴替換為.OLD),并在原處創建一個新的日志文件。
安全研究人員James Forshaw曾發布過一個符號鏈接測試工具,漏洞利用也非常簡單。我們只需要將目標目錄設置為掛載點,指向\RPC Control對象目錄,然后創建如下2個符號鏈接即可:
1、創建一個從MODULE.LOG到我們某個文件的符號鏈接(該文件大小必須大于
MaxFileSize
);2、創建一個從MODULE.OLD到系統任意文件的符號鏈接,例如“
C:\Windows\System32\WindowsCoreDeviceInfo.dll
”。
最后,我們需要以“NT AUTHORITY\SYSTEM
”權限運行的服務作為目標來觸發文件“移動”操作,然后利用Update Session Orchestrator
服務來獲取任意代碼執行權限。
文章開頭介紹過,任意本地用戶都可以通過編輯注冊表鍵值(HKLM\SOFTWARE\Microsoft\Tracing
)來配置Service Tracing功能。
此時,通過使用Windows Sysinternals工具集中的AccessChk工具,我們可以看到普通用戶擁有相關注冊表項下幾乎所有子項的讀寫權限:
接下來,我們將以RASTAPI
模塊為例來進行漏洞利用演示。IKEEXT服務會使用這個模塊,因此我們可以通過啟動任意VPN連接來觸發事件日志行為。相關注冊表鍵值的默認設置如下圖所示,其他的服務及模塊也使用的是完全相同的值:
從本地攻擊者的角度來看,下面的值會有利用價值:
參數名稱 | 值范圍 | 描述 |
---|---|---|
EnableFileTracing | 0 - 1 | 開始/停止寫入日志文件 |
FileDirectory | A String | 目錄的絕對路徑 |
MaxFileSize | 0x00000000 - 0xffffffff | 輸入日志文件的最大文件大小 |
通過設置這些值,我們可以做到:
1、將EnableFileTracing
修改為0或者1,強制特定服務或模塊開始/停止將調試信息寫入日志文件。
2、通過FileDirectory
設置日志文件的具體位置。
3、通過MaxFileSize
設置輸出文件大小的最大值。
需要注意的是,我們無法選擇輸出日志文件的名稱,日志文件名稱取決于被調用服務或模塊的名稱,但我們可以通過符號鏈接來解決這個問題。
MaxFileSize
為默認值在這個場景中,我們將路徑“C:\LOGS
”設置為日志文件的輸出目錄,并啟用“File Tracing
”功能:
接下來,我們需要生成一些事件來觸發目標服務開始寫入日志文件。這里我們可以使用rasdial
命令并配合PBK
文件來初始化一個VPN連接:
成功了!日志文件由“NT AUTHORITY\SYSTEM
”寫入,當前日志文件大小約為24KB:
MaxFileSize
- 自定義值在之前的測試中,我們可以看到輸出日志文件的大小約為24KB,因此這一次,我們要將MaxFileSize的值設置為“0x4000”(16384個字節大小),然后重新進行測試:
根據“Process Monitor
”捕捉到的事件,我們可以知道:
1、服務會獲取日志文件的基礎信息。我們可以看到EndOfFile
的偏移量為23,906,這也是目前文件的大小值。由于我們設定的最大文件大小值為16,384
個字節,因此這里系統會判斷沒有更多空間可用。
2、服務調用SetRenameInformationFile
,其中FileName=C:\LOGS\RASTAPI.OLD
。由于系統認為當前文件已滿,因此會將“C:\LOGS\RASTAPI.LOG
”更改為“C:\LOGS\RASTAPI.OLD
”。
3、服務創建一個新的“C:\LOGS\RASTAPI.LOG
”文件,開始寫入數據。
這里的文件移動操作由“NT AUTHORITY\SYSTEM
”完成。因此,我們可以利用這一點將用戶所有的文件移動到目標系統中的任意位置,比如說“C:\Windows\System32\
”。
1、創建(或拷貝)一個大小超過0x8000(32,768)個字節的文件。
2、創建一個新的目錄,例如“C:\EXPLOIT\mountpoint\
”,然后將其設置為一個指向“\RPC Control
”的掛載點。
3、創建下列符號鏈接:
\RPC Control\RASTAPI.LOG -> \??\C:\EXPLOIT\FakeDll.dll (owner = current user)\RPC Control\RASTAPI.OLD -> \??\C:\Windows\System32\WindowsCoreDeviceInfo.dll
4、在注冊表中配置下列值:
FileDirectory = C:\EXPLOIT\mountpointMaxFileSize = 0x8000 (32,768? bytes)EnableFileTracing = 1
5、使用Windows API中的RasDial
函數,觸發與RASTAPI
相關的事件。
6、觸發Update Session Orchestrator
服務,并利用“NT AUTHORITY\SYSTEM
”權限加載相關DLL。
看完上述內容,你們掌握怎么實現Windows Service Tracing中的權限提升CVE-2020-0668漏洞的分析 的方法了嗎?如果還想學到更多技能或想了解更多相關內容,歡迎關注億速云行業資訊頻道,感謝各位的閱讀!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。