
🌸 आसानी से शेलकोड बनाने हेतु इंटरैक्टिव शेलकोडिंग वातावरण
Shellen एक इंटरैक्टिव शेलकोडिंग वातावरण है। यदि आप शेलकोड लिखने के लिए एक सुविधाजनक टूल चाहते हैं, तो shellen आपका मित्र हो सकता है। Shellen का उपयोग असेंबली या डिसअसेंबली टूल के रूप में भी किया जा सकता है।
keystone और capstone इंजन का उपयोग shellen के सभी कार्यों के लिए किया जाता है।
Shellen केवल python3 पर काम करता है। python2 समर्थन भविष्य में आ सकता है।
सबसे पहले, आपको shellen की निर्भरताएँ इंस्टॉल करनी चाहिए:
$ sudo apt-get install cmake python3-dev python3-setuptools
आप pip3 का उपयोग करके shellen का स्थिर संस्करण इंस्टॉल कर सकते हैं:
$ sudo pip3 install shellen
या यदि आपके पास पहले से सभी आवश्यक पैकेज हैं (देखें आवश्यकताएँ):
$ python3 setup.py install
यदि आपको keystone-engine इंस्टॉल करने में कोई समस्या आती है, तो आपको keystone-engine को कंपाइल करना चाहिए (keystone रिपॉज़िटरी में COMPILE.md फ़ाइल देखें)
Shellen और इसके आवश्यक पैकेज इंस्टॉल करने के बाद, आप अपने टर्मिनल में निम्नलिखित टाइप करके shellen चला सकते हैं:
$ shellen
आप shellen के उपयोग के बारे में जानकारी प्राप्त करने के लिए shellen का help कमांड चला सकते हैं।
Shellen निर्देशों को असेंबल और डिसअसेंबल करता है, इसलिए दो उपयोग मोड हैं: क्रमशः asm और dsm। अन्य विशेषताएँ भी हैं जिनमें syscall तालिकाओं की खोज और सामान्य शेलकोड की खोज शामिल है।
Shellen के पास एक उपयोगी प्रॉम्प्ट है जो वर्तमान मोड, OS (syscalls के लिए ऑपरेटिंग सिस्टम) और वर्तमान मोड की चुनी गई आर्किटेक्चर प्रदर्शित करता है। Shellen का प्रॉम्प्ट इस प्रकार दिखता है:
L:asm:x86_32 >
आप अपने इनपुट को वैसे ही संपादित कर सकते हैं जैसे आप टर्मिनल में टाइप कर रहे हों। साथ ही, shellen आपके कमांड इतिहास को रिकॉर्ड करता है (अपने पिछले कमांड देखने के लिए बस अपना up arrow दबाएँ)।
प्रॉम्प्ट में L, Linux का संक्षिप्त नाम है। नीचे अन्य सभी OS नाम सूचीबद्ध हैं:
L Linux हैW Windows हैM MacOS हैयदि आप OS बदलना चाहते हैं, तो निम्नानुसार setos [linux/windows/macos] टाइप करें:
L:asm:x86_32 > setos windows
[+] OS changed to windows.
वर्तमान मोड बदलने के लिए, प्रॉम्प्ट में asm या dsm दर्ज करें।
L:dsm:arm32 > asm
[+] Changed to asm (assembly) mode
L:asm:x86_32 > dsm
[+] Changed to dsm (disassembly) mode
L:dsm:arm32 >
| कमांड | विवरण |
|---|---|
clear | टर्मिनल स्क्रीन साफ़ करें। जैसे सामान्यतः Windows पर cls या *nix सिस्टम पर clear होता है। |
help |
निर्देशों को असेंबल करने के लिए, उन्हें टाइप करें और उन्हें सेमीकोलन से अलग करें जैसा कि यहाँ दिखाया गया है:
L:asm:x86_32 > mov edx, eax; xor eax, eax; inc edx; int 80;
[+] Bytes count: 7
Raw bytes: "\x89\xc2\x31\xc0\x42\xcd\x50"
Hex string: "89c231c042cd50"
यदि आपके असेंबल किए गए बाइट्स में एक null बाइट होता है, तो shellen आपको इसके बारे में बताएगा।
डिसअसेंबल करना असेंबल करने के समान है। इसके बजाय, प्रॉम्प्ट में अपने बाइट्स टाइप करें और परिणाम देखें!
L:dsm:x86_32 > 89c231c042cd50
0x00080000: mov edx, eax
0x00080002: xor eax, eax
0x00080004: inc edx
0x00080005: int 0x50
साथ ही, आप अपने शेलकोड को सबप्रोसेस में चला सकते हैं। ध्यान रखें कि यह आपके सिस्टम को नुकसान पहुँचा सकता है!। सबप्रोसेस में अंतिम शेलकोड पर जाएँ। क्या गलत हो सकता है?' ध्यान दें कि आपको उस बेस एड्रेस को नियंत्रित करने की सुविधा नहीं मिलती जिस पर आपका कोड लोड होता है, और यह मानता है कि निर्देश आपके CPU के लिए समझ में आएँगे। इसका उपयोग कैसे करें यह देखने के लिए shellen के अंदर help देखें।
मैं संभावित रूप से खतरनाक शेलकोड चलाने को सुरक्षित बनाने के लिए किसी वर्चुअल वातावरण में सबप्रोसेस निष्पादित करने की योजना बना रहा हूँ।
asm और dsm मोड विभिन्न आर्किटेक्चर के लिए काम करते हैं। Shellen के वर्तमान मोड के लिए उपलब्ध आर्किटेक्चर की सूची देखने के लिए, यह टाइप करें:
L:dsm:x86_32 > archs
┌────────┬────────┬─────────┬─────────┬────────┐
│ │ │ │ │ │
│ arm32 │ mips32 │ sparc32 │ systemz │ x86_16 │
│ arm64 │ mips64 │ sparc64 │ │ x86_32 │
│ arm_tb │ │ │ │ x86_64 │
└────────┴────────┴─────────┴─────────┴────────┘
यदि आप वर्तमान आर्किटेक्चर बदलना चाहते हैं, तो निम्नलिखित दर्ज करें:
L:dsm:x86_32 > setarch arm32
[+] Architecture of dsm changed to arm32
जब आप एक शेलकोड बनाते हैं, तो आपको syscalls की आवश्यकता होगी। Shellen के साथ syscalls खोजने के लिए, sys टाइप करें और अपने इच्छित syscall का नाम टाइप करें। Shellen syscalls की एक सूची उत्पन्न करेगा जिसमें वह syscall शामिल हो सकता है जिसे आप खोज रहे थे।
L:asm:x86_32 > sys open
┌────────┬───────┬──────────────────────┬──────────────────────┬──────────────┬──────────────┐
│ name │ eax │ ebx │ ecx │ edx │ esi │
├────────┼───────┼──────────────────────┼──────────────────────┼──────────────┼──────────────┤
│ open │ 0x05 │ const char *filename │ int flags │ umode_t mode │ - │
│ openat │ 0x127 │ int dfd │ const char *filename │ int flags │ umode_t mode │
└────────┴───────┴──────────────────────┴──────────────────────┴──────────────┴──────────────┘
sys प्रदान किए गए syscall के लिए संभावित वेरिएंट की एक सूची प्रिंट करता है। Shellen जिस syscall तालिका को खोजता है वह चुनी गई आर्किटेक्चर और ऑपरेटिंग सिस्टम (OS) पर निर्भर करती है। इस मामले में, आर्किटेक्चर x86_32 है और OS Linux है।
Shellen आपके कीवर्ड के आधार पर सामान्य शेलकोड की एक सूची दिखा सकता है। Shellen का कीवर्ड लुकअप shell-storm.org के API का उपयोग करता है (लेखक को धन्यवाद!) और इसे इस प्रकार उपयोग किया जा सकता है:
L:asm:x86_32 > shell <keyword> <count>
ध्यान दें, count पैरामीटर आवश्यक नहीं है। चित्र अनुभाग में shell <keyword> <count> के आउटपुट की एक छवि है।
वर्तमान में, shellen केवल Linux पर समर्थित है। यदि आप Windows या MacOS के लिए कार्यक्षमता जोड़ना चाहते हैं, तो एक issue लिखें और मैं समर्थन जोड़ दूँगा।
यदि आपको कोई समस्या/बग या कुछ मिलता है, तो इस समस्या के बारे में एक issue लिखें। साथ ही, यदि आपको लगता है कि कोई सुविधा shellen के लिए एक अच्छा जोड़ होगी, तो वही करें -- एक issue लिखें और मैं आपके अनुरोधित सुविधा को जोड़ने का प्रयास करूँगा।
asm और dsm मोड के लिए अलग-अलग इतिहासबस थोड़ी सी तस्वीरें। (विभिन्न सुविधाएँ जोड़ने के कारण वे पुरानी हो चुकी हैं)
| सहायता संदेश दिखाएँ। |
quit,q,exit | वर्तमान सत्र समाप्त करें और बाहर जाएँ |