
نسخة من الجيل التالي من enum4linux (أداة تعداد Windows/Samba) مع ميزات إضافية مثل تصدير JSON/YAML. موجهة لمحترفي الأمن ولاعبي CTF.
نسخة محسّنة من enum4linux
النص البرمجي enum4linux-ng.py هو إعادة كتابة لأداة enum4linux.pl التي طورها Mark Lowe (سابقًا Portcullis Labs والآن Cisco CX Security Labs)، وهي أداة لجمع المعلومات من أنظمة Windows و Samba، موجهة لمحترفي الأمن ومستخدمي CTF. الأداة هي في الأساس غلاف حول أدوات Samba: nmblookup و net و rpcclient و smbclient.
لقد قمت بإنشائها لأغراض تعليمية شخصية ولحل المشكلات التي واجهتها مع enum4linux.pl. تتمتع الأداة بنفس وظائف الأداة الأصلية (على الرغم من أنها تقوم ببعض الأمور بشكل مختلف). على عكس الأداة الأصلية، تقوم بتحليل جميع مخرجات أدوات Samba وتسمح بتصدير جميع النتائج كملف YAML أو JSON. الفكرة من ذلك هي السماح للأدوات الأخرى باستيراد النتائج ومعالجتها بشكل إضافي. ومن المخطط إضافة ميزات جديدة في المستقبل.
بعض الأمور تم تنفيذها بشكل مختلف مقارنةً بـ enum4linux الأصلي. هذه هي الاختلافات المهمة:
-Gm-A) ولكن يمكن تفعيله باستخدام -R-A بدلاً من -a)أود أن أشكر وأعطي الفضل للأشخاص في Portcullis Labs السابق (الآن Cisco CX Security Labs)، وهم:
بالإضافة إلى ذلك، أود أن أشكر وأعطي الفضل لـ:
لقد كان من الممتع جدًا قراءة كودكم! :)
وأخيرًا وليس آخرًا، أود أن أشكر العديد من الأشخاص الذين ساهموا في الكود، وأبلغوا عن مشاكل، وقدموا اقتراحات مفيدة حول كيفية تحسين الأداة.
إذا كنت تستخدم الأداة: لا تستخدمها لأغراض غير قانونية.
مثال على تشغيل قد يبدو كالتالي:
enum4linux-ng.py -As <target> -oY out
يعرض هذا العرض توضيحًا لتشغيل ضد تثبيت Windows Server 2012 R2 القياسي. يتم استخدام الأمر التالي:
enum4linux-ng.py 192.168.125.131 -u Tester -p 'Start123!' -oY out
تم إنشاء مستخدم 'Tester' بكلمة مرور 'Start123!'. تم السماح بالوصول إلى جدار الحماية. بمجرد انتهاء التعداد، أقوم بالتمرير لأعلى لجعل النتائج أكثر وضوحًا. نظرًا لعدم تحديد خيار تعداد آخر، سيفترض الأداة -A الذي يتصرف مثل خيار -a في enum4linux. يتم تمرير المستخدم وكلمة المرور. سيقوم خيار -oY بتصدير جميع البيانات التي تم تعدادها كملف YAML لمزيد من المعالجة في out.yaml. تكتشف الأداة تلقائيًا في البداية أن LDAP لا يعمل على الجهاز البعيد. لذلك ستتخطى أي فحوصات LDAP إضافية والتي ستكون عادةً جزءًا من التعداد الافتراضي.

العرض التوضيحي الثاني يظهر تشغيل ضد Metasploitable 2. يتم استخدام الأمر التالي:
enum4linux-ng.py 192.168.125.145 -A -C
هذه المرة يتم استخدام خيارات -A و -C. بينما الأول يتصرف مثل خيار -a في enum4linux، فإن الثاني سيفعل تعداد الخدمات. هذه المرة لم يتم تقديم بيانات اعتماد. تكتشف الأداة تلقائيًا أنها بحاجة لاستخدام SMBv1. لا يتم كتابة أي ملف YAML أو JSON. مرة أخرى أقوم بالتمرير لأعلى لجعل النتائج أكثر وضوحًا.

usage: enum4linux-ng.py [-h] [-A] [-As] [-U] [-G] [-Gm] [-S] [-C] [-P] [-O] [-L] [-I] [-R [BULK_SIZE]] [-N] [-w DOMAIN] [-u USER]
[-p PW | -K TICKET_FILE | -H NTHASH] [--local-auth] [-d] [-k USERS] [-r RANGES] [-s SHARES_FILE] [-t TIMEOUT] [-v] [--keep]
[-oJ OUT_JSON_FILE | -oY OUT_YAML_FILE | -oA OUT_FILE]
host
هذه الأداة هي إعادة كتابة لـ enum4linux.pl الخاصة بـ Mark Lowe، وهي أداة لجمع المعلومات من أنظمة Windows و Samba. وهي في الأساس غلاف حول أدوات Samba nmblookup, net, rpcclient و smbclient. على عكس الأداة الأصلية، تسمح بتصدير نتائج التعداد كملف YAML أو JSON، بحيث يمكن معالجتها بشكل إضافي بواسطة أدوات أخرى. تحاول الأداة القيام بتعداد 'ذكي'. تتحقق أولاً مما إذا كان SMB أو LDAP متاحًا على الهدف. اعتمادًا على نتيجة هذا الفحص، ستتخطى ديناميكيًا بعض الفحوصات (مثل فحوصات LDAP إذا لم يكن LDAP قيد التشغيل). إذا كان SMB متاحًا، ستتحقق دائمًا مما إذا كان يمكن إنشاء جلسة أم لا. إذا لم يمكن إنشاء جلسة، ستوقف الأداة التعداد. يمكن مقاطعة عملية التعداد باستخدام CTRL+C. إذا تم توفير الخيارات -oJ أو -oY، ستقوم الأداة بكتابة حالة التعداد الحالية إلى ملف JSON أو YAML عند استلام SIGINT الناتج عن CTRL+C. تم إنشاء الأداة لمحترفي الأمن ومستخدمي CTF. الاستخدام غير القانوني محظور.
الوسائط الموضعية:
host
الخيارات:
-h, --help عرض رسالة المساعدة هذه والخروج
-A القيام بكل التعداد البسيط بما في ذلك nmblookup (-U -G -S -P -O -N -I -L). يتم تمكين هذا الخيار إذا لم تقدم أي خيار آخر.
-As القيام بكل التعداد البسيط القصير بدون بحث أسماء NetBIOS (-U -G -S -P -O -I -L)
-U الحصول على المستخدمين عبر RPC
-G الحصول على المجموعات عبر RPC
-Gm الحصول على المجموعات مع أعضائها عبر RPC
-S الحصول على المشاركات عبر RPC
-C الحصول على الخدمات عبر RPC
-P الحصول على معلومات سياسة كلمة المرور عبر RPC
-O الحصول على معلومات نظام التشغيل عبر RPC
-L الحصول على معلومات إضافية عن المجال عبر LDAP/LDAPS (لوحدات التحكم بالمجال فقط)
-I الحصول على معلومات الطابعة عبر RPC
-R [BULK_SIZE] تعداد المستخدمين عبر تشغيل RID. اختياريًا، يحدد حجم طلب البحث.
-N القيام ببحث أسماء NetBIOS (مشابه لـ nbtstat) ومحاولة استرداد مجموعة العمل من المخرجات
-w DOMAIN تحديد مجموعة العمل/المجال يدويًا (عادةً ما يتم العثور عليه تلقائيًا)
-u USER تحديد اسم المستخدم للاستخدام (الافتراضي "")
-p PW تحديد كلمة المرور للاستخدام (الافتراضي "")
-K TICKET_FILE محاولة المصادقة باستخدام Kerberos، مفيد فقط في بيئة Active Directory (ملاحظة: يجب إعداد DNS بشكل صحيح لكي يعمل هذا الخيار)
-H NTHASH محاولة المصادقة باستخدام الهاش
--local-auth المصادقة محليًا على الهدف
-d الحصول على معلومات مفصلة للمستخدمين والمجموعات، ينطبق على -U و -G و -R
-k USERS المستخدم (المستخدمون) الموجودون على النظام البعيد (الافتراضي: administrator,guest,krbtgt,domain admins,root,bin,none). يستخدم للحصول على SID باستخدام "lookupsids"
-r RANGES نطاقات RID للتعداد (الافتراضي: 500-550,1000-1050)
-s SHARES_FILE تخمين قوة المشاركات
-t TIMEOUT تعيين مهلة الاتصال بالثواني (الافتراضي: 10 ثوانٍ)
-v مطوّل، عرض أوامر أدوات samba الكاملة التي يتم تشغيلها (net, rpcclient, إلخ.)
--keep لا تحذف ملف تكوين Samba الذي تم إنشاؤه أثناء تشغيل الأداة بعد التعداد (مفيد مع -v)
-oJ OUT_JSON_FILE كتابة المخرجات إلى ملف JSON (يتم إضافة الامتداد تلقائيًا)
-oY OUT_YAML_FILE كتابة المخرجات إلى ملف YAML (يتم إضافة الامتداد تلقائيًا)
-oA OUT_FILE كتابة المخرجات إلى ملفي YAML و JSON (يتم إضافة الامتدادات تلقائيًا)
هناك عدة طرق لتثبيت الأداة. إما أن تأتي الأداة كحزمة مع توزيعة Linux الخاصة بك أو تحتاج إلى تثبيت يدوي.
apt install enum4linux-ng
pacman -S enum4linux-ng
(تم اختباره على NixOS 20.9)
nix-env -iA nixos.enum4linux-ng
إذا كانت توزيعة Linux الخاصة بك لا توفر حزمة، يمكن استخدام طرق التثبيت اليدوي التالية بدلاً من ذلك.
تستخدم الأداة أدوات عميل samba، وهي:
يجب أن تكون هذه متاحة لجميع توزيعات Linux. عادةً ما تسمى الحزمة smbclient أو samba-client أو ما شابه ذلك.
بالإضافة إلى ذلك، ستحتاج إلى حزم Python التالية:
لمعالجة أسرع لـ YAML (اختياري!) قم أيضًا بتثبيت (يجب أن يأتي كاعتمادية لـ PyYaml في معظم توزيعات Linux):
بعض الأمثلة لتثبيتات توزيعات Linux محددة مذكورة أدناه. بدلاً من ذلك، الطرق المستقلة عن التوزيعة (python pip, python virtual env و Docker) ممكنة.
بالنسبة لجميع أمثلة التوزيعات أدناه، فإن LibYAML هو بالفعل اعتمادية لحزمة PyYaml المقابلة وسيتم تثبيتها تلقائيًا.
pacman -S smbclient python-ldap3 python-yaml impacket
(تم اختباره على Fedora Workstation 31)
dnf install samba-common-tools samba-client python3-ldap3 python3-pyyaml python3-impacket
(لـ Ubuntu 18.04 أو أقل استخدم Docker أو بيئة Python الافتراضية)
apt install smbclient python3-ldap3 python3-yaml python3-impacket
اعتمادًا على توزيعة Linux، ستحتاج إما إلى pip3 أو pip:
pip install pyyaml ldap3 impacket
بديل:
pip install -r requirements.txt
تذكر أنك لا تزال بحاجة إلى تثبيت أدوات samba كما هو مذكور أعلاه.
git clone https://github.com/cddmp/enum4linux-ng
cd enum4linux-ng
python3 -m venv venv
source venv/bin/activate
pip install wheel
pip install -r requirements.txt
ثم قم بتشغيل عبر:
python3 enum4linux-ng.py -As <target>
تذكر أنك لا تزال بحاجة إلى تثبيت أدوات samba كما هو مذكور أعلاه. بالإضافة إلى ذلك، تأكد من تشغيل source venv/bin/activate في كل مرة تفتح فيها غلافًا جديدًا. وإلا سيتم استخدام مترجم Python الخاطئ مع المكتبات الخاطئة (النظام الخاص بك بدلاً من بيئة Python الافتراضية).
git clone https://github.com/cddmp/enum4linux-ng
cd enum4linux-ng
docker build . --tag enum4linux-ng
بمجرد الانتهاء، يمكن أن يبدو مثال التشغيل كالتالي:
docker run -t enum4linux-ng -As <target>
أحيانًا، ستقوم الأداة بإخراج رسائل خطأ مثل:
Could not <some text here>, please open a GitHub issue
في هذه الحالة، يرجى إعادة تشغيل الأداة مع الخيارين -v و --keep. سيسمح لك ذلك برؤية الأمر الدقيق الذي تسبب في رسالة الخطأ. انسخ ذلك الأمر، وقم بتشغيله في الطرفية الخاصة بك وأعد توجيه المخرجات إلى ملف. ثم افتح مشكلة GitHub هنا، مع لصق الأمر وإرفاق ملف مخرجات الخطأ. يساعد ذلك في تصحيح المشكلة. بالطبع، يمكنك تصحيحها بنفسك وتقديم طلب سحب.
إذا كانت الأداة مفيدة لك، فأنا سعيد إذا تركت نجمة!