你的 COM 劫持同伙
作者:David Tulis (@kafkaesqu3)
该仓库包含用于探索 COM 劫持的代码示例和概念验证。COM 劫持是一种 Windows 后渗透技术,可用于持久化或防御规避。
有关 COM 接口、如何发现劫持以及滥用劫持的技术, 请参阅 Derbycon 9 上的演讲, COM 劫持技术。
Extract-HijackableKeysFromProcmonCSV:解析 Procmon CSV 导出文件,
查找可劫持的对象Hijack-CLSID:使用给定的 DLL 劫持一个 CLSIDHijack-MultipleKeys:使用给定的 DLL 同时劫持多个 CLSID。这对于
查找经常被激活的 CLSID 很有用CreateProcess 创建新进程CreateRemoteThread 注入到现有进程CreateThread 测量当前进程中的线程生命周期包含用于处理 COM 劫持的辅助脚本的 PowerShell 脚本。亮点:
显示所有 COM 对象 CLSID 及其实现在磁盘上的位置
$keys = Get-CLSIDRegistryKeys -RegHive HKCR
$results = $keys | % {$guid = Extract-GUIDFromText $_; Map-GUIDToDLL -guid $guid 2> $null }
对系统上的 CLSID 进行普查
$HKCR_keys = Get-CLSIDRegistryKeys -RegHive HKCR
$HKCR_keys | where-object {$_ -like "*inprocserver"} | Measure-Object
$HKCR_keys | where-object {$_ -like "*inprocserver32"} | Measure-Object
$HKCR_keys | where-object {$_ -like "*localserver"} | Measure-Object
$HKCR_keys | where-object {$_ -like "*localserver32"} | Measure-Object
$HKLM_keys = Get-CLSIDRegistryKeys -RegHive HKLM
$HKLM_keys | Measure-Object
$HKCU_keys = Get-CLSIDRegistryKeys -RegHive HKCU
$HKCU_keys | Measure-Object
explorer:{69486DD6-C19F-42e8-B508-A53F9F8E67B8}
explorer:{9E175B6D-F52A-11D8-B9A5-505054503030}
explorer:{30CC9D06-7E62-4966-9777-BC3442E788BD}
explorer:{3eef301f-b596-4c0b-bd92-013beafce793}
explorer:{682159d9-c321-47ca-b3f1-30e36b2ec8b9}
explorer:{6B3B8D23-FA8D-40B9-8DBD-B950333E2C52}
explorer:{9aa46009-3ce0-458a-a354-715610a075e6}
explorer:{9BA05972-F6A8-11CF-A442-00A0C90A8F39}
explorer:{AC36A05C-FB95-4C7A-868C-A43CC8D2D926}
explorer:{B52D54BB-4818-4EB9-AA80-F9EACD371DF8}
explorer:{c2f03a33-21f5-47fa-b4bb-156362a2f239}
查找引用了系统中不存在的 DLL 的 CLSID:
Find-MissingLibraries
用于 COM 劫持滥用的 3 个概念验证模板,如 Derbycon 9 演讲中所示:
HijackDLL-Process:当 DLL 被加载时创建一个新进程HijackDLL-CreateRemoteThread:当 DLL 被加载时,使用 CreateRemoteThread
API 调用执行线程注入技术HijackDLL-Threads:用于测量劫持后 DLL 中启动的线程的生命周期概念验证,展示如何利用 COM 劫持进行进程注入:
第一步是执行劫持:
COMInjectDotNet.exe chrome.exe C:\COM\COMInjectTarget.dll
劫持不会立即触发,可能需要启动应用程序(如果当前未运行),或执行一些 基本的应用程序操作。也许有一些更好的 CLSID 触发频率更高,但这些 已经足够好了。
COMInjectTarget.dll 会将其进度记录到 C:\COM 下的日志文件中。这似乎
比在另一个进程中使用 AllocConsole 之类的方法并直接打印到控制台
更稳定。
以下展示了注入的 DLL 在主 chrome.exe 进程内运行的
情况:
[*] chrome pid=9104 ppid=4900 (count 0)
[*] chrome pid=9104 ppid=4900 (count 1)
[*] chrome pid=9104 ppid=4900 (count 2)
[*] chrome pid=9104 ppid=4900 (count 3)
[*] chrome pid=9104 ppid=4900 (count 4)
[*] chrome pid=9104 ppid=4900 (count 5)
当前支持的进程有:
要了解有关 COM 和 COM 劫持的更多信息: