
निष्क्रिय DNS सर्वर जो DNS अनुरोधों को हल करके, CNAME श्रृंखलाओं का पता लगाकर, और टोही के दौरान संभावित सबडोमेन टेकओवर को चिह्नित करके उजागर क्लाउड स्टोरेज बकेट (AWS S3, GCP, Azure) का पता लगाता है।
s3dns एक हल्का DNS सर्वर है जो DNS अनुरोधों को हल करके, CNAME को ट्रेस करके और ज्ञात बकेट URL पैटर्न से मिलान करके क्लाउड स्टोरेज बकेट (AWS S3, Google Cloud Storage, और Azure Blob) का पता लगाने में मदद करता है।
यह पेनटेस्टर्स, बग बाउंटी हंटर्स और क्लाउड सुरक्षा विश्लेषकों के लिए एक उपयोगी साथी है जो DNS ट्रैफ़िक विश्लेषण के दौरान खुले क्लाउड बकेट को पकड़ना चाहते हैं।
यदि S3DNS आपको किसी recon सत्र में समय बचाता है, तो इसे ⭐️ देने पर विचार करें — यह दूसरों को प्रोजेक्ट ढूंढने में मदद करता है।
CACHE_SIZE (डिफ़ॉल्ट: 1000 प्रविष्टियाँ, 0 सेट करने पर अक्षम) से कॉन्फ़िगर करने योग्य।RATE_LIMIT (डिफ़ॉल्ट: 100 req/s, 0 सेट करने पर अक्षम) से कॉन्फ़िगर करने योग्य।NXDOMAIN लौटाता है, तो S3DNS इसे संभावित डोमेन अधिग्रहण के रूप में चिह्नित करता है। यह एक लटकते DNS रिकॉर्ड को इंगित करता है जो एक अपंजीकृत बकेट की ओर इशारा करता है जिसे एक हमलावर पंजीकृत कर सकता है।max_cname_depth पैरामीटर से कॉन्फ़िगर करने योग्य।AZURE_IP_RANGES=false या AWS_IP_RANGES=false (डिफ़ॉल्ट सत्य है)।regex_patterns और हार्डकोडेड पैटर्न को patterns फ़ोल्डर में YAML फ़ाइलों के रूप में स्थानांतरित किया गया। आप अपने स्वयं के पैटर्न जोड़ सकते हैं।
regex_ से शुरू होने चाहिए।53 (UDP और TCP) पर DNS सर्वर के रूप में चलता हैS3DNS DNS क्वेरी के लिए पोर्ट 53 (UDP और TCP) पर सुनता है। प्रत्येक अनुरोध के लिए यह:
1.1.1.1) को अग्रेषित करता है — UDP क्लाइंट के लिए UDP पर, TCP क्लाइंट के लिए TCP परसमानांतर में, यह:
s3dns.log में लॉग करता है⚡ इसे अपने DNS के रूप में recon के दौरान उपयोग करें, और यह आपके उपकरणों या ब्राउज़र द्वारा हल किए जाने वाले प्रत्येक डोमेन के लिए निष्क्रिय रूप से क्लाउड बकेट और अधिग्रहण उम्मीदवारों को उजागर करेगा।
आपको केवल निम्नलिखित में से एक की आवश्यकता होगी:
केवल यदि आप इसे Python के साथ स्थानीय रूप से चलाना चाहते हैं तो आवश्यक है
git clone https://github.com/olizimmermann/s3dns.git
cd s3dns
(एक वर्चुअल वातावरण का उपयोग अनुशंसित है)
python3 -m venv venv
source venv/bin/activate
pip install -r requirements.txt
पोर्ट 53 के लिए उन्नत अधिकारों की आवश्यकता है:
sudo python s3dns.py
यदि sudo एक लापता मॉड्यूल का दावा करता है, तो प्रयास करें: sudo venv/bin/python s3dns.py
docker build -t ozimmermann/s3dns:latest .S3DNS के साथ आरंभ करने का सबसे आसान तरीका।
docker pull ozimmermann/s3dns:latest
docker run --rm -p 53:53/udp -p 53:53/tcp \
-v "./bucket_findings/:/app/buckets/" \
--name "s3dns" \
ozimmermann/s3dns:latest
docker build -t ozimmermann/s3dns:latest .
docker run --rm -p 53:53/udp -p 53:53/tcp \
-v "./bucket_findings/:/app/buckets/" \
--name "s3dns" \
ozimmermann/s3dns:latest
निष्कर्ष सहेजे जाते हैं:
./bucket_findings/ मेंजब उसी मशीन पर S3DNS का उपयोग कर रहे हैं जहाँ आप विश्लेषण करते हैं, तो --network host फ़्लैग सेट करना मदद कर सकता है:
docker run --rm -p 53:53/udp -p 53:53/tcp \
-v "./bucket_findings/:/app/buckets/" \
--network host \
--name "s3dns" \
ozimmermann/s3dns:latest
चूंकि पोर्ट 53 के लिए उन्नत अधिकारों की आवश्यकता है, कुछ उपयोगकर्ताओं (जैसे, Mac उपयोगकर्ता) को sudo की आवश्यकता हो सकती है:
sudo docker run --rm -p 53:53/udp -p 53:53/tcp \
-v "./bucket_findings/:/app/buckets/" \
--name "s3dns" \
ozimmermann/s3dns:latest
अपने सिस्टम या उपकरण के DNS रिज़ॉल्वर को अपने S3DNS इंस्टेंस पर सेट करें।
जब आप अपने लक्ष्य को ब्राउज़ या फ़ज़ कर रहे हों, तो S3DNS प्रत्येक डोमेन का विश्लेषण करता है और बताता है कि क्या यह निम्न में हल होता है:
- एक AWS S3 बकेट
- एक GCP बकेट
- एक Azure Blob कंटेनर
- 13 अन्य समर्थित क्लाउड स्टोरेज प्रदाताओं में से कोई
यह CNAME का अनुसरण करता है, इसलिए यदि कोई डोमेन
cdn.example.comकी ओर इशारा करता है, जो बदले में एक क्लाउड बकेट की ओर इशारा करता है, तो वह भी पकड़ा जाएगा।यह संभावित सबडोमेन अधिग्रहण को भी चिह्नित करता है — यदि कोई डोमेन क्लाउड स्टोरेज पैटर्न से मेल खाता है लेकिन लक्ष्य मौजूद नहीं है (NXDOMAIN), तो लटकते रिकॉर्ड को संभावित अधिग्रहण उम्मीदवार के रूप में हाइलाइट किया जाता है।
एक साइट का विश्लेषण करते समय इसका निष्क्रिय रूप से उपयोग करें ताकि सक्रिय जांच के बिना उजागर बकेट और अधिग्रहण के अवसरों को देखा जा सके।
आप कमांड-लाइन फ़्लैग, पर्यावरण चर, या s3dns.py को संशोधित करके व्यवहार को समायोजित कर सकते हैं।
प्रत्येक विकल्प के लिए प्राथमिकता है: कमांड-लाइन फ़्लैग > पर्यावरण चर > इंटरैक्टिव प्रॉम्प्ट / डिफ़ॉल्ट। बिना किसी फ़्लैग के चलाने पर बिल्कुल पहले जैसा व्यवहार होता है।
पूरी सूची के लिए python s3dns.py -h चलाएँ:
उदाहरण:
sudo python s3dns.py -l 0.0.0.0 -u 1.1.1.1 --rate-limit 200 --no-azure-ip-ranges
चूंकि Microsoft अपनी Azure Blob Storage IP रेंज को स्पष्ट रूप से नामित नहीं करता है, S3DNS सभी सार्वजनिक रूप से प्रदान किए गए Azure Storage IP पतों का उपयोग करता है। इससे गलत सकारात्मक परिणाम हो सकते हैं। यदि समस्याएँ आती हैं तो इस जाँच को अक्षम करने पर विचार करें:
AZURE_IP_RANGES=false
patterns/ निर्देशिका में YAML फ़ाइलें जोड़ें। regex_ उपसर्ग वाली फ़ाइलों को रेगेक्स पैटर्न के रूप में माना जाता है; अन्य सभी को सबस्ट्रिंग मिलान के रूप में माना जाता है।
Python:
sudo su
export DEBUG=true
python s3dns.py
Docker:
docker run --rm -p 53:53/udp -p 53:53/tcp \
-v "./bucket_findings/:/app/buckets/" \
-e "DEBUG=true" \
--name "s3dns" \
ozimmermann/s3dns:latest
Docker में एकाधिक पर्यावरण चर सेट करना:
docker run --rm -p 53:53/udp -p 53:53/tcp \
-v "./bucket_findings/:/app/buckets/" \
-e "LOCAL_DNS_SERVER_IP=0.0.0.0" \
-e "REAL_DNS_SERVER_IP=1.1.1.1" \
-e "RATE_LIMIT=200" \
-e "CACHE_SIZE=2000" \
--name "s3dns" \
ozimmermann/s3dns:latest

योगदान का स्वागत है — नए क्लाउड प्रदाता पैटर्न, बग फिक्स और सुधार। दिशानिर्देशों के लिए CONTRIBUTING.md देखें।
पैटर्न फ़ाइलें patterns/ में रहती हैं। किसी नए प्रदाता के लिए समर्थन जोड़ना उतना ही सरल है जितना कि एक YAML प्रविष्टि जोड़ना — Python की आवश्यकता नहीं है।
MIT लाइसेंस — उपयोग करने, सुधारने और साझा करने के लिए स्वतंत्र।
जिम्मेदारी से उपयोग करें। केवल उन डोमेन को स्कैन करें जिनके मालिक हैं या जिनके विश्लेषण की स्पष्ट अनुमति है।
अनधिकृत पहुँच या जांच अवैध हो सकती है।
| फ़्लैग | समतुल्य env var | विवरण |
|---|
-h, --help | – | सहायता दिखाएँ और बाहर निकलें |
--version | – | संस्करण दिखाएँ और बाहर निकलें |
-d, --debug | DEBUG | विस्तृत डीबग आउटपुट सक्षम करें |
-l, --listen IP | LOCAL_DNS_SERVER_IP | सुनने के लिए स्थानीय इंटरफ़ेस |
-u, --upstream IP | REAL_DNS_SERVER_IP | अग्रेषित करने के लिए अपस्ट्रीम DNS रिज़ॉल्वर |
-b, --bucket-file PATH | BUCKET_FILE | खोजे गए बकेट डोमेन लिखने का पथ |
--aws-ip-ranges / --no-aws-ip-ranges | AWS_IP_RANGES | AWS S3 IP रेंज जाँच टॉगल करें |
--azure-ip-ranges / --no-azure-ip-ranges | AZURE_IP_RANGES | Azure Storage IP रेंज जाँच टॉगल करें |
--rate-limit N | RATE_LIMIT | प्रति क्लाइंट IP अधिकतम DNS अनुरोध/सेकंड (0 = अक्षम) |
--cache-size N | CACHE_SIZE | अधिकतम कैश्ड DNS प्रतिक्रियाएँ (0 = अक्षम) |
--max-cname-depth N | – | अनुसरण करने के लिए अधिकतम CNAME श्रृंखला गहराई (डिफ़ॉल्ट: 10) |
| चर | डिफ़ॉल्ट | विवरण |
|---|
DEBUG | false | विस्तृत डीबग आउटपुट सक्षम करें |
AWS_IP_RANGES | true | AWS S3 IP रेंज जाँच सक्षम करें |
AZURE_IP_RANGES | true | Azure Storage IP रेंज जाँच सक्षम करें |
REAL_DNS_SERVER_IP | 1.1.1.1 | क्वेरी अग्रेषित करने के लिए अपस्ट्रीम DNS रिज़ॉल्वर |
LOCAL_DNS_SERVER_IP | 0.0.0.0 | सुनने के लिए स्थानीय इंटरफ़ेस |
BUCKET_FILE | buckets.txt | खोजे गए बकेट डोमेन लिखने का पथ |
RATE_LIMIT | 100 | प्रति क्लाइंट IP प्रति सेकंड अधिकतम DNS अनुरोध (0 = अक्षम) |
CACHE_SIZE | 1000 | अधिकतम कैश्ड DNS प्रतिक्रियाएँ (0 = अक्षम) |