
وضع الكفاح من أجل الحرية: مجموعة أدوات اختراق مفتوحة المصدر
FFM هي أداة تسخير اختراق يمكنك استخدامها خلال مرحلة ما بعد الاستغلال في مشاركة فريق الاختراق الأحمر (Red Teaming). تم اشتقاق فكرة الأداة من محاضرة عام 2007 من @thegrugq.
تم تقديمها في SSTIC 2018 (فيديو) وشرائح العرض المصاحبة متاحة على هذا الرابط. إذا لم تكن على دراية بهذا النوع من الأدوات، يُنصح بشدة بإلقاء نظرة عليها لفهم الغرض من أداة التسخير (hacking harness). جميع التعليقات مضمنة في الشرائح.
هذا المشروع موزع بموجب شروط رخصة GPL v3.
التوثيق الأساسي موجود في هذا الملف README ووحدات الأوامر ضمن commands/.
روابط محاضرة SSTIC المذكورة أعلاه تظل أفضل خلفية عالية المستوى لكيفية استخدام الأداة.
مواد إضافية للشرح متوفرة على:
ice-wzl ساهم بأوامر وتوثيق وإعادة هيكلة خلال تاريخ المشروع.docker مع هذه الأداة.Dockerfile في هذا المستودع سيقلل بشكل كبير من الأخطاء المحتملة.Docker على نظامك المحلي.git clone https://github.com/JusticeRage/FFM.git
cd /FFM
docker build Docker_Install/ -t ffm:ffm
docker image list
REPOSITORY TAG IMAGE ID CREATED SIZE
localhost/ffm ffm fb6dd17e3b91 9 minutes ago 614 MB
docker.io/library/ubuntu 22.04 3b418d7b466a 2 weeks ago 80.3 MB
# لتشغيل الحاوية الجديدة والدخول إلى موجه /bin/bash كمستخدم جذر
docker run -it --entrypoint /bin/bash -u 0 fb6dd17e3b91
passwd لكل من root و neosu neo وستكون جاهزًا. git clone https://github.com/JusticeRage/FFM.git
cd /FFM
pip install -r requirements.txt
الهدف من أداة التسخير (hacking harness) هو العمل كمساعد يقوم بأتمتة المهام الشائعة خلال مرحلة ما بعد الاستغلال، وكذلك حماية المستخدم من الأخطاء التي قد يرتكبها.
إنها أدوات للقشرة (shell). قم بتشغيل ./ffm.py لتفعيلها، ويمكنك البدء في العمل فورًا. الأوامر موزعة عبر وحدات صغيرة ضمن commands/، مع commands/command_manager.py المسؤول عن اكتشافها وتسجيلها. المجموعات الرئيسية هي: التعداد (enumeration)، المساعدة (help)، التخفي (stealth)، النقل (transfer)، والتنفيذ (execution).
هناك أمران يجب أن تعرفهما:
!list لعرض جميع الأوامر التي توفرها الأداة.!list tags لرؤية العلامات المختلفة التي يمكن تصنيف الأوامر تحتها.!list tags
قائمة الأوامر المتاحة:
enumeration
execution
help
stealth
transfer
!list enumeration (أو أي علامة أخرى) لرؤية الأوامر التي تندرج تحت هذه الفئة.!list enumeration
قائمة الأوامر المتاحة:
!backup-hunter: يبحث عن ملفات النسخ الاحتياطي
!info: يعرض معلومات وحدة المعالجة المركزية (CPU)، والبنية (Architecture)، والذاكرة (Memory)، وإصدار النواة (Kernel Version) للجهاز الحالي.
!log: يفعّل أو يعطّل تسجيل مدخلات ومخرجات الأداة في ملف.
!mtime: يعرض الملفات التي تم تعديلها في آخر X دقيقة
!os: يعرض توزيعة نظام التشغيل للجهاز الحالي.
!db-hunter: يبحث عن ملفات .sqlite و .sqlite3 و .db
!sshkeys: يبحث عن مفاتيح SSH الخاصة والعامة على الجهاز الحالي.
!suid: يبحث عن الملفات الثنائية ذات بتات SUID و SGID على الجهاز الحالي.
--snip--
SHIFT+TAB لإتمام الأوامر على الجهاز المحلي. قد يكون هذا مفيدًا إذا كنت متصلاً عبر SSH بجهاز بعيد ولكنك تحتاج إلى الإشارة إلى ملف موجود على جهازك.توفر أداة التسخير هذه بعض الميزات الموضحة أدناه. أثناء شرحها، سيتم أيضًا تقديم فلسفة تصميم الأداة. ليس من المتوقع أن تناسبك جميع الأوامر المطبقة في FFM. لكل شخص طريقته الخاصة في القيام بالأشياء، ومن المحتمل أن يتطلب ضبط الأداة لاحتياجاتك الخاصة تعديل بعض الكود و/أو كتابة عدد قليل من الإضافات (plugins). تم بذل الكثير من الجهد لضمان أن تكون هذه مهمة سهلة.
!os أمر بسيط للغاية يقوم فقط بتشغيل cat /etc/*release* لعرض نظام التشغيل الذي يعمل عليه الجهاز الحالي. ربما يكون أكثر قيمة كدليل على أنه في سياق أداة التسخير، يمكنك تعريف اختصارات (aliases) تعمل عبر حدود الأجهزة. اتصل بـ SSH بأي جهاز واكتب !os وسيتم تنفيذ الأمر. أوامر التعداد موجودة في commands/enumeration_commands.py، وأوامر المساعدة في commands/help_commands.py، والأوامر المتعلقة بالتخفي موزعة عبر commands/stealth_commands.py و commands/notty_sudo.py و commands/log_control.py.!backup-hunter يبحث عن ملفات النسخ الاحتياطي!info يعرض معلومات وحدة المعالجة المركزية (CPU)، والبنية (Architecture)، والذاكرة (Memory)، وإصدار النواة (Kernel Version) للجهاز الحالي.!log يفعّل أو يعطّل تسجيل مدخلات ومخرجات الأداة في ملف. مطبق في commands/log_control.py.!mtime يعرض الملفات التي تم تعديلها في آخر X دقيقة. على سبيل المثال !mtime 5 سيجلب جميع الملفات على الجهاز المحلي (التي لديك صلاحية رؤيتها) التي تم تعديلها في آخر 5 دقائق.!db-hunter يبحث عن ملفات .sqlite و .sqlite3 و .db وملفات قواعد بيانات أخرى!sshkeys يبحث عن مفاتيح SSH الخاصة والعامة على الجهاز الحالي.!suid يبحث عن الملفات الثنائية ذات بتات SUID و SGID على الجهاز الحالي.!strange-dirs يتحقق من الجهاز بدءًا من المسار الذي يحدده المستخدم بحثًا عن أدلة غريبة على المضيف!sudo-version يتحقق من وجود إصدار ضعيف من sudo!vm يتحقق مما إذا كان الجهاز جهازًا افتراضيًا (Virtual Machine)!download [ملف بعيد] [مسار محلي] يحصل على ملف من الجهاز البعيد وينسخه محليًا عبر الطرفية. هذا الأمر أكثر تعقيدًا بعض الشيء لأن التحقق من الأخطاء الأكثر دقة مطلوب، لكنه أمر آخر يمكنك قراءته بسهولة للبدء. موجود في commands/download_file.py. لاحظ أنه يتطلب xxd أو od على الجهاز البعيد ليعمل بشكل صحيح.!download-dir [دليل بعيد] [وجهة محلية] يقوم ببث أرشيف tar لدليل بعيد عبر الطرفية ويستخرجه محليًا دون لمس نظام الملفات البعيد. موجود في commands/download_directory.py. يتطلب tar و base64 على الجهاز البعيد، ويستخدم gzip أيضًا عندما يكون متاحًا.!upload [ملف محلي] [مسار بعيد] يعمل تمامًا مثل الأمر السابق، باستثناء أنه يتم وضع ملف محلي على الجهاز البعيد. موجود في commands/upload_file.py.!sh [سكريبت محلي] يقوم بتشغيل سكريبت شل من الجهاز المحلي في الذاكرة. موجود في commands/remote_script.py.!py [سكريبت محلي] يقوم بتنفيذ سكريبت Python محلي على الجهاز البعيد، ويفعل ذلك بالكامل في الذاكرة. موجود في commands/remote_script.py. اطّلع على مستودعي الآخر للحصول على سكريبتات قد ترغب في استخدامها. يستخدم هذا الأمر بناء جملة متعدد الأسطر مع <<، مما يعني أن القشرة الزائفة (pseudo-shells) التي لا تدعم ذلك (Weevely مثال جيد) ستكسر هذا الأمر بشكل كبير.!py3 [سكريبت محلي] يفعل نفس الشيء تمامًا للأنظمة التي تحتوي على Python3. يستخدم نفس الوحدة commands/remote_script.py.!elf [ملف محلي] يقوم بتشغيل ملف تنفيذي من الجهاز المحلي في الذاكرة باستخدام أي مترجم Python متوافق متاح على الجهاز البعيد. موجود في commands/remote_elf.py.