
x64 Linux के लिए एक सरल ptrace-रहित साझा लाइब्रेरी इंजेक्टर
x64 Linux के लिए एक सरल ptrace-रहित साझा लाइब्रेरी इंजेक्टर।
linux_injector <mode> <pid> <file>
mode
pid
लक्ष्य प्रक्रिया आईडी। इस पर ptrace अधिकार होना चाहिए (/proc/$pid/mem तक पहुँच के लिए आवश्यक)। यह ptrace नहीं किया गया है, इसलिए कोई अन्य प्रक्रिया इसे स्वतंत्र रूप से ptrace कर सकती है।
file
मोड 1 के लिए: इंजेक्ट करने के लिए मॉड्यूल, जिसे रिमोट प्रक्रिया में dlopen किया जाएगा। संभवतः पूर्ण पथ होना चाहिए, क्योंकि अन्यथा रिज़ॉल्यूशन के लिए रिमोट LD_LIBRARY_PATH का उपयोग किया जाता है।
मोड 2 के लिए: इंजेक्ट करने के लिए मॉड्यूल, जिसे रिमोट प्रक्रिया में एक memfd से dlopen किया जाएगा, जहाँ सामग्री कॉपी की जाएगी।
मोड 3 के लिए: इंजेक्ट करने के लिए रॉ शेलकोड। आपको 16-संरेखित पते पर मैप किया जाएगा, और एक यादृच्छिक हाइजैक किए गए थ्रेड पर निष्पादन शुरू होगा। हुक लगाएँ या थ्रेड बनाएँ, फिर लौटें।
कंट्रोल फ्लो हाइजैकिंग के लिए, इस प्रोग्राम को एक हाइजैकिंग उम्मीदवार की आवश्यकता होती है। यहाँ प्रस्तुत कोड malloc का उपयोग करता है; इसे FUN_NAME संपादित करके और पुनः संकलित करके बदला जा सकता है। सुनिश्चित करें कि हुक किया गया फ़ंक्शन 100ms के भीतर चल सके, ताकि निष्पादन के दौरान इसे अधिलेखित न किया जाए। इसका मतलब है कि sleep या wait जैसे कॉल प्रारंभिक शेलकोड के लिए खराब उम्मीदवार हैं। प्रश्न में फ़ंक्शन की लंबाई भी 0x50 से अधिक होनी चाहिए ताकि शेलकोड अन्य फ़ंक्शनों को अधिलेखित न करे।
Glibc और musl लक्ष्य और स्रोत दोनों प्रक्रियाओं के लिए समर्थित हैं। लक्ष्य प्रक्रिया किसी कंटेनर में चल रही हो सकती है, और भिन्न libc का उपयोग कर सकती है। मोड 2 और 3 में लक्ष्य प्रक्रिया के लिए सुलभ किसी पथ की आवश्यकता नहीं होगी।
मोड 2 के लिए Linux 3.17 आवश्यक है।
Oracle Linux 7 (मोड 2 समर्थित नहीं), Fedora 37, और Alpine Linux 3.17 पर परीक्षण किया गया।