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

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

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

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

工具目录

分类

查看所有分类
Loading categories
Certify — 用于枚举和利用 Active Directory 证书服务(AD CS)中错误配置的 C# 工具,可实现证书模板滥用、权限提升和域持久化。 | Kitploit
工具/GitHubGitHub/ghostpack/certify
身份验证与授权权限提升漏洞分析漏洞利用渗透测试红队
GitHubghostpack/certify

Certify

用于枚举和利用 Active Directory 证书服务(AD CS)中错误配置的 C# 工具,可实现证书模板滥用、权限提升和域持久化。

查看仓库
2.0k282927天前Kitploit 审核通过

最受欢迎

查看全部 →

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

探索所有工具

浏览我们的工具集合

查看所有工具 →
分享

Certify

Certify 是一个 C# 工具,用于枚举和滥用 Active Directory 证书服务 (AD CS) 中的错误配置。

@harmj0y 和 @tifkin_ 是 Certify 及相关的 AD CS 研究的主要作者(博客和白皮书)。

目录

  • Certify
    • 用法
    • 防御考虑
    • 编译说明
      • 附注:通过 PowerShell 运行 Certify
        • 附注的附注:通过 PSRemoting 运行 Certify
    • 反思
    • 致谢

用法

命令概览和全面的使用细节可在wiki上找到。

防御考虑

Certify 在 2021 年 Black Hat 上随我们的演讲 "Certified Pre-Owned: Abusing Active Directory Certificate Services" 一同发布。

请参阅我们的白皮书以获取预防和检测指南。

编译说明

我们不打算发布 Certify 的二进制文件,因此你需要自行编译 :)

Certify 针对 .NET 4.7.2 构建,并与 Visual Studio 2022 Community Edition 兼容。只需打开项目 .sln 文件,选择 "Release",然后构建。

附注:通过 PowerShell 运行 Certify

如果你想通过 PowerShell 包装器在内存中运行 Certify,首先编译 Certify 并将生成的程序集进行 base64 编码:

root@kitploit:~
[Convert]::ToBase64String([IO.File]::ReadAllBytes("C:\Temp\Certify.exe")) | Out-File -Encoding ASCII C:\Temp\Certify.txt

然后可以使用以下方法在 PowerShell 脚本中加载 Certify(将 "aa..." 替换为 base64 编码的 Certify 程序集字符串):

root@kitploit:~
$CertifyAssembly = [System.Reflection.Assembly]::Load([Convert]::FromBase64String("aa..."))

随后可以按如下方式调用 Main() 方法和任何参数:

root@kitploit:~
[Certify.Program]::Main("enum-templates --filter-enabled --filter-vulnerable".Split())

附注的附注:通过 PSRemoting 运行 Certify

由于 PSRemoting 处理输出的方式,我们需要将 stdout 重定向到字符串并返回该字符串。幸运的是,Certify 提供了一个函数来帮助实现这一点。

如果你按照附注:通过 PowerShell 运行 Certify中的说明创建 Certify.ps1,请在脚本末尾添加类似以下内容:

root@kitploit:~
[Certify.Program]::MainString("enum-templates --filter-enabled --filter-vulnerable")

然后你应该可以通过 PSRemoting 运行 Certify,例如:

root@kitploit:~
$s = New-PSSession dc.theshire.local
Invoke-Command -Session $s -FilePath C:\Temp\Certify.ps1

或者,Certify 的 /outfile:C:\FILE.txt 参数会将所有输出流重定向到指定文件。

反思

关于公开披露的问题,我们在发布白皮书后自我禁运了大约 45 天,才发布我们的攻击工具(Certify 以及 ForgeCert),以便给组织一个机会来应对 Active Directory 证书服务相关的问题。我们还预先为这两个项目发布了一些 Yara 规则/IOC,并在发布白皮书的同时发布了专注于防御的 PSPKIAudit PowerShell 项目。然而,我们发现,组织和供应商通常不会修复“理论性”攻击的问题或构建检测,直到有人通过概念验证证明某件事是可能的。

致谢

Certify 参考并借鉴了网上的一些资源:

  • 这篇帖子关于如何从 C# 请求证书。
  • 这个 gist 关于 SAN 规范。
  • 这个 StackOverflow 回答关于导出私钥。
  • 这篇 PKISolutions 文章关于转换 pkiExpirationPeriod。
  • MS-CSRA 协议的这一部分描述了注册代理安全 DACL。

AD CS 的研究工作建立在许多其他人的工作之上。白皮书中有完整的论述,但总结如下:

  • Benjamin Delpy 在 Mimikatz 和 Kekeo 中关于智能卡/证书的广泛工作。
  • PKI Solutions 关于 Active Directory 中 PKI 的优秀文章,以及他们的 PSPKI PowerShell 模块,我们的审计工具包基于此。
  • Brian Komar 的《Windows Server 2008 – PKI and Certificate Security》一书。
  • Microsoft 提供的以下开放技术规范:
    • [MS-CERSOD]:证书服务协议概述
    • [MS-CRTD]:证书模板结构
    • [MS-CSRA]:证书服务远程管理协议
    • [MS-ICPR]:ICertPassage 远程协议
    • [MS-WCCE]:Windows 客户端证书注册协议
  • Christoph Falta 的 GitHub 仓库,其中涵盖了一些攻击证书模板的细节,包括虚拟智能卡以及一些基于 ACL 的滥用想法。
  • CQURE 的文章《The tale of Enhanced Key (mis)Usage》,其中涵盖了一些使用者可选名称(SAN)的滥用。
  • Keyfactor 2016 年的文章《Hidden Dangers: Certificate Subject Alternative Names (SANs)》
  • @Elkement 的帖子《Sizzle @ hackthebox – Unintended: Getting a Logon Smartcard for the Domain Admin!》和《Impersonating a Windows Enterprise Admin with a Certificate: Kerberos PKINIT from Linux》详细介绍了证书模板的错误配置。
  • Carl Sörqvist 撰写了一篇详细且合理的场景文章,题为《Supply in the Request Shenanigans》,描述了其中一些错误配置是如何发生的。
  • Ceri Coburn 在 2020 年发布了一篇优秀的文章《Attacking Smart Card Based Active Directory Networks》,详细介绍了智能卡滥用和 Certify 的增强功能。
  • Brad Hill 发表了题为《Weaknesses and Best Practices of Public Key Kerberos with Smart Cards》的白皮书,从安全角度提供了 Kerberos/PKINIT 的一些良好背景。
下载工具