Skip to content
KitploitKITPLOIT
工具漏洞利用博客
Log in
提交
工具漏洞利用博客
提交

黑客、渗透测试和网络安全工具,武装您的安全武器库!

Kitploit 是一个黑客、网络安全和渗透测试工具的目录。发现最新的项目更新,查找漏洞、分析系统、自动化测试并加强你的安全。

··订阅源·联系·隐私·© 2026 Kitploit

工具目录

分类

查看所有分类
Loading categories
DLLHijackHunter — 自动化的DLL劫持发现、验证和确认。将本地错误配置转化为武器化的、已确认的攻击路径。 | Kitploit
工具/GitHubGitHub/ghostvectoracademy/dllhijackhunter
权限提升漏洞扫描器Payload生成持久化机制动态代码分析 (DAST)漏洞利用横向移动渗透测试二进制分析学习与教育红队
396443812天前Kitploit 审核通过

最受欢迎

查看全部 →

发现我们社区最常用的工具。

探索所有工具

浏览我们的工具集合

查看所有工具 →
分享
GitHub
ghostvectoracademy/dllhijackhunter

DLLHijackHunter

自动化的DLL劫持发现、验证和确认。将本地错误配置转化为武器化的、已确认的攻击路径。

查看仓库

DLLHijackHunter

作者 ProjectMerai

自动化 DLL 劫持发现、验证与确认
将本地错误配置转化为武器化的、已确认的攻击路径。


概述

DLLHijackHunter 是一款自动化的 Windows DLL 劫持检测工具,超越了静态分析的范畴。它通过多阶段流水线来发现、验证并确认 DLL 劫持机会:

  1. 发现 — 枚举服务、计划任务、启动项、COM 对象以及 AutoElevate UAC 绕过向量中的二进制文件
  2. 过滤 — 通过智能硬门控和软门控消除误报
  3. 金丝雀确认 — 部署一个无害的金丝雀 DLL 并触发目标二进制文件,以证明劫持有效
  4. 评分与报告 — 通过分层置信度系统按可利用性对发现结果进行排序

大多数 DLL 劫持工具止步于“这个 DLL 可能可被劫持”。DLLHijackHunter 则尝试对其进行验证,与已知的漏洞利用情报进行交叉比对,并在可能的情况下确认真实的执行路径。


架构

flowchart TB
    subgraph Phase1["阶段 1:发现"]
        SE["静态引擎<br/>服务、任务、启动项、<br/>COM、运行键"]
        AE["AutoElevate 引擎<br/>清单 + COM UAC 绕过"]
        PE["PE 分析器<br/>导入表、延迟加载、<br/>清单、导出"]
        ETW["ETW 引擎<br/>实时 DLL 加载<br/>监控"]
        SO["搜索顺序<br/>计算器"]
    end

    subgraph Phase2["阶段 2:过滤流水线"]
        direction LR
        HG["硬门控<br/>(二进制淘汰)"]
        SG["软门控<br/>(置信度调整)"]
    end

    subgraph Phase3["阶段 3:加载验证(--verify-load)"]
        LP["LoadProbe<br/>子进程加载器测试<br/>放置并移除探测 DLL"]
    end

    subgraph Phase4["阶段 4:金丝雀"]
        CB["金丝雀 DLL 构建器"]
        TE["触发器执行器"]
        VF["验证"]
    end

    subgraph Phase5["阶段 5:输出"]
        SC["分层评分器"]
        RC["控制台报告"]
        RJ["JSON 报告"]
        RH["HTML 报告"]
    end

    SE --> PE --> SO
    AE --> PE
    ETW --> SO
    SO --> Phase2
    HG --> SG
    Phase2 --> Phase3
    Phase3 --> Phase4
    CB --> TE --> VF
    Phase4 --> Phase5

主要特性

劫持类型覆盖

类型描述隐蔽性状态
幻影(Phantom)DLL 在磁盘上任何位置都不存在高已实现
搜索顺序(Search Order)将 DLL 放置在 Windows 搜索顺序中更靠前的位置高已实现
侧加载(Side-Loading)滥用合法应用程序从其目录加载 DLL 的行为高已实现(AutoElevate 复制到临时目录路径)
.local 重定向通过 .local 目录重定向进行劫持高已实现
ENV PATH利用系统 PATH 中可写目录进行武器化高已实现(精选服务/DLL 映射)
AppInit DLLAppInit_DLLs 注册表滥用低已实现
AppCert DLLAppCertDLLs 注册表滥用(加载到每个 CreateProcess/WinExec 调用者中)低已实现
CWD当前工作目录劫持低已计划 — 目前没有任何发现路径会产生此类型

IFEO 调试器条目会被枚举,且引用的二进制文件会被分析其 DLL 导入,但没有专门的 IFEO/KnownDLL 绕过劫持类型 — 这些不会作为独立检测进行宣传。

UAC 绕过发现

DLLHijackHunter 包含专门的 UAC 绕过发现功能:

  • 清单 AutoElevate — 扫描 System32 和 SysWOW64 中嵌入清单包含 <autoElevate>true</autoElevate> 的 EXE
  • COM AutoElevation — 扫描 HKLM\SOFTWARE\Classes\CLSID 中 Elevation\Enabled=1 的 COM 对象
  • 侧加载模拟 — 对于不调用 SetDllDirectory 或 SetDefaultDllDirectories 的 AutoElevate 二进制文件,模拟“将 EXE 复制到可写文件夹 + 投放 DLL”的攻击路径

定向漏洞知识库

  • 定向漏洞映射 — 将发现的导入与内置的 HijackLibs 数据集快照(约 590 个记录的 DLL 条目,涵盖约 700 个易受攻击的可执行文件)进行交叉比对,嵌入为 Resources/hijacklibs.json。匹配会提升置信度并将发现链接到其 HijackLibs 参考页面;没有匹配则无影响。该数据集是数据驱动的 — 通过重新下载 https://hijacklibs.net/api/hijacklibs.json 覆盖该资源即可刷新(无需更改代码)。数据集 © HijackLibs 项目及其贡献者。
  • 自动化 PATH 利用 — 评估可写的 PATH 文件夹,并为精选的原生 Windows 服务映射生成劫持候选,这些服务已知会搜索 PATH 以查找缺失的 DLL
  • 扩展幻影 DLL 搜索 — 跨多个类别搜索高价值的幻影 DLL 机会库

过滤流水线

该流水线通过两个阶段减少误报:

硬门控

  • API 集架构过滤(api-ms-*、ext-ms-*)
  • KnownDLL 过滤
  • 攻击者相对 ACL 可写性验证 — 仅当非特权主体(Users / Authenticated Users / Everyone,以及防泄漏的子管理员服务账户如 LOCAL SERVICE/NETWORK SERVICE)具有有效写入权限时,路径才被视为可写。至关重要的是,这是独立于工具运行时所使用的令牌计算的,因此以提升权限运行不会使 System32/Program Files 看起来可写。这正是提升权限运行对 LPE 分类有意义的原因。

软门控

  • WinSxS 清单惩罚
  • 特权差异分析
  • LoadLibraryEx 缓解措施检查
  • 签名验证检查
  • 优雅错误处理惩罚

金丝雀确认

DLLHijackHunter 不是猜测,而是尝试证明劫持有效:

sequenceDiagram
    participant H as DLLHijackHunter
    participant B as 金丝雀 DLL 构建器
    participant T as 触发器执行器
    participant V as 受害者二进制文件

    H->>B: 构建金丝雀 DLL
    B->>B: 提取预编译金丝雀<br/>(或使用 MSVC 编译代理)
    B-->>H: canary.dll + 确认文件路径
    H->>H: 将 DLL 放置在劫持路径
    H->>T: 触发二进制文件执行
    T->>V: 启动服务 / 运行任务 / COM 激活
    V->>V: 加载金丝雀 DLL
    V-->>H: 写入确认文件<br/>PID、特权、完整性级别
    H->>H: 记录:已确认(CONFIRMED)
    H->>H: 清理金丝雀 DLL

金丝雀 DLL:

  • 同时为 x64 和 x86 预编译,嵌入在扫描器中,因此扫描时无需编译器。会根据受害者的位数选择正确的架构并按需提取。
  • 自定位:它在运行时从自身加载的模块路径推导确认文件路径(%ProgramData%\DLLHijackHunter\canary_<hash>.confirm),因此一个二进制文件即可服务于所有候选。扫描器从部署路径计算相同的哈希并轮询该文件。
  • 使用基于文件的确认机制
  • 捕获执行元数据,如用户、完整性级别和特权指示符
  • 不包含恶意负载;它严格是一种检测和验证机制
  • 静态链接 CRT,因此在受害者主机上没有运行时依赖(ucrtbase/vcruntime)。

捆绑的二进制文件由 src/DLLHijackHunter/Resources/canary_src.c 中的可审计源代码构建,可通过 Resources/build_canary.bat 重新生成(需要 MSVC C++ 工具链;扫描器不需要)。

功能代理例外: 当搜索顺序劫持针对一个存在并暴露导出的 DLL 时,在确认后保持主机存活需要导出转发代理,该代理使用 MSVC(cl.exe,通过 vswhere/vcvarsall 定位)按 DLL 编译。如果没有工具链,则使用预编译的金丝雀 — 它仍然确认加载(DllMain 触发)但不转发导出,因此主机进程可能在确认记录后崩溃。幻影 DLL 和其他无导出候选完全不需要编译器。

签名: 嵌入的金丝雀未签名。对其进行代码签名(以便在更严格的政策下加载并可归属)需要签名证书,这留给维护者作为发布时步骤。

关于代理/导出转发模式的重要说明

代理/导出转发金丝雀是实验性的且尽力而为。某些目标可能无法正确加载或可能因以下原因出现意外行为:

  • 仅序号导出
  • 修饰的导出名称
  • 调用约定不匹配
  • 目标进程中的加载器/运行时假设

这意味着失败的代理金丝雀并不总是意味着底层劫持路径不可能。


加载顺序验证(--verify-load)

一种可选加入的标准用户验证,位于过滤流水线和金丝雀阶段之间。对于每个适用的候选,它会短暂地将一个良性探测 DLL 写入可写的劫持位置,然后要求真实的 Windows 加载器 — 在一个短暂存活的子进程中 — 按名称解析该 DLL。加载器解析的位置决定判定结果:

  • 验证通过 — 加载器选择了可写位置。搜索顺序声明已被证明(此佐证使发现达到高(High)层级;金丝雀执行仍然是达到**已确认(Confirmed)**的唯一路径)。
  • 输给受保护项 — 加载器选择了 KnownDLL、System32 副本或 SxS 重定向副本。该位置几乎肯定不可劫持,因此候选被大幅降级。这捕获了静态搜索顺序计算器遗漏的经典误报(例如,KnownDLL 使 ntdll.dll 无法利用的 .local/搜索顺序“发现”)。

设计和安全说明:

  • 在子进程中运行,因此已加载到扫描器中的名称不会短路结果,并且任何加载副作用或崩溃都会被隔离。无需提升权限。
  • 每个探测都会被放置、解析,然后移除;任何预先存在的文件都会被备份并恢复。
  • 它模拟现代 LOAD_LIBRARY_SEARCH 排序,因此仅适用于幻影 / 搜索顺序 / 侧加载候选。.local、PATH 和 AppInit/AppCert 候选使用不同的机制,并报告为已跳过(Skipped)。
  • 它会瞬态地向候选位置写入文件(中等影响);对于完全被动、只读的分类,请保持关闭。
# 使用加载器验证搜索顺序的标准用户分类(无金丝雀、无 ETW)
.\DLLHijackHunter.exe --lpe-only --no-canary --no-etw --verify-load

对比

特性DLLHijackHunterRobberDLLSpyWinPEASProcmon
自动化发现✅✅✅✅❌
幻影 DLL 检测✅❌✅❌✅
搜索顺序分析✅❌❌❌❌
基于 ACL 的可写性检查✅部分❌基础❌
ETW 实时监控✅❌❌❌✅
金丝雀确认✅¹❌❌❌❌
特权提升检查✅❌❌❌❌
UAC 绕过发现✅❌❌❌❌
误报减少✅²无基础无无
重启持久性检查✅³❌❌❌❌
代理 DLL 生成✅⁴❌❌❌❌
置信度评分✅❌❌❌❌
自动触发(服务/任务/COM)✅⁵❌❌❌❌
HTML/JSON 报告✅❌❌TXT❌
威胁情报关联✅⁶❌❌❌❌
自动化 PATH 利用✅❌❌❌❌
目标特定扫描✅❌❌❌✅
自包含二进制文件✅❌❌✅❌
¹ 预编译的双架构金丝雀已嵌入 — **无需编译器**即可确认加载。只有可选的导出转发*代理*(用于保持消耗导出的主机存活)需要 MSVC。
² 通过攻击者相对 ACL 可写性(见过滤流水线)。它减少 — 但不消除 — 误报;软门控启发式(清单/SxS/LoadLibraryEx)仍存在不确定性。未经验证的静态发现现在被限制在**高(High)**层级以下。
³ 从自动启动状态推导,而非经过验证的重启测试。
⁴ 导出转发代理是实验性/尽力而为的(见上文说明)。
⁵ 仅限服务/任务/COM 触发器;UAC 绕过发现不会触发金丝雀。
⁶ 由内置的 HijackLibs 数据集快照支持(约 590 个条目);可从 hijacklibs.net 刷新。

使用方法

先决条件

  • Windows 10/11 或 Windows Server 2016+
  • .NET 8.0 或 10.0 运行时(或使用自包含构建)
  • 管理员权限(推荐,ETW、金丝雀部署和某些服务触发器需要)

构建

git clone https://github.com/ghostvectoracademy/DLLHijackHunter.git
cd DLLHijackHunter

# 构建(自包含单文件)
dotnet publish src/DLLHijackHunter/DLLHijackHunter.csproj `
    -c Release -r win-x64 --self-contained `
    -p:PublishSingleFile=true -o ./publish
下载工具