1. 程式人生 > 其它 >Windows提權(二)——組策略與UAC

Windows提權(二)——組策略與UAC

Windows提權(二)

Windows提權總結(2)——繞過UAC與令牌竊取

接上回,本章我們主要介紹bypass UAC、組策略與令牌竊取提權

0x01 繞過 UAC 提權

1.1 UAC

UAC(User Account Control),使用者賬號控制UAC要求使用者在執行可能影響計算機執行的操作或在進行可能影響其他使用者的設定之前,擁有相應的許可權或者管理員密碼進行操作確認,防止惡意操作。也就是說一旦使用者允許啟動的應用程式通過UAC驗證,那麼這個程式也就有了管理員許可權。

UAC有如下四種設定要求:

  • 始終通知:這是最嚴格的設定,每當有程式需要使用高級別的許可權時都會提示本地使用者

  • 僅在程式試圖更改我的計算機時通知我:這是UAC的預設設定。當本地Windows程式要使用高級別的許可權時,不會通知使用者。但是,當第三方程式要使用高級別的許可權時,會提示本地使用者

  • 僅在程式試圖更改我的計算機時通知我(不降低桌面的亮度):與上一條設定的要求相同,但在提示使用者時不降低桌面的亮度

  • 從不提示:當用戶為系統管理員時,所有程式都會以最高許可權執行

需要UAC授權的操作有:

  • 配置Windows Update

  • 增加、刪除賬戶

  • 更改賬戶型別

  • 更改UAC的設定

  • 安裝ActiveX

  • 安裝、解除安裝程式

  • 安裝裝置驅動程式

  • 將檔案移動/複製到Program Files或Windows目錄下

  • 檢視其它使用者的資料夾

1.2 MSF利用

1.2.1 bypassuac模組

windows/local/bypassuac,此模組適用於Win7及以下系統

使用此模組進行提權條件是:

  • UAC為預設設定或以下
  • 會話許可權為管理員組成員

設定Session執行

這邊成功提權為我們的SYSTEM

1.2.2.RunAs模組

使用此模組進行提權條件是:

  • 需要點選UAC
  • 會話許可權為管理員組成員或知曉管理員密碼

先獲得一個管理員組成員會話許可權

將該會話用於windows/local/ask,此模組會上傳一個檔案進行提權,目標機器會彈出UAC,使用者假如點選“是”,則我們這邊提權成功

在使用RunAs模組時,使用EXE::Custom選項建立一個可執行檔案(需要進行免殺處理)

彈出UAC,點選是

此時會彈一個會話,直接getsystem就能提升為System許可權

1.3 基於白名單Bypass

有些系統程式是直接獲取管理員許可權,而不會觸發UAC彈框,這類程式稱為白名單程式。

比如:CompMgmtLauncher.exe,ComputerDefaults.exe

當我們執行執行ComputerDefaults.exe程式時,並沒有出現UAC彈窗,直接顯示計算機的設定介面。

我們可以通過Procmon工具監視啟動這個程序的操作

啟動過程如下

ComputerDefaults.exe程序會先查詢登錄檔HKCU\Software\Classes\ms-settings\shell\open\command中資料發現該路徑不存在後,繼續查詢登錄檔HKCR\ms-settings\shell\open\command中的資料並讀取

檢視相應路徑下的登錄檔,發現該登錄檔路徑HKCU\Software\Classes\ms-settings\shell\open\command確實不存在。我們這時就可以自己構造這個登錄檔路徑,然後將鍵值填充為C:\Windows\System32\cmd.exe,這時再執行ComputerDefaults.exe就會彈一個system的cmd

0x02 組策略提權

SYSVOL是域內的共享資料夾,用來存放登入指令碼、組策略指令碼等資訊。

當域管理員通過組策略修改密碼時,會在指令碼中引入使用者密碼,導致密碼洩露。

2.1利用SYSVOL還原組策略中儲存的密碼

域內共享資料夾SYSVOL

\\<DOMAIN>\SYSVOL\<DOMAIN>\Polices

所有域內主機都能訪問,裡面儲存組策略相關資料

認證使用者(所有域使用者或者信任域裡的使用者)對SYSVOL擁有讀許可權

  • 組策略偏好GPP
對映驅動(Drives.xml)
建立本地使用者
資料來源(DataSources.xml)
印表機配置(Printers.xml)
建立/更新服務(Services.xml)
計劃任務(ScheduledTasks.xml)
更改本地Administrator密碼

域管理員在使用組策略批量管理域內主機時,如果配置組策略的過程中需要填入密碼,那麼該密碼會被儲存為cpassword項到共享資料夾\SYSVOL下的xml檔案,預設所有域內使用者可訪問,雖然被加密,但很容易被解密

搜尋包含cpassword的XML檔案,獲取AES加密的密碼

開源解密指令碼:

https://raw.githubusercontent.com/PowerShellMafia/PowerSploit/master/Exfiltration/Get-GPPPassword.ps1

同時Kali也自帶gpp-decrypt可進行破解

使用PowerShell解密後為

testsuccess! 

2.2 MSF獲取組策略密碼

使用MSF下的

post/windows/gather/gpp模組

使用此模組進行提權條件是:

  • 需要點選UAC
  • 會話許可權為管理員組成員或知曉管理員密碼

成功則會回顯憑據資訊(借用Yangsir師傅的圖)

0x03 令牌竊取提權

Windows Token其實叫Access Token(訪問令牌),它是一個描述程序或者執行緒安全上下文的一個物件。不同的使用者登入計算機後, 都會生成一個Access Token,這個Token在使用者建立程序或者執行緒時會被使用,不斷的拷貝

Windows有兩種型別的Token:

  • 主令牌(Delegation token)

  • 模擬令牌(Impersonation token)

    提權的利用點:當用戶登出後,系統將會使主令牌切換為模擬令牌,而模擬令牌不會被清除,只有在重啟機器後才會清除

3.1 incognito竊取模擬令牌提權

在MSF中可使用Incognito模組竊取token

首先要獲取一個Session

meterpreter > load incognito
meterpreter > list_tokens -u		//列舉token
meterpreter > impersonate_token "NT AUTHORITY\\SYSTEM"	//token竊取
meterpreter > steal_token 1252		 //從程序竊取
meterpreter > rev2self or drop_token //返回之前token

如果有Impersonation Tokens Available我們就可以竊取或者直接getsystem提權(圖自3gstudent)

如果程序有token,我們也可以steal_token pid竊取token

3.2 利用Token獲得TI許可權

TI (TrustedInstaller)是從Windows Vista開始出現的一個內建安全主體,在Windows中擁有修改系統檔案許可權,本身是一個服務,以一個賬戶組的形式出現。它的全名是:NT SERVICE\TrustedInstaller

因此在Windows系統中,即使獲得了管理員許可權和system許可權,也不能修改系統檔案,我們需要獲得TI (TrustedInstaller)許可權

如圖,system在C:\Windows\servicing中沒有寫許可權,只有TrustedInstaller對此資料夾擁有完全許可權

MSF通過incognito獲得TI許可權

啟動服務TrustedInstaller.exe,然後利用incognito獲取TrustedInstaller.exe的Token

sc.exe start Trustedinstaller

回到Meterpreter

meterpreter > ps

找到TrustedInstaller.exe的PID,竊取他的Token

meterpreter > load incognito
meterpreter > steal_token 1772
meterpreter > getuid

竊取成功

雖然UID相同,但是可以寫入C:\Windows\servicing,許可權已經是TrustedInstaller,證明我們提權已經成功

參考文章:

https://blog.csdn.net/Simon798/article/details/107051801

https://blog.csdn.net/qq_36119192/article/details/104292591

https://www.4hou.com/posts/GvV7