tko-subs
यह उपकरण अनुमति देता है:
-
यह जाँचने के लिए कि क्या कोई उपडोमेन अधिग्रहित किया जा सकता है क्योंकि उसमें है:
- एक ढीला CNAME जो CMS प्रदाता (Heroku, Github, Shopify, Amazon S3, Amazon CloudFront, आदि) की ओर इंगित करता है जिसे अधिग्रहित किया जा सकता है।
- एक ढीला CNAME जो एक अस्तित्वहीन डोमेन नाम की ओर इंगित करता है
- एक या अधिक गलत/टाइपो वाले NS रिकॉर्ड जो एक नेमसर्वर की ओर इंगित करते हैं जिसे एक हमलावर द्वारा अधिग्रहित किया जा सकता है ताकि उपडोमेन के DNS रिकॉर्ड पर नियंत्रण प्राप्त किया जा सके
-
वास्तव में उन उपडोमेन को अधिग्रहित करने के लिए एक फ्लैग -takeover प्रदान करके। वर्तमान में, अधिग्रहण केवल Github Pages और Heroku Apps के लिए समर्थित है और डिफ़ॉल्ट रूप से अधिग्रहण कार्यक्षमता बंद है।
-
अपने स्वयं के CMS प्रदाताओं को निर्दिष्ट करने और providers-data.csv फ़ाइल के माध्यम से उनकी जाँच करने के लिए। उस फ़ाइल में, आप CMS का नाम, उनका CNAME मान, वह स्ट्रिंग जिसे आप खोजना चाहते हैं और क्या यह केवल HTTP पर काम करता है, उल्लेख करेंगे। कुछ उदाहरणों के लिए इसे देखें।
अस्वीकरण: बेवकूफ मत बनो!
बिना कहे, कृपया इस उपकरण का बहुत सावधानी से उपयोग करें। लेखक किसी भी परिणाम के लिए जिम्मेदार नहीं होंगे।
डिफ़ॉल्ट रूप से, यह उपकरण उपडोमेन के अधिग्रहण की अनुमति नहीं देता है। यदि आप ऐसा करना चाहते हैं, तो बस -takeover फ़्लैग निर्दिष्ट करें।
पूर्वापेक्षाएँ
हमें GO स्थापित करने की आवश्यकता है। एक बार GO आपके पास हो, तो बस go get github.com/anshumanbh/tko-subs टाइप करें ताकि उपकरण डाउनलोड हो सके।
एक बार उपकरण डाउनलोड हो जाए, तो tko-subs -h टाइप करें।
अगली चीज़ जो हमें करनी है वह निम्नलिखित जानकारी प्राप्त करना है:
- Github का Personal Access Token - सुनिश्चित करें कि इस टोकन के पास रिपॉजिटरी, रेफरेंस, कंटेंट आदि बनाने के अधिकार हैं। आप इस टोकन को यहाँ बना सकते हैं - https://github.com/settings/tokens
- Heroku उपयोगकर्ता नाम और API कुंजी
- Heroku ऐप का नाम - आप Heroku पर एक स्थिर ऐप बना सकते हैं जिसमें आप जो चाहें उसके होमपेज पर प्रदर्शित कर सकते हैं, यहाँ दिए गए निर्देशों का पालन करके - https://gist.github.com/wh1tney/2ad13aa5fbdd83f6a489. एक बार जब आप वह ऐप बना लें, तो फ्लैग में उस ऐप का नाम उपयोग करें (नीचे देखें)। हम उस ऐप का उपयोग डोमेन को अधिग्रहित करने के लिए करेंगे (दूसरे Heroku ऐप के लिए ढीले CNAME के साथ)।
नोट - आपको ये मान केवल तभी चाहिए जब आप उपडोमेन को अधिग्रहित करना चाहते हैं। डिफ़ॉल्ट रूप से, इसकी आवश्यकता नहीं है।
बनाने के लिए आवश्यक Go पैकेज।
go get github.com/bgentry/heroku-go
go get github.com/gocarina/gocsv
go get github.com/google/go-github/github
go get github.com/olekukonko/tablewriter
go get golang.org/x/net/publicsuffix
go get golang.org/x/oauth2
go get github.com/miekg/dns
कैसे चलाएँ?
एक बार जब आप सब कुछ स्थापित कर लें, तो निर्देशिका में cd करें और टाइप करें:
tko-subs -domains=domains.txt -data=providers-data.csv -output=output.csv
यदि आप अधिग्रहण भी करना चाहते हैं, तो कमांड होगा:
tko-subs -domains=domains.txt -data=providers-data.csv -output=output.csv -takeover -githubtoken=<github-token> -herokuusername=<heroku-username> -herokuapikey=<heroku-api-key> -herokuappname=<heroku-app-name>
यदि आप केवल एक डोमेन की जाँच करना चाहते हैं, तो टाइप करें:
tko-subs -domain <domain-name>
यदि आप कई डोमेन की जाँच करना चाहते हैं, तो टाइप करें:
tko-subs -domain <domain-name-1>,<domain-name-2>
डिफ़ॉल्ट रूप से:
domains फ्लैग domains.txt पर सेट है
data फ्लैग providers-data.csv पर सेट है
output फ्लैग output.csv पर सेट है
takeover फ्लैग सेट नहीं है इसलिए डिफ़ॉल्ट रूप से कोई अधिग्रहण नहीं
domain फ्लैग सेट नहीं है इसलिए यह हमेशा domains.txt फ़ाइल में उल्लिखित सभी डोमेन की जाँच करेगा। यदि domain फ्लैग का उल्लेख किया गया है, तो यह केवल उस डोमेन की जाँच करेगा और domains.txt फ़ाइल को अनदेखा करेगा, भले ही वह मौजूद हो
threads फ्लैग 5 पर सेट है
इसलिए, केवल tko-subs चलाने से ऊपर बताए गए डिफ़ॉल्ट मानों के साथ चलेगा।
providers-data.csv कैसे स्वरूपित है?
name,cname,string,http
- name: प्रदाता का नाम (जैसे github)
- cname: प्रदाता की सामग्री के लिए वेबसाइट को मैप करने के लिए उपयोग किया जाने वाला CNAME (जैसे github.io)
- string: एक अघोषित उपडोमेन के लिए लौटाया गया त्रुटि संदेश (जैसे "There isn't a GitHub Pages site here")
- http: साइट से कनेक्ट करने के लिए http (https नहीं, जो डिफ़ॉल्ट है) का उपयोग करना है या नहीं (true/false)
आउटपुट कैसे स्वरूपित है?
Domain,CNAME,Provider,IsVulnerable,IsTakenOver,Response
- Domain: जाँचा गया डोमेन
- CNAME: डोमेन का CNAME
- Provider: वह प्रदाता जिसका उपयोग डोमेन करते हुए पाया गया
- IsVulnerable: क्या डोमेन असुरक्षित पाया गया या नहीं (true/false)
- IsTakenOver: क्या डोमेन अधिग्रहित किया गया या नहीं (true/false)
- Response: वह संदेश जिसके विरुद्ध उपडोमेन की जाँच की गई
यदि एक मृत DNS रिकॉर्ड पाया जाता है, तो Provider खाली छोड़ दिया जाता है।
यदि एक गलत व्यवहार करने वाला नेमसर्वर पाया जाता है, तो Provider और CNAME खाली छोड़ दिए जाते हैं
पर्दे के पीछे क्या चल रहा है?
यह subdomains.txt फ़ाइल में सभी डोमेन (GoRoutines का उपयोग करके समवर्ती रूप से) पर पुनरावृति करेगा और:
- देखें कि क्या उनके पास एक गलत व्यवहार करने वाला आधिकारिक नेमसर्वर है; यदि हाँ, तो हम उस डोमेन को असुरक्षित के रूप में चिह्नित करते हैं।
- देखें कि क्या उनके पास ढीले CNAME रिकॉर्ड यानी मृत DNS रिकॉर्ड हैं; यदि हाँ, तो हम उस डोमेन को असुरक्षित के रूप में चिह्नित करते हैं।
- यदि कोई उपडोमेन इन दो परीक्षणों को पास करता है, तो यह उन्हें कर्ल करने और प्रतिक्रिया प्राप्त करने का प्रयास करता है और फिर देखता है कि क्या वह प्रतिक्रिया providers-data.csv फ़ाइल में उल्लिखित किसी भी डेटा प्रदाता स्ट्रिंग से मेल खाती है।
- यदि प्रतिक्रिया मेल खाती है, तो हम उस डोमेन को असुरक्षित के रूप में चिह्नित करते हैं।
- इसके बाद,
takeover फ्लैग का उल्लेख किया गया है या नहीं, इसके आधार पर, यह उस असुरक्षित उपडोमेन को अधिग्रहित करने का प्रयास करेगा।
- उदाहरण के लिए, Github Page को अधिग्रहित करने के लिए, कोड यह करेगा:
- एक रेपो बनाएँ
- उस रेपो में एक ब्रांच
gh-pages बनाएँ
- उस रेपो में
gh-pages ब्रांच पर CNAME और index.html अपलोड करें। यहाँ, CNAME में वह डोमेन होता है जिसे अधिग्रहित करने की आवश्यकता है। index.html में टेक्स्ट This domain is temporarily suspended होता है जो डोमेन के अधिग्रहित होने के बाद प्रदर्शित होता है।
- इसी तरह, Heroku ऐप के लिए, कोड यह करेगा:
- अपने Heroku ऐप में ढीले डोमेन को जोड़ें (जिसका नाम आप .env फ़ाइल में प्रदान करेंगे)
और, बस!
भविष्य का कार्य
CMS नाम और regex उपयोगकर्ता या .env फ़ाइल से लें और फिर उन्हें स्वचालित रूप से टूल में जोड़ें ताकि उसे खोजा जा सके। पूर्ण
- अधिक CMS के लिए अधिग्रहण जोड़ें
- अधिक CMS प्रदाता जोड़ें
श्रेय
- Luke Young (@TheBoredEng) का धन्यवाद जिन्होंने go-github लाइब्रेरी के साथ मेरी मदद की।
- Frans Rosen (@fransrosen) का धन्यवाद जिन्होंने कुछ अधिग्रहणों के लिए आवश्यक तकनीकी विवरणों को समझने में मेरी मदद की।
- Mohammed Diaa (@mhmdiaa) का धन्यवाद जिन्होंने प्रदाता डेटा कार्यक्षमता को लागू करने और कोड को चालू करने में समय लिया।
- high-stakes का धन्यवाद जिन्होंने एक अत्यंत आवश्यक कोड रिफ्रेश किया।
परिवर्तन लॉग
5/27
- इमेज का आकार कम करने वाला नया Dockerfile जोड़ा गया
- परीक्षण के लिए नमूना domains.txt फ़ाइल जोड़ा गया
- mhmdiaa ने मृत DNS अधिग्रहणों के लिए तर्क जोड़ा। दस्तावेज़ीकरण अद्यतन किया। बहुत-बहुत धन्यवाद!
11/6
- high-stakes ने एक PR जारी किया जिसमें नए कोड का एक समूह है जो कुछ बगों को ठीक करता है और कोड को साफ बनाता है
9/22
- एकल डोमेन की जाँच के लिए एक वैकल्पिक फ्लैग जोड़ा गया
- इसे स्थापित करना और चलाना आसान बनाया गया
6/25
- goroutines को लागू करके कोड को बहुत तेज़ बनाया गया
- Golang के net पैकेज के LookupCNAME फ़ंक्शन का उपयोग करके जाँच करने के बजाय, केवल dig का उपयोग करने के लिए बनाया गया क्योंकि यह आपको मृत DNS रिकॉर्ड भी देता है। अधिक हमले की सतह!!