
أداة حقن مكتبات مشتركة بسيطة بدون ptrace لأنظمة Linux بمعمارية x64
أداة حقن مكتبة مشتركة بسيطة بدون ptrace لنظام x64 Linux.
linux_injector <mode> <pid> <file>
الوضع
pid
معرّف العملية الهدف. يجب أن تمتلك صلاحيات ptrace عليها (مطلوب للوصول إلى /proc/$pid/mem). ليست متتبعة عبر ptrace، لذا يمكن لعملية أخرى أن تتتبعها بحرية.
الملف
بالنسبة للوضع 1: الوحدة المطلوب حقنها، سيتم تنفيذ dlopen عليها في العملية البعيدة. يُفضَّل استخدام مسار كامل، إذ سيتم استخدام LD_LIBRARY_PATH البعيد خلاف ذلك لحل المسار.
بالنسبة للوضع 2: الوحدة المطلوب حقنها، سيتم تنفيذ dlopen عليها في العملية البعيدة من memfd، حيث سيُنسخ المحتوى.
بالنسبة للوضع 3: shellcode خام للحقن. سيتم تخطيطك على عنوان محاذٍ لـ 16، وستبدأ التنفيذ على خيط مختطف عشوائيًا. ضع خطافات أو أنشئ خيطًا ثم ارجع.
من أجل اختطاف تدفق التحكم، يحتاج هذا البرنامج إلى مرشح للاختطاف. الكود المعروض هنا يستخدم malloc، ويمكن تغيير ذلك بتعديل FUN_NAME وإعادة الترجمة. تأكد من أن الدالة المُعترضة يمكن أن تعمل خلال أقل من 100 مللي ثانية، حتى لا تُستبدل أثناء تنفيذها. وهذا يعني أن استدعاءات مثل sleep أو wait تُعد مرشحات سيئة للـ shellcode الأولي. كما يجب أن يكون طول الدالة المعنية أكبر من 0x50 حتى لا يستبدل الـ shellcode دوالًا أخرى.
يتم دعم كل من Glibc وmusl للعملية الهدف والعملية المصدر. يمكن أن تعمل العملية الهدف داخل حاوية، ويمكنها استخدام libc مختلف. لا يتطلب الوضعان 2 و3 أي مسارات يمكن الوصول إليها من العملية الهدف.
يتطلب الوضع 2 نظام Linux 3.17.
تم الاختبار على Oracle Linux 7 (الوضع 2 غير مدعوم)، وFedora 37، وAlpine Linux 3.17