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

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

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

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

工具目录

分类

查看所有分类
Loading categories
PSPKIAudit — 基于PSPKI工具包的AD CS审计PowerShell工具包。 | Kitploit
工具/GitHubGitHub/ghostpack/pspkiaudit
权限提升渗透测试
GitHubghostpack/pspkiaudit

PSPKIAudit

基于PSPKI工具包的AD CS审计PowerShell工具包。

查看仓库
941130582年前Kitploit 审核通过

最受欢迎

查看全部 →

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

探索所有工具

浏览我们的工具集合

查看所有工具 →
分享

PSPKIAudit

用于审计 Active Directory 证书服务 (AD CS) 的 PowerShell 工具包。

它基于 PKISolution 的 PSPKI 工具包(Microsoft 公共许可证)构建。此仓库包含比 PSGallery 中更新的 PSPKI 版本(请参阅 PSPKI 目录)。Vadims Podans(PSPKI 的创建者)慷慨地提供了此版本,因为它包含多个 bug 的补丁。

此 README 仅作为入门指南——如需完整的详细信息和防御指导,请参阅《Certified Pre-Owned》白皮书。

该模块包含以下主要功能:

  1. Invoke-PKIAudit - 审计当前林的 AD CS 设置,主要分析 CA 服务器和已发布的模板,以发现潜在的权限提升机会。
  2. Get-CertRequest - 通过查询 CA 的数据库来检查 CA 已颁发的证书。主要目的是发现可能利用了证书模板权限提升漏洞的证书请求。此外,如果用户或计算机遭到入侵,事件响应者可以使用它来查找 CA 服务器已颁发给受损用户/计算机的证书(这些证书应随后被吊销)。

警告: 此代码处于测试阶段!我们确信 Invoke-PKIAudit 不会对环境产生影响,因为它查询的数据量相当有限。我们尚未针对典型的 CA 服务器工作负载对 Get-CertRequest 进行严格测试。Get-CertRequest 直接查询 CA 的数据库,可能需要处理数千条结果,这可能会影响性能。

如果没有结果,这并不能保证您的环境是安全的!!

我们也不能保证我们的缓解建议能使您的环境安全或不会中断运营!

您有责任与您的 Active Directory/PKI/架构团队沟通,以确定最适合您环境的缓解措施。

如果代码出现故障,或者我们遗漏了一些内容,请提交 issue 或 pull request 以进行修复!

  • 设置
  • 审计 AD CS 错误配置
    • 输出说明
    • ESC1 - 配置错误的证书模板
    • ESC2 - 配置错误的证书模板
    • ESC3 - 配置错误的注册代理模板
    • ESC4 - 易受攻击的证书模板访问控制
    • ESC5 - 易受攻击的 PKI AD 对象访问控制
    • ESC6 - EDITF_ATTRIBUTESUBJECTALTNAME2
    • ESC7 - 易受攻击的证书颁发机构访问控制
    • ESC8 - NTLM 中继到 AD CS HTTP 端点
    • 杂项 - 显式映射
  • 分类现有已颁发的证书请求

设置

要求

在 Windows 计算机上使用提升的 PowerShell 提示符(PowerShell 版本 5.1 或更高版本)安装以下内容:

  • RSAT 的 Certificate Services 和 Active Directory 功能。使用以下命令安装:``` Get-WindowsCapability -Online -Name "Rsat.*" | where Name -match "CertificateServices|ActiveDirectory" | Add-WindowsCapability -Online
* [PSPKI PowerShell 模块](https://github.com/PKISolutions/PSPKI)。使用以下命令安装:```
Install-Module -Name PSPKI

导入

下载模块并将其提取到一个文件夹中。然后,使用以下命令导入模块:``` cd PSPKIAudit Get-ChildItem -Recurse | Unblock-File

Import-Module .\PSPKIAudit.psd1

# 审计 AD CS 错误配置

运行 `Invoke-PKIAudit` 将对当前域中的 AD CS 执行所有审计检查,包括枚举各种证书颁发机构和证书模板设置。要审计特定 CA,可以运行 `Invoke-PKIAudit -CAComputerName CA.DOMAIN.COM` 或 `Invoke-PKIAudit -CAName X-Y-Z`。

任何错误配置(ESC1-8)将作为 CA/模板结果的属性显示,以标识找到的特定错误配置。

如果要更改用于测试注册/访问控制的组/用户,请修改 `Invoke-PKIAudit.ps1` 顶部的 `$CommonLowprivPrincipals` 正则表达式。

如果要将所有 CA 信息导出为 CSV,请运行:`Get-AuditCertificateAuthority [-CAComputerName CA.DOMAIN.COM | -CAName X-Y-Z] | Export-Csv -NoTypeInformation CAs.csv`

如果要导出所有已发布模板信息(不仅仅是易受攻击的模板)到 CSV,请运行:`Get-AuditCertificateTemplate [-CAComputerName CA.DOMAIN.COM | -CAName X-Y-Z] | Export-Csv -NoTypeInformation templates.csv`


## 输出说明

输出主要分为两个部分:关于发现的 CA 的详细信息,以及关于可能易受攻击的模板的详细信息。

对于证书颁发机构结果:

| 证书颁发机构属性 | 描述                                                        |
| ---------------- | ----------------------------------------------------------- |
| ComputerName     | 运行 CA 的系统。                                            |
| CAName           | CA 的名称。                                                 |
| ConfigString     | 完整的 COMPUTER\CA_NAME 配置字符串。                        |
| IsRoot           | CA 是否为根 CA。                                            |
| AllowsUserSuppliedSans | 是否设置了 `EDITF_ATTRIBUTESUBJECTALTNAME2` 标志。           |
| VulnerableACL    | CA 是否具有易受攻击的 ACL 设置。                            |
| EnrollmentPrincipals | 在 CA 级别拥有 `Enroll` 权限的主体。                        |
| EnrollmentEndpoints | CA 的 Web 服务注册端点。                                   |
| NTLMEnrollmentEndpoints | 已启用 NTLM 的 CA Web 服务注册端点。                        |
| DACL             | 完整的访问控制信息。                                        |
| Misconfigurations | 标识存在的特定错误配置的 ESCX(如果有)。                  |

对于证书模板结果:

| 属性                 | 描述                                                                                                  |
| -------------------- | ----------------------------------------------------------------------------------------------------- |
| CA                   | 模板发布到的完整 CA ConfigString(若未发布则为 null)。                                                |
| Name                 | 模板名称。                                                                                            |
| SchemaVersion        | 模板的架构版本(1/2/3)。                                                                             |
| OID                  | 模板的唯一对象标识符。                                                                                |
| VulnerableTemplateACL | 如果模板具有易受攻击的 ACL 设置,则为 True。                                                          |
| LowPrivCanEnroll     | 如果低权限用户可以注册该模板,则为 True。                                                             |
| EnrolleeSuppliesSubject | 如果存在 `CT_FLAG_ENROLLEE_SUPPLIES_SUBJECT` 标志(即用户可以提供任意 SAN),则为 True。              |
| EnhancedKeyUsage     | 模板中启用的 EKU 用途。                                                                               |
| HasAuthenticationEku | 如果模板具有允许身份验证的 EKU,则为 True。                                                           |
| HasDangerousEku      | 如果模板具有“危险”EKU(Any Purpose 或 null),则为 True。                                              |
| EnrollmentAgentTemplate | 如果模板具有“证书请求代理”EKU,则为 True。                                                            |
| CAManagerApproval    | 注册是否需要经理审批。                                                                                |
| IssuanceRequirements | 授权签名信息。                                                                                        |
| ValidityPeriod       | 证书的有效期。                                                                                        |
| RenewalPeriod        | 证书的续订期。                                                                                        |
| Owner                | 拥有证书的主体。                                                                                      |
| DACL                 | 完整的访问控制信息。                                                                                  |
| Misconfigurations    | 标识存在的特定错误配置的 ESCX(如果有)。                                                              |


## ESC1 - 错误配置的证书模板

### 详细信息 <!-- omit in toc -->

此权限提升场景在满足以下条件时发生:

1. **企业 CA 授予低权限用户注册权限。** 企业 CA 的配置必须允许低权限用户请求证书。有关详细信息,请参阅白皮书开头的“背景 - 注册”部分。

2. **禁用了经理审批。** 此设置要求具有证书“经理”权限的用户审查并批准所请求的证书,然后才能颁发该证书。有关详细信息,请参阅白皮书开头的“背景 - 颁发要求”部分。

3. **不需要授权签名。** 此设置要求任何 CSR 由现有的授权证书签名。有关详细信息,请参阅白皮书开头的“背景 - 颁发要求”部分。

4. **过度宽松的证书模板安全描述符授予低权限用户证书注册权限。** 拥有证书注册权限允许低权限攻击者请求并获取基于该模板的证书。注册权限通过证书模板 AD 对象的安全描述符授予。

5. **证书模板定义了支持身份验证的 EKU。** 适用的 EKU 包括客户端身份验证(OID 1.3.6.1.5.5.7.3.2)、PKINIT 客户端身份验证(OID 1.3.6.1.5.2.3.4)或智能卡登录(OID 1.3.6.1.4.1.311.20.2.2)。

6. **证书模板允许请求者在 CSR 中指定 subjectAltName (SAN)。** 如果请求者可以在 CSR 中指定 SAN,则请求者可以请求任何人的证书(例如域管理员用户)。证书模板的 AD 对象通过其 mspki-certificate-name-flag 属性指定请求者是否可以在 SAN 中指定 subjectAltName。mspki-certificate-name-flag 属性是一个位掩码,如果存在 CT_FLAG_ENROLLEE_SUPPLIES_SUBJECT 标志,则请求者可以指定 SAN。

**TL;DR** 这种情况意味着非特权用户可以请求可用于域身份验证的证书,并且他们可以指定任意替代名称(例如域管理员)。这可能导致为高权限用户(如域管理员)生成有效的证书!

### 示例 <!-- omit in toc -->```
[!] Potentially vulnerable Certificate Templates:
下载工具