
DNSChef - पेनिट्रेशन टेस्टर्स और मैलवेयर विश्लेषकों के लिए DNS प्रॉक्सी
| | version 0.4 | | / _|
| | __ ___ | | __| |
/ ` | ' / |/ | ' \ / _ \ |
| (| | | | _ \ (| | | | __/ |
_,|| ||/_|| ||___||
दस्तावेज़ीकरण
DNSChef एक अत्यधिक कॉन्फ़िगरेबल DNS प्रॉक्सी है जो प्रवेश परीक्षकों और मैलवेयर विश्लेषकों के लिए है। DNS प्रॉक्सी (उर्फ "फेक DNS") एक उपकरण है जिसका उपयोग एप्लिकेशन नेटवर्क ट्रैफ़िक विश्लेषण और अन्य उपयोगों के लिए किया जाता है। उदाहरण के लिए, एक DNS प्रॉक्सी का उपयोग "badguy.com" के लिए अनुरोधों को नकली बनाने के लिए किया जा सकता है, ताकि वे इंटरनेट पर किसी वास्तविक होस्ट के बजाय स्थानीय मशीन पर समाप्ति या अवरोधन के लिए इंगित हों।
बाजार में कई DNS प्रॉक्सी उपलब्ध हैं। अधिकांश बस सभी DNS क्वेरी को एकल IP पते पर इंगित कर देंगे या केवल बुनियादी फ़िल्टरिंग लागू करेंगे। DNSChef को एक प्रवेश परीक्षण के भाग के रूप में विकसित किया गया था जहां अधिक कॉन्फ़िगरेबल सिस्टम की आवश्यकता थी। परिणामस्वरूप, DNSChef एक क्रॉस-प्लेटफ़ॉर्म एप्लिकेशन है जो समावेशी और अनन्य डोमेन सूचियों के आधार पर प्रतिक्रियाएँ बनाने, कई DNS रिकॉर्ड प्रकारों का समर्थन करने, वाइल्डकार्ड के साथ डोमेन मिलान करने, गैर-मिलान वाले डोमेन के लिए वास्तविक प्रतिक्रियाओं को प्रॉक्सी करने, बाहरी कॉन्फ़िगरेशन फ़ाइलों को परिभाषित करने, IPv6 और कई अन्य सुविधाओं में सक्षम है। आप प्रत्येक सुविधा का विस्तृत विवरण और सुझाए गए उपयोग नीचे पा सकते हैं।
DNS प्रॉक्सी का उपयोग उन स्थितियों में अनुशंसित है जहां किसी एप्लिकेशन को सीधे किसी अन्य प्रॉक्सी सर्वर का उपयोग करने के लिए बाध्य करना संभव नहीं है। उदाहरण के लिए, कुछ मोबाइल एप्लिकेशन OS HTTP प्रॉक्सी सेटिंग्स को पूरी तरह से अनदेखा कर देते हैं। ऐसे मामलों में, DNSChef जैसे DNS प्रॉक्सी सर्वर का उपयोग आपको उस एप्लिकेशन को धोखा देने की अनुमति देगा कि वह कनेक्शन को वांछित गंतव्य पर अग्रेषित करे।
DNSChef का उपयोग शुरू करने से पहले, आपको अपनी मशीन को उस DNS नेमसर्वर का उपयोग करने के लिए कॉन्फ़िगर करना होगा जिस पर यह टूल चल रहा है। आपके पास उपयोग किए जाने वाले ऑपरेटिंग सिस्टम के आधार पर कई विकल्प हैं:
लिनक्स - /etc/resolv.conf को संपादित करें और शीर्ष पर अपने ट्रैफ़िक विश्लेषण होस्ट के साथ एक पंक्ति जोड़ें (उदाहरण के लिए, यदि स्थानीय रूप से चला रहे हैं तो "nameserver 127.0.0.1" जोड़ें)। वैकल्पिक रूप से, आप नेटवर्क मैनेजर जैसे टूल का उपयोग करके DNS सर्वर पता जोड़ सकते हैं। नेटवर्क मैनेजर के अंदर IPv4 सेटिंग्स खोलें, मेथड ड्रॉप-डाउन बॉक्स से ऑटोमैटिक (DHCP) पते केवल या मैनुअल चुनें और DNS सर्वर टेक्स्ट बॉक्स में DNSChef चलाने वाला IP पता शामिल करें।
विंडोज - कंट्रोल पैनल से नेटवर्क कनेक्शन चुनें। फिर किसी एक कनेक्शन (जैसे "लोकल एरिया कनेक्शन") का चयन करें, उस पर राइट-क्लिक करें और गुण चुनें। नए दिखाई देने वाले डायलॉग बॉक्स में, इंटरनेट प्रोटोकॉल (TCP/IP) चुनें और गुण पर क्लिक करें। अंत में निम्न DNS सर्वर पतों का उपयोग करें रेडियो बटन चुनें और DNSChef चलाने वाला IP पता दर्ज करें। उदाहरण के लिए, यदि स्थानीय रूप से चला रहे हैं तो 127.0.0.1 दर्ज करें।
OS X - सिस्टम प्राथमिकताएँ खोलें और नेटवर्क आइकन पर क्लिक करें। सक्रिय इंटरफ़ेस चुनें और DNS सर्वर फ़ील्ड भरें। यदि आप एयरपोर्ट का उपयोग कर रहे हैं तो आपको एडवांस्ड... बटन पर क्लिक करना होगा और वहां से DNS सर्वर संपादित करना होगा। वैकल्पिक रूप से, आप /etc/resolv.conf को संपादित कर सकते हैं और शीर्ष पर एक नकली नेमसर्वर जोड़ सकते हैं (उदाहरण "nameserver 127.0.0.1")।
iOS - सेटिंग्स खोलें और सामान्य चुनें। फिर वाई-फाई चुनें और सूची से एक सक्रिय एक्सेस प्वाइंट के दाईं ओर नीले तीर पर क्लिक करें। DNSChef चलाने वाले होस्ट की ओर इंगित करने के लिए DNS प्रविष्टि संपादित करें। सुनिश्चित करें कि आपने सेल्युलर इंटरफ़ेस (यदि उपलब्ध हो) को अक्षम कर दिया है।
एंड्रॉइड - सेटिंग्स खोलें और वायरलेस और नेटवर्क चुनें। वाई-फाई सेटिंग्स पर क्लिक करें और फोन पर विकल्प बटन दबाने के बाद एडवांस्ड चुनें। स्टेटिक IP का उपयोग करें चेकबॉक्स सक्षम करें और एक कस्टम DNS सर्वर कॉन्फ़िगर करें।
यदि आपके पास डिवाइस की DNS सेटिंग्स को मैन्युअल रूप से संशोधित करने की क्षमता नहीं है, तो आपके पास अभी भी कई विकल्प हैं जिनमें ARP स्पूफिंग, रोग DHCP और अन्य रचनात्मक तरीकों जैसी तकनीकें शामिल हैं।
अंत में आपको एक नकली सेवा कॉन्फ़िगर करने की आवश्यकता है जहां DNSChef सभी अनुरोधों को इंगित करेगा। उदाहरण के लिए, यदि आप वेब ट्रैफ़िक को इंटरसेप्ट करने का प्रयास कर रहे हैं, तो आपको या तो पोर्ट 80 पर एक अलग वेब सर्वर चालू करना होगा या ट्रैफ़िक को इंटरसेप्ट करने के लिए एक वेब प्रॉक्सी (जैसे Burp) सेट करना होगा। DNSChef क्वेरी को आपके प्रॉक्सी/सर्वर होस्ट की ओर इंगित करेगा जिसमें उचित रूप से कॉन्फ़िगर की गई सेवाएँ होंगी।
DNSChef एक क्रॉस-प्लेटफ़ॉर्म एप्लिकेशन है जो Python में विकसित है और अधिकांश प्लेटफ़ॉर्म पर चलना चाहिए जिनमें Python इंटरप्रेटर हो। आप विंडोज होस्ट पर Python इंटरप्रेटर स्थापित किए बिना इसे चलाने के लिए प्रदान की गई dnschef.exe निष्पादन योग्य का उपयोग कर सकते हैं। यह मार्गदर्शिका Unix वातावरण पर केंद्रित होगी; हालांकि, नीचे दिए गए सभी उदाहरण विंडोज पर भी काम करने के लिए परीक्षण किए गए हैं।
आइए DNSChef की सबसे बुनियादी निगरानी कार्यक्षमता के साथ इसका स्वाद लें। रूट के रूप में निम्नलिखित कमांड निष्पादित करें (पोर्ट 53 पर सर्वर शुरू करने के लिए आवश्यक):
# ./dnschef.py
_ _ __
| | version 0.2 | | / _|
__| |_ __ ___ ___| |__ ___| |_
/ _` | '_ \/ __|/ __| '_ \ / _ \ _|
| (_| | | | \__ \ (__| | | | __/ |
\__,_|_| |_|___/\___|_| |_|\___|_|
[email protected]
[*] DNSChef started on interface: 127.0.0.1
[*] Using the following nameservers: 8.8.8.8
[*] No parameters were specified. Running in full proxy mode
बिना किसी पैरामीटर के, DNSChef पूर्ण प्रॉक्सी मोड में चलेगा। इसका मतलब है कि सभी अनुरोधों को केवल एक अपस्ट्रीम DNS सर्वर (डिफ़ॉल्ट रूप से 8.8.8.8) को अग्रेषित किया जाएगा और क्वेरी करने वाले होस्ट को वापस भेज दिया जाएगा। उदाहरण के लिए, आइए एक डोमेन के लिए "A" रिकॉर्ड क्वेरी करें और परिणाम देखें:
$ host -t A thesprawl.org
thesprawl.org has address 108.59.3.64
DNSChef निम्नलिखित लॉग लाइन प्रिंट करेगा जो समय, स्रोत IP पता, अनुरोधित रिकॉर्ड का प्रकार और सबसे महत्वपूर्ण बात यह दर्शाता है कि किस नाम की क्वेरी की गई थी:
[23:54:03] 127.0.0.1: proxying the response of type 'A' for thesprawl.org
यह मोड सरल एप्लिकेशन निगरानी के लिए उपयोगी है जहां आपको यह पता लगाने की आवश्यकता है कि वह अपने संचार के लिए किन डोमेन का उपयोग करता है।
DNSChef में IPv6 के लिए पूर्ण समर्थन है जिसे -6 या --ipv6* फ़्लैग का उपयोग करके सक्रिय किया जा सकता है। यह IPv4 मोड की तरह ही काम करता है, सिवाय इसके कि डिफ़ॉल्ट सुनने वाला इंटरफ़ेस ::1 पर स्विच हो जाता है और डिफ़ॉल्ट DNS सर्वर 2001:4860:4860::8888 पर स्विच हो जाता है। यहाँ एक नमूना आउटपुट है:
# ./dnschef.py -6
_ _ __
| | version 0.2 | | / _|
__| |_ __ ___ ___| |__ ___| |_
/ _` | '_ \/ __|/ __| '_ \ / _ \ _|
| (_| | | | \__ \ (__| | | | __/ |
\__,_|_| |_|___/\___|_| |_|\___|_|
[email protected]
[*] Using IPv6 mode.
[*] DNSChef started on interface: ::1
[*] Using the following nameservers: 2001:4860:4860::8888
[*] No parameters were specified. Running in full proxy mode
[00:35:44] ::1: proxying the response of type 'A' for thesprawl.org
[00:35:44] ::1: proxying the response of type 'AAAA' for thesprawl.org
[00:35:44] ::1: proxying the response of type 'MX' for thesprawl.org
नोट: डिफ़ॉल्ट रूप से, DNSChef एक UDP सुनने वाला बनाता है। आप बाद में चर्चा किए गए --tcp तर्क के साथ इसके बजाय TCP का उपयोग कर सकते हैं।
अब, जब आप जानते हैं कि DNSChef कैसे शुरू करें, तो आइए इसे --fakeip पैरामीटर का उपयोग करके सभी उत्तरों को 127.0.0.1 पर इंगित करने के लिए कॉन्फ़िगर करें:
# ./dnschef.py --fakeip 127.0.0.1 -q
[*] DNSChef started on interface: 127.0.0.1
[*] Using the following nameservers: 8.8.8.8
[*] Cooking all A replies to point to 127.0.0.1
[23:55:57] 127.0.0.1: cooking the response of type 'A' for google.com to 127.0.0.1
[23:55:57] 127.0.0.1: proxying the response of type 'AAAA' for google.com
[23:55:57] 127.0.0.1: proxying the response of type 'MX' for google.com
उपरोक्त आउटपुट में आप देख सकते हैं कि DNSChef को सभी अनुरोधों को 127.0.0.1 पर प्रॉक्सी करने के लिए कॉन्फ़िगर किया गया था। 08:11:23 पर लॉग की पहली पंक्ति दिखाती है कि हमने "A" रिकॉर्ड प्रतिक्रिया को 127.0.0.1 पर इंगित करने के लिए "कुक" किया है। हालाँकि, 'AAAA' और 'MX' रिकॉर्ड के आगे के अनुरोधों को एक वास्तविक DNS सर्वर से सीधे प्रॉक्सी किया जाता है। आइए अनुरोध करने वाले प्रोग्राम से आउटपुट देखें:
$ host google.com localhost
google.com has address 127.0.0.1
google.com has IPv6 address 2001:4860:4001:803::1001
google.com mail is handled by 10 aspmx.l.google.com.
google.com mail is handled by 40 alt3.aspmx.l.google.com.
google.com mail is handled by 30 alt2.aspmx.l.google.com.
google.com mail is handled by 20 alt1.aspmx.l.google.com.
google.com mail is handled by 50 alt4.aspmx.l.google.com.
जैसा कि आप देख सकते हैं, प्रोग्राम IPv4 पते के लिए 127.0.0.1 का उपयोग करने के लिए धोखा दिया गया था। हालाँकि, IPv6 (AAAA) और मेल (MX) रिकॉर्ड से प्राप्त जानकारी पूरी तरह से वैध दिखाई देती है। DNSChef का लक्ष्य प्रोग्राम के सही संचालन पर न्यूनतम प्रभाव डालना है, इसलिए यदि कोई एप्लिकेशन किसी विशिष्ट मेलसर्वर पर निर्भर करता है, तो वह इस प्रॉक्सी किए गए अनुरोध के माध्यम से सही ढंग से प्राप्त करेगा।
आइए एक और अनुरोध नकली बनाएं ताकि यह दर्शाया जा सके कि एक साथ कई रिकॉर्ड को कैसे लक्षित किया जाए:
# ./dnschef.py --fakeip 127.0.0.1 --fakeipv6 ::1 -q
[*] DNSChef started on interface: 127.0.0.1
[*] Using the following nameservers: 8.8.8.8
[*] Cooking all A replies to point to 127.0.0.1
[*] Cooking all AAAA replies to point to ::1
[00:02:14] 127.0.0.1: cooking the response of type 'A' for google.com to 127.0.0.1
[00:02:14] 127.0.0.1: cooking the response of type 'AAAA' for google.com to ::1
[00:02:14] 127.0.0.1: proxying the response of type 'MX' for google.com
--fakeip फ़्लैग के अलावा, मैंने अब --fakeipv6 निर्दिष्ट किया है जो 'AAAA' रिकॉर्ड क्वेरी को नकली बनाने के लिए डिज़ाइन किया गया है। यहाँ एक अद्यतन प्रोग्राम आउटपुट है:
$ host google.com localhost
google.com has address 127.0.0.1
google.com has IPv6 address ::1
google.com mail is handled by 10 aspmx.l.google.com.
google.com mail is handled by 40 alt3.aspmx.l.google.com.
google.com mail is handled by 30 alt2.aspmx.l.google.com.
google.com mail is handled by 20 alt1.aspmx.l.google.com.
google.com mail is handled by 50 alt4.aspmx.l.google.com.
एक बार फिर, वे सभी रिकॉर्ड जो एप्लिकेशन द्वारा स्पष्ट रूप से ओवरराइड नहीं किए गए थे, प्रॉक्सी किए गए और वास्तविक DNS सर्वर से लौटाए गए। हालाँकि, IPv4 (A) और IPv6 (AAAA) दोनों को स्थानीय मशीन पर इंगित करने के लिए नकली बनाया गया था।
DNSChef कई रिकॉर्ड प्रकारों का समर्थन करता है:
+--------+--------------+-----------+--------------------------+
| रिकॉर्ड | विवरण |तर्क | उदाहरण |
+--------+--------------+-----------+--------------------------+
| A | IPv4 पता |--fakeip | --fakeip 192.0.2.1 |
| AAAA | IPv6 पता |--fakeipv6 | --fakeipv6 2001:db8::1 |
| MX | मेल सर्वर |--fakemail | --fakemail mail.fake.com |
| CNAME | CNAME रिकॉर्ड|--fakealias| --fakealias www.fake.com |
| NS | नाम सर्वर |--fakens | --fakens ns.fake.com |
+--------+--------------+-----------+--------------------------+
नोट: उपयोगिता के लिए सभी DNS रिकॉर्ड प्रकार कमांड लाइन पर प्रदर्शित नहीं होते हैं। PTR, TXT, SOA, आदि जैसे अतिरिक्त रिकॉर्ड को --file फ़्लैग और उपयुक्त रिकॉर्ड हेडर का उपयोग करके निर्दिष्ट किया जा सकता है। विवरण के लिए नीचे बाहरी परिभाषाएँ फ़ाइल अनुभाग देखें।
अंत में, आइए देखें कि एप्लिकेशन ANY प्रकार की क्वेरी को कैसे संभालता है:
# ./dnschef.py --fakeip 127.0.0.1 --fakeipv6 ::1 --fakemail mail.fake.com --fakealias www.fake.com --fakens ns.fake.com -q
[*] DNSChef started on interface: 127.0.0.1
[*] Using the following nameservers: 8.8.8.8
[*] Cooking all A replies to point to 127.0.0.1
[*] Cooking all AAAA replies to point to ::1
[*] Cooking all MX replies to point to mail.fake.com
[*] Cooking all CNAME replies to point to www.fake.com
[*] Cooking all NS replies to point to ns.fake.com
[00:17:29] 127.0.0.1: cooking the response of type 'ANY' for google.com with all known fake records.
DNS ANY रिकॉर्ड क्वेरी के परिणामस्वरूप DNSChef एक लागू डोमेन के लिए अपने ज्ञात प्रत्येक नकली रिकॉर्ड को लौटाता है। यहाँ वह आउटपुट है जो प्रोग्राम देखेगा:
$ host -t ANY google.com localhost
google.com has address 127.0.0.1
google.com has IPv6 address ::1
google.com mail is handled by 10 mail.fake.com.
google.com is an alias for www.fake.com.
google.com name server ns.fake.com.
उपरोक्त उदाहरण का उपयोग करते हुए, मान लें कि आप केवल thesprawl.org के लिए अनुरोधों को इंटरसेप्ट करना चाहते हैं और webfaction.com जैसे अन्य सभी डोमेन की क्वेरी को बिना संशोधन के छोड़ देना चाहते हैं। आप --fakedomains पैरामीटर का उपयोग कर सकते हैं जैसा कि नीचे दर्शाया गया है:
# ./dnschef.py --fakeip 127.0.0.1 --fakedomains thesprawl.org -q
[*] DNSChef started on interface: 127.0.0.1
[*] Using the following nameservers: 8.8.8.8
[*] Cooking replies to point to 127.0.0.1 matching: thesprawl.org
[00:23:37] 127.0.0.1: cooking the response of type 'A' for thesprawl.org to 127.0.0.1
[00:23:52] 127.0.0.1: proxying the response of type 'A' for mx9.webfaction.com
उपरोक्त उदाहरण से, thesprawl.org का अनुरोध नकली बनाया गया; हालाँकि, mx9.webfaction.com का अनुरोध अकेला छोड़ दिया गया। डोमेन फ़िल्टर करना बहुत उपयोगी है जब आप बाकी को तोड़े बिना किसी एकल एप्लिकेशन को अलग करने का प्रयास करते हैं।
नोट: DNSChef प्रतिक्रिया को नकली बनाने से पहले यह सत्यापित नहीं करेगा कि डोमेन मौजूद है या नहीं। यदि आपने एक डोमेन निर्दिष्ट किया है, तो यह हमेशा एक नकली मान पर हल होगा, चाहे वह वास्तव में मौजूद हो या नहीं।
एक अन्य स्थिति में, आपको एक परिभाषित सूची के अलावा सभी अनुरोधों के लिए प्रतिक्रियाओं को नकली बनाने की आवश्यकता हो सकती है। आप इस कार्य को --truedomains पैरामीटर का उपयोग करके पूरा कर सकते हैं जैसा कि निम्नानुसार है:
# ./dnschef.py --fakeip 127.0.0.1 --truedomains thesprawl.org,*.webfaction.com -q
[*] DNSChef started on interface: 127.0.0.1
[*] Using the following nameservers: 8.8.8.8
[*] Cooking replies to point to 127.0.0.1 not matching: *.webfaction.com, thesprawl.org
[00:27:57] 127.0.0.1: proxying the response of type 'A' for mx9.webfaction.com
[00:28:05] 127.0.0.1: cooking the response of type 'A' for google.com to 127.0.0.1
उपरोक्त उदाहरण में कई चीजें चल रही हैं। पहले वाइल्डकार्ड (*) के उपयोग पर ध्यान दें। *.webfaction.com से मेल खाने वाले सभी डोमेन रिवर्स मैच होंगे और उनके वास्तविक मानों पर हल होंगे। 'google.com' का अनुरोध 127.0.0.1 लौटाया गया क्योंकि यह बहिष्कृत डोमेन की सूची में नहीं था।
नोट: वाइल्डकार्ड स्थिति-विशिष्ट होते हैं। *.thesprawl.org प्रकार का मास्क www.thesprawl.org से मेल खाएगा, लेकिन www.test.thesprawl.org से नहीं। हालाँकि, ..thesprawl.org प्रकार का मास्क thesprawl.org, www.thesprawl.org और www.test.thesprawl.org से मेल खाएगा।
ऐसी स्थितियाँ हो सकती हैं जहाँ सभी मिलान डोमेन के लिए एक एकल नकली DNS रिकॉर्ड परिभाषित करना पर्याप्त नहीं हो सकता है। आप DOMAIN=RECORD जोड़ियों के संग्रह के साथ एक बाहरी फ़ाइल का उपयोग कर सकते हैं जो ठीक-ठीक परिभाषित करता है कि आप अनुरोध कहाँ जाना चाहते हैं।
उदाहरण के लिए, आइए निम्नलिखित परिभाषाएँ फ़ाइल बनाएं और इसे dnschef.ini नाम दें:
[A]
*.google.com=192.0.2.1
thesprawl.org=192.0.2.2
*.wordpress.*=192.0.2.3
अनुभाग हेडर [A] पर ध्यान दें, यह DNSChef को रिकॉर्ड प्रकार परिभाषित करता है। अब आइए कई क्वेरी के आउटपुट को ध्यान से देखें:
# ./dnschef.py --file dnschef.ini -q
[*] DNSChef started on interface: 127.0.0.1
[*] Using the following nameservers: 8.8.8.8
[+] Cooking A replies for domain *.google.com with '192.0.2.1'
[+] Cooking A replies for domain thesprawl.org with '192.0.2.2'
[+] Cooking A replies for domain *.wordpress.* with '192.0.2.3'
[00:43:54] 127.0.0.1: cooking the response of type 'A' for google.com to 192.0.2.1
[00:44:05] 127.0.0.1: cooking the response of type 'A' for www.google.com to 192.0.2.1
[00:44:19] 127.0.0.1: cooking the response of type 'A' for thesprawl.org to 192.0.2.2
[00:44:29] 127.0.0.1: proxying the response of type 'A' for www.thesprawl.org
[00:44:40] 127.0.0.1: cooking the response of type 'A' for www.wordpress.org to 192.0.2.3
[00:44:51] 127.0.0.1: cooking the response of type 'A' for wordpress.com to 192.0.2.3
[00:45:02] 127.0.0.1: proxying the response of type 'A' for slashdot.org
google.com और www.google.com दोनों *.google.com प्रविष्टि से मेल खाते हैं और सही ढंग से 192.0.2.1 पर हल हुए। दूसरी ओर, www.thesprawl.org का अनुरोध संशोधित होने के बजाय सीधे प्रॉक्सी किया गया। अंत में, wordpress.com, www.wordpress.org आदि के सभी रूपांतर *.wordpress.* मास्क से मेल खाते हैं और सही ढंग से 192.0.2.3 पर हल हुए। अंत में एक अपरिभाषित slashdot.org क्वेरी को सीधे वास्तविक प्रतिक्रिया के साथ प्रॉक्सी किया गया।
आप कमांड लाइन पर स्पष्ट रूप से प्रदर्शित नहीं किए गए रिकॉर्ड सहित सभी समर्थित DNS रिकॉर्ड प्रकारों के लिए अनुभाग हेडर निर्दिष्ट कर सकते हैं: [A], [AAAA], [MX], [NS], [CNAME], [PTR], [NAPTR] और [SOA]। उदाहरण के लिए, आइए 'dnschef.ini' फ़ाइल में एक नया [PTR] अनुभाग परिभाषित करें:
[PTR]
*.2.0.192.in-addr.arpa=fake.com
आइए इस नए रिकॉर्ड प्रकार के साथ DNSChef के व्यवहार का निरीक्षण करें:
./dnschef.py --file dnschef.ini -q
[sudo] password for iphelix:
[*] DNSChef started on interface: 127.0.0.1
[*] Using the following nameservers: 8.8.8.8
[+] Cooking PTR replies for domain *.2.0.192.in-addr.arpa with 'fake.com'
[00:11:34] 127.0.0.1: cooking the response of type 'PTR' for 1.2.0.192.in-addr.arpa to fake.com
और यहाँ वह है जो एक क्लाइंट रिवर्स DNS क्वेरी करते समय देख सकता है:
$ host 192.0.2.1 localhost
1.2.0.192.in-addr.arpa domain name pointer fake.com.
कुछ रिकॉर्डों को सटीक स्वरूपण की आवश्यकता होती है। SOA और NAPTR अच्छे उदाहरण हैं:
[SOA]
*.thesprawl.org=ns.fake.com. hostmaster.fake.com. 1 10800 3600 604800 3600
[NAPTR]
*.thesprawl.org=100 10 U E2U+sip !^.*$!sip:[email protected]! .
अतिरिक्त उदाहरणों के लिए नमूना dnschef.ini फ़ाइल देखें।
आप फ़ाइल और कमांड लाइन से इनपुट को मिला सकते हैं। उदाहरण के लिए, निम्नलिखित कमांड --file और --fakedomains दोनों पैरामीटर का उपयोग करता है:
# ./dnschef.py --file dnschef.ini --fakeip 6.6.6.6 --fakedomains=thesprawl.org,slashdot.org -q
[*] DNSChef started on interface: 127.0.0.1
[*] Using the following nameservers: 8.8.8.8
[+] Cooking A replies for domain *.google.com with '192.0.2.1'
[+] Cooking A replies for domain thesprawl.org with '192.0.2.2'
[+] Cooking A replies for domain *.wordpress.* with '192.0.2.3'
[*] Cooking A replies to point to 6.6.6.6 matching: *.wordpress.*, *.google.com, thesprawl.org
[*] Cooking A replies to point to 6.6.6.6 matching: slashdot.org, *.wordpress.*, *.google.com, thesprawl.org
[00:49:05] 127.0.0.1: cooking the response of type 'A' for google.com to 192.0.2.1
[00:49:15] 127.0.0.1: cooking the response of type 'A' for slashdot.org to 6.6.6.6
[00:49:31] 127.0.0.1: cooking the response of type 'A' for thesprawl.org to 6.6.6.6
[00:50:08] 127.0.0.1: proxying the response of type 'A' for tor.com
ध्यान दें कि कमांड लाइन पैरामीटर में thesprawl.org की परिभाषा ने dnschef.ini पर प्राथमिकता ली। यह उपयोगी हो सकता है यदि आप कॉन्फ़िगरेशन फ़ाइल में मानों को ओवरराइड करना चाहते हैं। slashdot.org अभी भी नकली IP पते पर हल होता है क्योंकि यह --fakedomains पैरामीटर में निर्दिष्ट किया गया था। tor.com का अनुरोध सीधे प्रॉक्सी किया जाता है क्योंकि यह कमांड लाइन या कॉन्फ़िगरेशन फ़ाइल में निर्दिष्ट नहीं किया गया था।
अन्य कॉन्फ़िगरेशन ====================सुरक्षा कारणों से, DNSChef डिफ़ॉल्ट रूप से स्थानीय 127.0.0.1 (या IPv6 के लिए ::1) इंटरफ़ेस पर सुनता है। आप --interface पैरामीटर का उपयोग करके DNSChef को किसी अन्य इंटरफ़ेस पर सुनने के लिए बना सकते हैं:
# ./dnschef.py --interface 0.0.0.0 -q
[*] DNSChef started on interface: 0.0.0.0
[*] Using the following nameservers: 8.8.8.8
[*] No parameters were specified. Running in full proxy mode
[00:50:53] 192.0.2.105: proxying the response of type 'A' for thesprawl.org
या IPv6 के लिए:
# ./dnschef.py -6 --interface :: -q
[*] Using IPv6 mode.
[*] DNSChef started on interface: ::
[*] Using the following nameservers: 2001:4860:4860::8888
[*] No parameters were specified. Running in full proxy mode
[00:57:46] 2001:db8::105: proxying the response of type 'A' for thesprawl.org
डिफ़ॉल्ट रूप से, DNSChef प्रॉक्सी अनुरोध करने के लिए Google के पब्लिक DNS सर्वर का उपयोग करता है। हालाँकि, आप --nameservers पैरामीटर का उपयोग करके नेमसर्वरों की एक कस्टम सूची परिभाषित कर सकते हैं:
# ./dnschef.py --nameservers 4.2.2.1,4.2.2.2 -q
[*] DNSChef started on interface: 127.0.0.1
[*] Using the following nameservers: 4.2.2.1, 4.2.2.2
[*] No parameters were specified. Running in full proxy mode
[00:55:08] 127.0.0.1: proxying the response of type 'A' for thesprawl.org
IP#PORT नोटेशन का उपयोग करके गैर-मानक नेमसर्वर पोर्ट निर्दिष्ट करना संभव है:
# ./dnschef.py --nameservers 192.0.2.2#5353 -q
[*] DNSChef started on interface: 127.0.0.1
[*] Using the following nameservers: 192.0.2.2#5353
[*] No parameters were specified. Running in full proxy mode
[02:03:12] 127.0.0.1: proxying the response of type 'A' for thesprawl.org
साथ ही -p port# पैरामीटर का उपयोग करके DNSChef को स्वयं एक वैकल्पिक पोर्ट पर शुरू करना संभव है:
# ./dnschef.py -p 5353 -q
[*] Listening on an alternative port 5353
[*] DNSChef started on interface: 127.0.0.1
[*] Using the following nameservers: 8.8.8.8
[*] No parameters were specified. Running in full proxy mode
DNS प्रोटोकॉल का उपयोग UDP (डिफ़ॉल्ट) या TCP पर किया जा सकता है। DNSChef एक TCP मोड लागू करता है जिसे --tcp फ़्लैग से सक्रिय किया जा सकता है।
यहाँ आंतरिक के बारे में कुछ जानकारी दी गई है यदि आपको अपनी आवश्यकताओं के अनुसार टूल को अनुकूलित करने की आवश्यकता है। DNSChef SocketServer मॉड्यूल के ऊपर बनाया गया है और एक साथ कई अनुरोधों को संसाधित करने में मदद करने के लिए थ्रेडिंग का उपयोग करता है। टूल को इनकमिंग अनुरोधों के लिए TCP या UDP पोर्ट (डिफ़ॉल्ट पोर्ट 53 है) पर सुनने और आवश्यकता होने पर उन अनुरोधों को UDP पर वास्तविक DNS सर्वर पर अग्रेषित करने के लिए डिज़ाइन किया गया है।
उत्कृष्ट dnslib लाइब्रेरी का उपयोग DNS पैकेटों को विच्छेदित और पुनः संयोजित करने के लिए किया जाता है। यह क्वेरी के आधार पर प्रतिक्रिया पैकेट उत्पन्न करते समय विशेष रूप से उपयोगी है।
DNSChef "A", "AAAA", "MX", "CNAME", "NS", "TXT", "PTR", "NAPTR", "SOA", "ANY" प्रकार के रिकॉर्ड्स के लिए क्वेरी को संशोधित करने में सक्षम है। किसी भी रिकॉर्ड के लिए व्यवहार का विस्तार या संशोधन करना बहुत आसान है। बस एक और if qtype == "RECORD TYPE") एंट्री जोड़ें और इसे बताएं कि क्या उत्तर देना है।
टूल का आनंद लें और सभी अनुरोधों और टिप्पणियों को iphelix [at] thesprawl.org पर भेजें।
हैप्पी हैकिंग! -पीटर