D盾dll劫持利用
字数 1508 2025-08-24 10:10:13
DLL劫持利用技术详解
一、DLL劫持原理
DLL劫持(DLL Hijacking)是一种通过替换或劫持程序运行时调用的DLL文件,欺骗程序加载恶意DLL的技术。其核心原理是:
- Windows系统在加载DLL时遵循特定的搜索顺序
- 攻击者可以利用搜索顺序的漏洞,将恶意DLL放置在比合法DLL更优先的位置
- 程序运行时将加载恶意DLL而非原始DLL
二、DLL劫持的利用途径
- 权限维持:通过劫持常用软件的DLL实现持久化
- 钓鱼攻击:诱导用户运行带有恶意DLL的程序
- 绕过安全软件:某些安全软件对DLL劫持检测不足
三、漏洞挖掘方法
1. 使用Process Explorer分析
- 运行目标程序(如D盾客户端v2.1.5.4)
- 使用Process Explorer查看程序加载了哪些DLL
2. 理解安全机制
- SafeDllSearchMode:Windows针对DLL劫持的安全机制
- KnownDLLs:包含系统中常见DLL的注册表项,位于:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\KnownDLLs
特殊技巧:在KnownDLLs注册表项中创建同名DLL并指定位置,可使同名DLL保护失效。
3. 检测可劫持DLL
方法一:手动检测
- 检查程序加载的DLL中是否存在KnownDLLs中不存在的项
- 使用K8dllhijack.dll工具(改名为目标DLL名)进行测试
- 使用Process Monitor辅助分析
方法二:使用自动化工具
-
Rattler:开源自动化检测工具
- 下载地址:https://github.com/sensepost/rattler/releases/tag/v1.0
- 如果Rattler检测不出,可尝试其他方法
-
ChkDllHijack.exe:
- 使用Process Explorer导出DLL路径
- 用ChkDllHijack.exe加载路径
- 分析结果显示winsta.dll存在劫持可能
四、实际利用案例
1. 基础劫持演示
- 使用Rattler中的payload.dll改名为winsta.dll
- 将恶意winsta.dll放入程序目录
- 运行程序,成功弹出计算器(验证劫持成功)
2. 权限维持-绕过火绒
-
使用IAT工具(如轮子哥的Dll(IAT)工具)生成恶意DLL
- 将CS生成的shellcode复制到工具中
- 生成恶意DLL文件
-
实施劫持:
- 将生成的wwwcomw.dll改名为winsta.dll
- 将文件放入D盾运行文件夹
- 点击劫持文件后运行D盾
- CS成功上线,火绒无检测
-
持久化:
- 利用D盾的自启动设置实现权限维持
五、防御措施
- 使用绝对路径加载DLL
- 启用SafeDllSearchMode
- 对加载的DLL进行数字签名验证
- 监控DLL加载行为
六、注意事项
- 该技术已提交CNVD,仅用于技术研究
- 禁止用于非法用途
- 实际测试时注意法律边界
七、工具清单
- Process Explorer - 分析进程和DLL
- Process Monitor - 监控系统活动
- Rattler - 自动化DLL劫持检测工具
- ChkDllHijack.exe - DLL劫持检测工具
- K8dllhijack.dll - 测试用DLL劫持工具
- Dll(IAT)工具 - 生成恶意DLL(需自行查找)
八、技术要点总结
- 优先检查KnownDLLs中不存在的DLL
- winsta.dll是常见的可劫持目标
- 自动化工具与手动分析结合效果最佳
- DLL劫持可用于绕过部分安全软件
- 利用软件自启动特性可实现持久化