Skip to content
KitploitKITPLOIT
工具博客
提交
工具博客
提交

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

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

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

工具目录

分类

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

最受欢迎

查看全部 →

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

探索所有工具

浏览我们的工具集合

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

DLLHijackHunter

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

查看仓库

DLLHijackHunter

作者 ProjectMerai

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


概述

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

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

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


架构

root@kitploit:~
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

主要特性

劫持类型覆盖

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 不是猜测,而是尝试证明劫持有效:

root@kitploit:~
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)。
  • 它会瞬态地向候选位置写入文件(中等影响);对于完全被动、只读的分类,请保持关闭。
root@kitploit:~
# 使用加载器验证搜索顺序的标准用户分类(无金丝雀、无 ETW)
.\DLLHijackHunter.exe --lpe-only --no-canary --no-etw --verify-load

对比

¹ 预编译的双架构金丝雀已嵌入 — **无需编译器**即可确认加载。只有可选的导出转发*代理*(用于保持消耗导出的主机存活)需要 MSVC。
² 通过攻击者相对 ACL 可写性(见过滤流水线)。它减少 — 但不消除 — 误报;软门控启发式(清单/SxS/LoadLibraryEx)仍存在不确定性。未经验证的静态发现现在被限制在**高(High)**层级以下。
³ 从自动启动状态推导,而非经过验证的重启测试。
⁴ 导出转发代理是实验性/尽力而为的(见上文说明)。
⁵ 仅限服务/任务/COM 触发器;UAC 绕过发现不会触发金丝雀。
⁶ 由内置的 HijackLibs 数据集快照支持(约 590 个条目);可从 hijacklibs.net 刷新。

使用方法

先决条件

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

构建

root@kitploit:~
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

# 或使用构建脚本
.\build.ps1

快速开始

root@kitploit:~
# 全面激进扫描(推荐,需要管理员权限)
.\DLLHijackHunter.exe --profile aggressive

# 安全扫描(无文件投放、无触发)
.\DLLHijackHunter.exe --profile safe

# UAC 绕过聚焦扫描
.\DLLHijackHunter.exe --profile uac-bypass

# 针对特定二进制文件
.\DLLHijackHunter.exe --target "C:\Program Files\MyApp\app.exe"

# 按文件名定位(部分匹配)
.\DLLHijackHunter.exe --target notepad.exe

# 仅显示已确认的发现
.\DLLHijackHunter.exe --profile redteam --format json -o report.json

CLI 选项

root@kitploit:~
DLLHijackHunter — 自动化 DLL 劫持检测

选项:
  -p, --profile <profile>        扫描配置文件 [默认: aggressive]
                                   aggressive | strict | safe | redteam | uac-bypass
  -o, --output <path>            输出文件路径(自动检测格式)
  -f, --format <format>          输出格式 [默认: console]
                                   console | json | html
  -t, --target <target>          针对特定二进制文件、目录或文件名
      --min-confidence <value>   最低置信度阈值 0-100。省略时,使用各配置文件的
                                   自身阈值;传入此参数将覆盖它。
      --no-canary                禁用金丝雀确认
      --no-etw                   禁用 ETW 运行时发现
      --verify-load              使用真实加载器验证搜索顺序(见下文)。
                                   标准用户;瞬态写入良性探测。
      --confirmed-only           仅显示金丝雀确认的发现
      --lpe-only                 严格 LPE 搜索:忽略 System32/Program Files,仅显示
                                   标准用户可写的漏洞
      --log-file <path>          将诊断扫描日志写入文件
  -v, --verbose                  详细输出

注意:--min-confidence 仅在您显式传入时才被视为覆盖。否则使用所选配置文件的阈值(例如 safe = 50%,strict = 80%)。

扫描配置文件


评分

每个发现都会收到置信度和影响信号,这些信号被组合成最终的优先级层级。

典型的影响考量包括:

  • 获得的特权
  • 触发器可靠性
  • 隐蔽性
  • 重启持久性

已确认的金丝雀执行应被视为最强的验证信号。

层级门控: 高(High) 和 已确认(Confirmed) 层级保留给有证明信号支持的发现 — 已触发的金丝雀、ETW 运行时加载观察或文档化的知识库匹配。纯粹的静态搜索顺序匹配,无论多么干净,都被限制在**中(Medium)**层级的顶部,并标注为 仅静态(Static-only),以便未经验证的启发式永远不会呈现为高置信度。

推荐的分类配置

由于可写性按攻击者相对进行评估,提升权限和标准用户运行都有意义:

  • 对于 LPE 分类,最可信的配置是使用 --lpe-only 的标准用户运行(如果没有编译器,则加上 --no-canary)— 每个幸存的发现都确实可由非特权主体写入。
  • 提升权限运行是 ETW 和金丝雀确认所必需的,并且现在已摆脱历史上“System32 中一切看起来都可写”的倒置问题。

安全性

DLLHijackHunter 专为防御性安全研究、实验室验证、审计以及授权环境中的红队模拟而设计。

仅在对您拥有或明确授权评估的系统和网络上使用。

操作说明

  • 金丝雀模式会向候选位置写入测试 DLL
  • 某些触发器可能在验证期间短暂启动或停止服务/任务
  • 代理/导出转发金丝雀可能使脆弱目标不稳定
  • 当文件投放和触发器不可接受时,安全(safe)配置文件是生产分类的首选模式

输出

DLLHijackHunter 支持:

  • 控制台报告
  • JSON 导出
  • HTML 导出

推荐工作流程:

  1. 运行广泛扫描
  2. 审查高置信度发现
  3. 对高价值路径选择性使用金丝雀确认
  4. 保留 JSON/HTML 输出用于报告和分类

许可证

MIT


致谢

由 ProjectMerai 构建。

下载工具
类型描述隐蔽性状态
幻影(Phantom)DLL 在磁盘上任何位置都不存在高已实现
搜索顺序(Search Order)将 DLL 放置在 Windows 搜索顺序中更靠前的位置高已实现
侧加载(Side-Loading)滥用合法应用程序从其目录加载 DLL 的行为高已实现(AutoElevate 复制到临时目录路径)
.local 重定向通过 .local 目录重定向进行劫持高已实现
ENV PATH利用系统 PATH 中可写目录进行武器化高已实现(精选服务/DLL 映射)
AppInit DLLAppInit_DLLs 注册表滥用低已实现
AppCert DLLAppCertDLLs 注册表滥用(加载到每个 CreateProcess/WinExec 调用者中)低已实现
CWD当前工作目录劫持低已计划 — 目前没有任何发现路径会产生此类型
特性DLLHijackHunterRobberDLLSpyWinPEASProcmon
自动化发现✅✅✅✅❌
幻影 DLL 检测✅❌✅❌✅
搜索顺序分析✅❌❌❌❌
基于 ACL 的可写性检查✅部分❌基础❌
ETW 实时监控✅❌❌❌✅
金丝雀确认✅¹❌❌❌❌
特权提升检查✅❌❌❌❌
UAC 绕过发现✅❌❌❌❌
误报减少✅²无基础无无
重启持久性检查✅³❌❌❌❌
代理 DLL 生成✅⁴❌❌❌❌
置信度评分✅❌❌❌❌
自动触发(服务/任务/COM)✅⁵❌❌❌❌
HTML/JSON 报告✅❌❌TXT❌
威胁情报关联✅⁶❌❌❌❌
自动化 PATH 利用✅❌❌❌❌
目标特定扫描✅❌❌❌✅
自包含二进制文件✅❌❌✅❌
配置文件使用场景金丝雀ETWUAC 绕过最低置信度触发器
aggressive全面审计、实验室环境✅✅✅15%服务、任务、COM
strict仅高置信度发现✅✅❌80%服务、任务
safe生产系统、只读❌❌❌50%无
redteam仅已确认可利用✅✅❌50%服务、任务、COM
uac-bypass仅 UAC 绕过向量❌❌✅20%仅 AutoElevate