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

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

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

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

دليل الأدوات

الفئات

عرض جميع الفئات
Loading categories
LdapRelayScan — التحقق من حمايات LDAP المتعلقة بترحيل مصادقة NTLM | Kitploit
أدوات/GitHubGitHub/zyn3rgy/ldaprelayscan
الاستطلاعماسحات الثغرات الأمنيةتدقيق التكوينجمع المعلوماتأمن الشبكاتاختبار الاختراقالمصادقةالفريق الأحمر
GitHubzyn3rgy/ldaprelayscan

LdapRelayScan

التحقق من حمايات LDAP المتعلقة بترحيل مصادقة NTLM

عرض المستودع
53183منذ سنة واحدةتمت المراجعة من قبل Kitploit

الأكثر شعبية

عرض الكل →

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

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

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

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

LDAP Relay Scan

أداة لفحص وحدات تحكم المجال (Domain Controllers) بحثًا عن حمايات خادم LDAP المتعلقة بترحيل مصادقة NTLM. إذا كنت مهتمًا بتفاصيل التعداد القائم على الأخطاء، راجع بالأسفل. للحصول على تفاصيل حول ما يمكن فعله عند تحديد غياب حمايات LDAP، راجع قسم المراجع.

ملخص

توجد حمايتان من جهة الخادم عند محاولة ترحيل مصادقة NTLM عبر LDAP على وحدات تحكم المجال. تتضمن حمايات LDAP التي تحاول هذه الأداة تعدادها:

  • LDAPS - ربط القناة (channel binding)
  • LDAP - متطلبات توقيع الخادم (server signing requirements)

يمكن تحديد فرض ربط القناة لـ LDAP عبر SSL/TLS من منظور غير مصادَق (unauthenticated). وذلك لأن الخطأ المرتبط بعميل LDAP الذي يفتقر إلى القدرة على إجراء ربط القناة بشكل صحيح سيحدث قبل التحقق من بيانات الاعتماد أثناء عملية ربط LDAP.

ومع ذلك، لتحديد ما إذا كانت الحماية من جهة الخادم لـ LDAP القياسي مفروضة (متطلبات سلامة توقيع الخادم)، يجب أولاً التحقق من بيانات اعتماد العميل أثناء ربط LDAP. يتم تحديد الخطأ المحتمل الذي يشير إلى فرض هذه الحماية من منظور مصادَق (authenticated).

TL;DR - يمكن فحص LDAPS بدون مصادقة، بينما يتطلب فحص LDAP مصادقة.

التثبيت

يُوصى باستخدام Docker أو بيئة Python افتراضية عند تشغيل هذا المشروع.

Docker

  1. تأكد من تثبيت Docker على جهازك
  2. استنسخ المستودع وانتقل إلى الدليل
    • git clone https://github.com/zyn3rgy/LdapRelayScan.git && cd LdapRelayScan
  3. أنشئ حاوية Docker
    • docker build -f docker/Dockerfile -t ldaprelayscan .
  4. [اختياريًا] تأكد من أن البرنامج النصي يعمل بشكل صحيح
    • docker run ldaprelayscan -h

بيئة Python الافتراضية

  1. تأكد من تثبيت Python virtualenv على جهازك
  2. استنسخ المستودع وانتقل إلى الدليل
    • git clone https://github.com/zyn3rgy/LdapRelayScan.git && cd LdapRelayScan
  3. أنشئ بيئة Python افتراضية للمشروع
    • virtualenv env
  4. فعّل بيئة Python الافتراضية
    • source venv/bin/activate
  5. ثبّت تبعيات الإصدارات المحددة بدقة
    • python3 -m pip install -r requirements_exact.txt
  6. [اختياريًا] تأكد من أن البرنامج النصي يعمل بشكل صحيح
    • python3 LdapRelayScan.py -h

الاستخدام

ملاحظة: يجب أن يعمل تحليل DNS بشكل صحيح. إذا كنت تستخدم التوجيه عبر SOCKS أو تعمل على مضيف غير منضم إلى مجال، فتأكد من أن هذا يعمل.

تتضمن الأداة طريقتين: LDAPS (الافتراضية)، وBOTH. تتطلب LDAPS عنوان IP لوحدة تحكم المجال فقط، لأن هذا الفحص يمكن إجراؤه بدون مصادقة. تتطلب طريقة BOTH اسم مستخدم وكلمة مرور أو تجزئة NT. مجال Active Directory غير مطلوب، حيث سيتم تحديده عبر ربط LDAP مجهول.

root@kitploit:~
arguments:
  -h, --help        show this help message and exit
  -method method    LDAPS or BOTH - LDAPS checks for channel binding, BOTH checks for LDAP signing and LDAP channel binding [authentication required]
  -dc-ip DC_IP      DNS Nameserver on network. Any DC's IPv4 address should work.
  -u username       Domain username value.
  -timeout timeout  The timeout for MSLDAP client connection.
  -p password       Domain username value.
  -nthash nthash    NT hash of password

أمثلة

أمثلة الاستخدام الأساسية / بيئة Python الافتراضية

root@kitploit:~
python3 LdapRelayScan.py -method LDAPS -dc-ip 10.0.0.20
python3 LdapRelayScan.py -method BOTH -dc-ip 10.0.0.20 -u domainuser1 
python3 LdapRelayScan.py -method BOTH -dc-ip 10.0.0.20 -u domainuser1 -p badpassword2
python3 LdapRelayScan.py -method BOTH -dc-ip 10.0.0.20 -u domainuser1 -nthash e6ee750a1feb2c7ee50d46819a6e4d25

أمثلة استخدام Docker

ملاحظة: يتم تمرير إمكانية استخدام SOCKS عبر متغير البيئة PROXY_CONFIG. إذا كانت SOCKS مطلوبة، فستحتاج أيضًا إلى استخدام الخيار --network=host لتوجيه حركة المرور بشكل صحيح. انظر الأمثلة أدناه.

root@kitploit:~
docker run ldaprelayscan -h
docker run ldaprelayscan -dc-ip 10.0.0.20
docker run ldaprelayscan -dc-ip 10.0.0.20 -method BOTH -u domainuser1 -p secretpass
docker run -e PROXY_CONFIG='socks5 127.0.0.1 9050' --network=host ldaprelayscan -dc-ip 10.0.0.20 -method BOTH -u domainuser1 -p secretpass

خصوصيات التعداد القائم على الأخطاء

[LDAPS] متطلبات رمز ربط القناة

على وحدة تحكم المجال التي تم تحديثها منذ CVE-2017-8563، كانت هناك إمكانية فرض ربط قناة LDAPS. تُسمى السياسة المحددة Domain Controller: LDAP server channel binding token requirements ويمكن ضبطها على Never أو When supported أو Always. وهذا غير مطلوب افتراضيًا (وقت كتابة هذا النص).

سمح فك تشفير ومراقبة حركة مرور LDAP عبر SSL/TLS على وحدة تحكم المجال بتحديد الفرق في الأخطاء أثناء محاولات الربط عندما يكون ربط القناة مفروضًا مقابل عندما لا يكون مفروضًا. عند محاولة الربط بـ LDAP عبر SSL/TLS باستخدام بيانات اعتماد غير صالحة، ستتلقى resultCode 49 المتوقع، وسترى في محتويات رسالة الخطأ data 52e. ومع ذلك، عندما يكون ربط القناة مفروضًا ولا يقوم عميل LDAP بحساب وتضمين رمز ربط القناة (CBT)، فسيظل resultCode 49، لكن محتويات رسالة الخطأ ستحتوي على data 80090346 مما يعني SEC_E_BAD_BINDINGS أو أن روابط قناة واجهة مزود الدعم (SSPI) التي قدمها العميل كانت غير صحيحة.

ملاحظة: إشارات إلى خطأ data 8009034 أثناء ربط LDAP عبر SSL/TLS [1] [2] [3] [4] [5]

"Never" مقابل "When supported" مقابل "Always"

هذا الخطأ المحدد يجعل من السهل التعامل مع الحالة عندما تكون سياسة Domain Controller: LDAP server channel binding token requirements مضبوطة على Always. ببساطة، حاول إجراء ربط LDAPS قائم على NTLM باستخدام عميل لا يدعم ربط القناة وابحث عن data 80090346 داخل الخطأ في الاستجابة. ولكن ماذا لو لم تكن السياسة مضبوطة على Always، ماذا لو كانت مضبوطة على When supported؟ الإجابة هي: اربط بـ LDAPS باستخدام مصادقة قائمة على NTLM وقم عمدًا بحساب خاطئ لمعلومات ربط القناة.

أولاً، نحتاج إلى عميل LDAP يدعم ربط القناة. سيتم استخدام تنفيذ SkelSec's لهذا في msldap لتنفيذ PoC. يظهر ربط القناة كقيمة AV_PAIR أثناء عملية تحدي/استجابة NTLM، وتحديدًا داخل Type 3 أو AUTHENTICATE_MESSAGE. إليك نظرة أخرى على بعض حركة مرور LDAPS المفككة على وحدة تحكم المجال لمعرفة كيف تبدو محاولة الربط من عميل يدعم ربط القناة:

الحساب الخاطئ المتعمد لهذه القيمة، عندما تكون السياسة المعنية مضبوطة على When supported، سيُنتج نفس خطأ data 80090346. وهذا يمنحنا القدرة على التمييز بين جميع الإعدادات الممكنة لهذه السياسة كما هي موجودة حاليًا، من منظور غير مصادَق. كيفية حساب هذه القيمة بشكل خاطئ عن قصد أمر مهم، لأن مجرد استبدال القيمة يدويًا أثناء تحدي/استجابة سيبطل MIC.

[LDAP] متطلبات توقيع الخادم

على وحدة تحكم المجال، تكون السياسة المسماة Domain Controller: LDAP server signing requirements مضبوطة على None أو Require signing أو غير معرّفة فقط. عندما تكون غير معرّفة، يكون الافتراضي هو عدم اشتراط التوقيع (وقت كتابة هذا النص). الخطأ الذي يحدد أن هذه الحماية مطلوبة هو عندما تستجيب محاولة ربط Sicily NTLM أو بسيط بـ resultCode بقيمة 8، مما يشير إلى strongerAuthRequired. يحدث هذا فقط إذا تم التحقق من بيانات الاعتماد أثناء ربط LDAP.

المراجع

بعض الموارد القيّمة للغاية لوضع هذه المادة في سياقها وفهم كيفية توافقها مع سيناريوهات الهجوم الشائعة.

  • @HackAndDo - ترحيل NTLM
  • @_nwodtuhs - خريطة ذهنية لترحيل NTLM
  • @_dirkjan - PrivExchange، شرح ADCS ESC8، شرح ترحيل NTLM لـ RBCD، والمزيد
  • @domchell - تنفيذ Farmer وشرح
  • @elad_shamir - شروحات شاملة لإساءة استخدام RBCD في سيناريوهات متعددة، وبيانات اعتماد الظل (shadow credentials)
  • @tifkin_ و@topotam77 - طرق إجبار مصادقة NTLM
  • @skelsec - msldap مع دعم ربط القناة
تنزيل الأداة