
تعداد Active Directory مجهول در یک پاس از طریق SAMR و LSARPC — نشست null، بدون اعتبارنامه، با خروجی ساختاریافته قابل استفاده مجدد.
مُعدِّد Active Directory بتمريرة واحدة لجلسة مجهولة (null)،
باستخدام الأنابيب المُسمّاة \samr و\lsarpc. لا يتطلب أي بيانات اعتماد.
لا يفعل شيئًا لا تستطيع الأدوات الكلاسيكية فعله. ما يفعله هو جمع كل شيء في
تشغيل واحد وعرض النتائج بشكل مرتب. في مهمة اختبار اختراق تبدأ بدون حساب نطاق،
وتجد وحدة التحكم بالمجال (DC) عبر DNS، وتريد الصورة الكاملة، الحسابات،
وتفاصيل كل مستخدم، والمجموعات، والسياسات، وأجزاء LSA/DNS، دون تجميع جلسات
rpcclient أو عدة نصوص منفصلة ثم تحليل مخرجاتها يدويًا. هذا يفعل ذلك نيابة عنك
ويكتب مخرجات منظمة وقابلة لإعادة الاستخدام:
manifest.json، وuserlist.txt / computerlist.txt جاهزة
للاستخدام، وقائمة RID محفوظة يمكنك إعادة استخدامها بدلًا من القوة الغاشمة
مرتين.يُرجى تشغيل هذا فقط ضد الأنظمة التي تملكها أو المصرّح لك صراحةً باختبارها. تعداد دليل شخص آخر دون إذن غير مقبول، وقد يكون غير قانوني حسب موقعك.
هناك نسختان تتصرفان بشكل متطابق. استخدم أي مكتبة متوفرة لديك:
adnullenum.py — مبني على impacket.$)
مفصولة عن المستخدمين الحقيقيين.كما يميّز الحسابات المثيرة للاهتمام نيابة عنك: أشياء مثل "كلمة المرور غير مطلوبة"، و"كلمة المرور لا تنتهي أبدًا"، وقابلة لـ AS-REP roasting، وتفويض غير مقيّد، ولم تسجّل الدخول أبدًا، أو وصف يذكر كلمة مرور.
هناك أمران ينبعان بشكل طبيعي من هذا:
كل شيء هنا هو SAMR/LSARPC مجهول قياسي، والأدوات الراسخة تصل بالفعل إلى نفس البيانات. هذا غلاف للراحة، وليس قدرة جديدة، لذا يجدر معرفة البدائل:
--rid-brute، --users،
--pass-pol) يغطي نفس التعداد داخل إطار عمل أكبر بكثير.samrdump.py (المستخدمون/المجموعات/الأسماء المستعارة +
تفاصيل كل مستخدم) وlookupsid.py (تدوير RID عبر LSA). لا تشغيل واحد، ولا
تراجع من SAMR إلى LSA، والمخرجات على stdout فقط.rpcclient يكشف الاستدعاءات الأساسية (queryuser، enumdomusers،
querydominfo، lsaquery، lookupsids، …) لكن بشكل تفاعلي وعلى stdout فقط.
أمر enumdomusers الخاص به يسرد المستخدمين القياسيين بالاسم، بدون حسابات
الأجهزة ($)، والتفاصيل الكاملة تتطلب queryuser واحدًا تلو الآخر. بدون حلقة
تدوير RID مدمجة لا يمكنه استعادة أجهزة الكمبيوتر أو الالتفاف حول التعداد
المقيّد. انظر Doing it by hand.ما يضيفه adnullenum هو التغليف: تشغيل واحد بجلسة null بدلًا من عدة أدوات، SAMR أولًا مع تراجع اختياري إلى LSA، وعلامات منسّقة للحسابات المثيرة للاهتمام، ومخرجات متعددة الصيغ مرتبة يمكنك تسليمها مباشرة إلى الخطوة التالية أو إعادة فتحها لاحقًا. إذا كانت سير العمل هذه تناسب طريقة عملك، استخدمها؛ وإذا كنت تفضّل أداة مُجرَّبة، فاستخدم enum4linux-ng أو NetExec.
تحتاج إلى Python 3.9+ ومكتبة SMB واحدة. البيئة الافتراضية تحافظ على الترتيب:
# clone / copy the files, then from the project folder:
python3 -m venv venv
source venv/bin/activate # Windows: venv\Scripts\activate
pip install impacket # for adnullenum.py
هذا كل شيء. شغّل python3 adnullenum.py --help لرؤية كل شيء.
كل شيء يعمل عبر --mode واحد. الافتراضي هو recon، وهو الشيء الآمن للتشغيل أولًا.
| الوضع | ما تحصل عليه |
|---|---|
recon | معلومات النطاق، والأعداد، وسياسة كلمة المرور/القفل، وتفاصيل LSA/DNS. لا قوة غاشمة. مجرد نظرة حول المكان. |
rids | يجد الحسابات الموجودة ويفرزها إلى مستخدمين / أجهزة كمبيوتر / مجموعات. |
users | ما سبق، بالإضافة إلى تفاصيل كاملة عن كل مستخدم حقيقي وملخص "الحسابات المثيرة للاهتمام". أضف --include-groups لسرد مجموعات كل مستخدم أيضًا. |
groups | مجموعات النطاق والأسماء المستعارة المدمجة مع أعضائها. |
full | كل ما سبق. |
# 1. Is anonymous access open, and how big is this domain?
python3 adnullenum.py 10.0.0.10
# 2. Grab everything
python3 adnullenum.py 10.0.0.10 --mode full
# 3. Just the account inventory, wider net for a big domain
python3 adnullenum.py 10.0.0.10 --mode rids --start-rid 1000 --max-rid 200000
# 4. Go slower to stay quiet
python3 adnullenum.py 10.0.0.10 --mode users --sleep 1 --jitter 40
# 5. Also write JSON (txt and csv are always written)
python3 adnullenum.py 10.0.0.10 --mode full --json
إذا لم يسمح النطاق بسرد المستخدمين مباشرةً (وهو أمر شائع)، تتراجع الأداة إلى تدوير RID: تطلب من DC ترجمة معرّفات الحسابات إلى أسماء على دفعات من 1000. افتراضيًا تمسح تصاعديًا حتى تجد كل ما يقول DC إنه موجود، أو حتى تعود 5000 معرّف متتالية فارغة. يمكنك تثبيتها على نطاق محدد بدلًا من ذلك:
python3 adnullenum.py 10.0.0.10 --mode rids --range 500-50000
بعض وحدات DC ترفض SAMR المجهول تمامًا (تعود enumdomains وترجمة RID بـ
ACCESS_DENIED). لا يستسلم التشغيل:
\lsarpc، الذي يستجيب كثيرًا عندما لا يستجيب SAMR.--lsa-fallback، تعيد الأداة محاولة نفس المسح عبر LSA
LsarLookupSids باستخدام SID النطاق، مما يمنحك جرد الحسابات (الأسماء
والأنواع، بما في ذلك أجهزة الكمبيوتر). إنه معطّل افتراضيًا لأنه تمريرة قوة
غاشمة ثانية؛ بدون العلامة يتوقف التشغيل عند الاستطلاع ويذكر ذلك.العثور على الحسابات هو الجزء البطيء، لذا تحفظ الأداة القائمة (rids.txt) في
مجلد مخرجات كل تشغيل. وجّه تشغيلًا لاحقًا إلى ذلك المجلد باستخدام --session
وسيتخطى القوة الغاشمة ويعيد استخدام ما وجدته بالفعل:
python3 adnullenum.py 10.0.0.10 --mode rids
# -> output/20260917-1530_10.0.0.10_rids/
python3 adnullenum.py 10.0.0.10 --mode users \
--session output/20260917-1530_10.0.0.10_rids
يأخذ --session مجلد تشغيل سابق. (--rid-file يفعل الشيء نفسه من ملف نصي
عادي يحتوي على RID واحد في كل سطر.)
كل تشغيل يُنشئ مجلدًا بطابع زمني تحت output/: