ADCS攻击指北-权限维持
字数 1314 2025-08-29 08:30:05

ADCS攻击指北-权限维持技术文档

1. 黄金证书攻击

1.1 提取CA证书及私钥

方法一:使用certsrv.msc备份

  • 在CA服务器上使用certsrv.msc工具备份整个CA

方法二:使用Mimikatz提取

  1. 运行Mimikatz提取CA私钥
  2. 注意识别正确的证书:Subject和Issuer必须一致
  3. 导出证书(通常会导出2个证书)

方法三:使用SharpDPAPI提取

  1. 运行SharpDPAPI提取私钥
  2. 同样需要验证Issuer和Subject的一致性
  3. 将私钥保存为PEM格式
  4. 使用以下命令转换为PFX文件:
    openssl pkcs12 -in cert.pem -keyex -CSP "Microsoft Enhanced Cryptographic Provider v1.0" -export -out cert.pfx
    

1.2 证书生成

  1. 获取CA私钥后,使用ForgeCert工具生成伪造证书
  2. 生成管理员证书文件

1.3 请求证书

  • 当目标系统未设置智能卡认证时,可使用SChannel进行身份验证
  • 使用Rubeus工具获取TGT票据

2. 白银证书攻击

2.1 添加权限

  1. 需要对NTAuthCertificates对象设置权限
  2. 可通过PowerShell添加权限:
    # 示例PowerShell命令
    Add-ADPermission -Identity "CN=NTAuthCertificates,CN=Public Key Services,CN=Services,CN=Configuration,DC=domain,DC=com" -User "stu1" -AccessRights WriteProperty -Properties "cACertificate"
    
  3. 如果不添加权限,将无法添加自签CA证书

2.2 自签证书

  1. 使用OpenSSL创建伪造CA证书:

    • 只需填写Common Name字段,其他字段留空
    openssl req -new -x509 -keyout fakeCA.key -out fakeCA.cer -days 365 -nodes
    
  2. 使用certutil添加伪造CA:

    certutil -dspublish -f fakeCA.cer RootCA
    
  3. 在域控制器上将伪造CA添加到受信任的颁发证书机构

  4. 手动更新注册表:

    certutil -pulse
    
  5. 创建CA配置文件(ca.conf)用于请求证书吊销列表(CRL)

  6. 启动Web服务供certipy请求本地CRL文件

2.3 请求证书

  • 使用certipy请求管理员证书,成功后可获取管理员hash

3. Shadow Credentials攻击

3.1 使用PyWhisker工具

  1. 修改目标对象的msDS-KeyCredentialLink属性
  2. 要求服务器版本>=2016
  3. 获取证书后可使用Rubeus等进行Pass-The-Ticket攻击

3.2 NTLM Relay强制认证

  1. 通过NTLM Relay到LDAP/LDAPS为客户端设置msDS-KeyCredentialLink
  2. 由于KB957097补丁阻止了SMB到SMB的中继,需将--shadow-target设为辅助域控
  3. 使用PetitPotam强制DC02$向攻击机发起NTLM认证
  4. 查看NTLM Relay结果,确认msDS-KeyCredentialLink属性已添加

4. 工具与命令总结

4.1 关键工具

  • Mimikatz:提取CA私钥
  • SharpDPAPI:提取私钥
  • ForgeCert:生成伪造证书
  • Rubeus:请求TGT票据
  • certipy:请求证书
  • PyWhisker:修改KeyCredentialLink属性
  • PetitPotam:强制NTLM认证

4.2 常用命令

# PEM转PFX
openssl pkcs12 -in cert.pem -keyex -CSP "Microsoft Enhanced Cryptographic Provider v1.0" -export -out cert.pfx

# 添加伪造CA
certutil -dspublish -f fakeCA.cer RootCA

# 更新注册表
certutil -pulse

5. 防御建议

  1. 限制对NTAuthCertificates对象的写权限
  2. 监控CA证书的异常导出行为
  3. 及时安装安全补丁(KB957097等)
  4. 限制智能卡认证配置
  5. 监控msDS-KeyCredentialLink属性的异常修改
  6. 实施NTLM Relay防护措施

6. 参考资源

  • 微信公众号:赛博海妖(获取更多技术文章)
  • 先知社区技术文档
  • 相关工具GitHub仓库
ADCS攻击指北-权限维持技术文档 1. 黄金证书攻击 1.1 提取CA证书及私钥 方法一:使用certsrv.msc备份 在CA服务器上使用certsrv.msc工具备份整个CA 方法二:使用Mimikatz提取 运行Mimikatz提取CA私钥 注意识别正确的证书:Subject和Issuer必须一致 导出证书(通常会导出2个证书) 方法三:使用SharpDPAPI提取 运行SharpDPAPI提取私钥 同样需要验证Issuer和Subject的一致性 将私钥保存为PEM格式 使用以下命令转换为PFX文件: 1.2 证书生成 获取CA私钥后,使用ForgeCert工具生成伪造证书 生成管理员证书文件 1.3 请求证书 当目标系统未设置智能卡认证时,可使用SChannel进行身份验证 使用Rubeus工具获取TGT票据 2. 白银证书攻击 2.1 添加权限 需要对NTAuthCertificates对象设置权限 可通过PowerShell添加权限: 如果不添加权限,将无法添加自签CA证书 2.2 自签证书 使用OpenSSL创建伪造CA证书: 只需填写Common Name字段,其他字段留空 使用certutil添加伪造CA: 在域控制器上将伪造CA添加到受信任的颁发证书机构 手动更新注册表: 创建CA配置文件(ca.conf)用于请求证书吊销列表(CRL) 启动Web服务供certipy请求本地CRL文件 2.3 请求证书 使用certipy请求管理员证书,成功后可获取管理员hash 3. Shadow Credentials攻击 3.1 使用PyWhisker工具 修改目标对象的msDS-KeyCredentialLink属性 要求服务器版本>=2016 获取证书后可使用Rubeus等进行Pass-The-Ticket攻击 3.2 NTLM Relay强制认证 通过NTLM Relay到LDAP/LDAPS为客户端设置msDS-KeyCredentialLink 由于KB957097补丁阻止了SMB到SMB的中继,需将--shadow-target设为辅助域控 使用PetitPotam强制DC02$向攻击机发起NTLM认证 查看NTLM Relay结果,确认msDS-KeyCredentialLink属性已添加 4. 工具与命令总结 4.1 关键工具 Mimikatz:提取CA私钥 SharpDPAPI:提取私钥 ForgeCert:生成伪造证书 Rubeus:请求TGT票据 certipy:请求证书 PyWhisker:修改KeyCredentialLink属性 PetitPotam:强制NTLM认证 4.2 常用命令 5. 防御建议 限制对NTAuthCertificates对象的写权限 监控CA证书的异常导出行为 及时安装安全补丁(KB957097等) 限制智能卡认证配置 监控msDS-KeyCredentialLink属性的异常修改 实施NTLM Relay防护措施 6. 参考资源 微信公众号:赛博海妖(获取更多技术文章) 先知社区技术文档 相关工具GitHub仓库