
बिना ptrace के एक जीवित लिनक्स प्रक्रिया में एक साझा पुस्तकालय (अर्थात मनमाना कोड) इंजेक्ट करें।
एक साझा लाइब्रेरी (अर्थात् मनमाना कोड) को बिना ptrace के एक चालू लिनक्स प्रक्रिया में इंजेक्ट करें। Cexigua और linux-inject सहित अन्य चीजों से प्रेरित।
.___.__ .__ __ __
__| _/| | |__| ____ |__| ____ _____/ |_ ______ ___.__.
/ __ | | | | |/ \ | |/ __ \_/ ___\ __\ \____ < | |
/ /_/ | | |_| | | \ | \ ___/\ \___| | | |_> >___ |
\____ | |____/__|___| /\__| |\___ >\___ >__| /\| __// ____|
\/ \/\______| \/ \/ \/|__| \/
source: https://github.com/DavidBuchanan314/dlinject
usage: dlinject.py [-h] [--stopmethod {sigstop,cgroup_freeze,none}]
pid /path/to/lib.so
Inject a shared library into a live process.
positional arguments:
pid The pid of the target process
/path/to/lib.so Path of the shared library to load (note: must be
relative to the target process's cwd, or absolute)
optional arguments:
-h, --help show this help message and exit
--stopmethod {sigstop,cgroup_freeze,none}
How to stop the target process prior to shellcode
injection. SIGSTOP (default) can have side-effects.
cgroup freeze requires root. 'none' is likely to cause
race conditions.
क्योंकि मैं कर सकता हूं।
विभिन्न एंटी-ptrace तकनीकें हैं, जिनसे यह केवल ptrace का उपयोग न करके बचता है।
मुझे ptrace पसंद नहीं है।
LD_PRELOAD का उपयोग करना कभी-कभी मुश्किल या असंभव हो सकता है, यदि आप जिस प्रक्रिया में इंजेक्ट करना चाहते हैं वह किसी अन्य प्रक्रिया द्वारा स्वच्छ वातावरण में स्पॉन की गई हो।
लक्ष्य प्रक्रिया को स्टॉप सिग्नल भेजें। (वैकल्पिक)
_dl_open() प्रतीक का पता लगाएं।
/proc/[pid]/syscall के माध्यम से RIP और RSP प्राप्त करें।
/proc/[pid]/mem से पढ़कर स्टैक के एक हिस्से और उस कोड का बैकअप बनाएं जिसे हम अपने शेलकोड से ओवरराइट करने वाले हैं।
प्राथमिक और द्वितीयक शेलकोड बफर जेनरेट करें।
/proc/[pid]/mem पर लिखकर RIP पर प्राथमिक शेलकोड डालें।
प्राथमिक शेलकोड:
mmap() के माध्यम से द्वितीयक शेलकोड लोड करता है।द्वितीयक शेलकोड:
_dl_open() को कॉल करता है। कोई भी कंस्ट्रक्टर लोड होने पर सामान्य रूप से निष्पादित होंगे।SIGSTOP के समय था।SIGSTOP भेजने से अवांछित दुष्प्रभाव हो सकते हैं, उदाहरण के लिए यदि कोई अन्य थ्रेड waitpid() पर प्रतीक्षा कर रहा है। --stopmethod=cgroup_freeze विकल्प इससे बचता है, लेकिन इसके लिए रूट की आवश्यकता होती है (कम से कम अधिकांश डिस्ट्रोस पर)।
मुझे पूरी तरह से यकीन नहीं है कि यह जटिल मल्टी-थ्रेडेड अनुप्रयोगों के साथ कैसे इंटरैक्ट करेगा। निश्चित रूप से टूटने की संभावना है।
केवल x86-64 लिनक्स (अभी के लिए - 32-बिट समर्थन संभावित रूप से जोड़ा जा सकता है)।
रूट की आवश्यकता है, या आराम से YAMA कॉन्फ़िगरेशन (echo 0 | sudo tee /proc/sys/kernel/yama/ptrace_scope परीक्षण के दौरान उपयोगी है)।
यदि लक्ष्य प्रक्रिया सैंडबॉक्स की गई है (जैसे seccomp फिल्टर), तो उसके पास दूसरे चरण के शेलकोड को mmap() करने या लाइब्रेरी को dlopen() करने की अनुमति नहीं हो सकती है।