D盾dll劫持利用
字数 1508 2025-08-24 10:10:13

DLL劫持利用技术详解

一、DLL劫持原理

DLL劫持(DLL Hijacking)是一种通过替换或劫持程序运行时调用的DLL文件,欺骗程序加载恶意DLL的技术。其核心原理是:

  1. Windows系统在加载DLL时遵循特定的搜索顺序
  2. 攻击者可以利用搜索顺序的漏洞,将恶意DLL放置在比合法DLL更优先的位置
  3. 程序运行时将加载恶意DLL而非原始DLL

二、DLL劫持的利用途径

  • 权限维持:通过劫持常用软件的DLL实现持久化
  • 钓鱼攻击:诱导用户运行带有恶意DLL的程序
  • 绕过安全软件:某些安全软件对DLL劫持检测不足

三、漏洞挖掘方法

1. 使用Process Explorer分析

  1. 运行目标程序(如D盾客户端v2.1.5.4)
  2. 使用Process Explorer查看程序加载了哪些DLL

2. 理解安全机制

  • SafeDllSearchMode:Windows针对DLL劫持的安全机制
  • KnownDLLs:包含系统中常见DLL的注册表项,位于:
    HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\KnownDLLs

特殊技巧:在KnownDLLs注册表项中创建同名DLL并指定位置,可使同名DLL保护失效。

3. 检测可劫持DLL

方法一:手动检测

  1. 检查程序加载的DLL中是否存在KnownDLLs中不存在的项
  2. 使用K8dllhijack.dll工具(改名为目标DLL名)进行测试
  3. 使用Process Monitor辅助分析

方法二:使用自动化工具

  1. Rattler:开源自动化检测工具

    • 下载地址:https://github.com/sensepost/rattler/releases/tag/v1.0
    • 如果Rattler检测不出,可尝试其他方法
  2. ChkDllHijack.exe

    • 使用Process Explorer导出DLL路径
    • 用ChkDllHijack.exe加载路径
    • 分析结果显示winsta.dll存在劫持可能

四、实际利用案例

1. 基础劫持演示

  1. 使用Rattler中的payload.dll改名为winsta.dll
  2. 将恶意winsta.dll放入程序目录
  3. 运行程序,成功弹出计算器(验证劫持成功)

2. 权限维持-绕过火绒

  1. 使用IAT工具(如轮子哥的Dll(IAT)工具)生成恶意DLL

    • 将CS生成的shellcode复制到工具中
    • 生成恶意DLL文件
  2. 实施劫持:

    • 将生成的wwwcomw.dll改名为winsta.dll
    • 将文件放入D盾运行文件夹
    • 点击劫持文件后运行D盾
    • CS成功上线,火绒无检测
  3. 持久化:

    • 利用D盾的自启动设置实现权限维持

五、防御措施

  1. 使用绝对路径加载DLL
  2. 启用SafeDllSearchMode
  3. 对加载的DLL进行数字签名验证
  4. 监控DLL加载行为

六、注意事项

  1. 该技术已提交CNVD,仅用于技术研究
  2. 禁止用于非法用途
  3. 实际测试时注意法律边界

七、工具清单

  1. Process Explorer - 分析进程和DLL
  2. Process Monitor - 监控系统活动
  3. Rattler - 自动化DLL劫持检测工具
  4. ChkDllHijack.exe - DLL劫持检测工具
  5. K8dllhijack.dll - 测试用DLL劫持工具
  6. Dll(IAT)工具 - 生成恶意DLL(需自行查找)

八、技术要点总结

  1. 优先检查KnownDLLs中不存在的DLL
  2. winsta.dll是常见的可劫持目标
  3. 自动化工具与手动分析结合效果最佳
  4. DLL劫持可用于绕过部分安全软件
  5. 利用软件自启动特性可实现持久化
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劫持可用于绕过部分安全软件 利用软件自启动特性可实现持久化