अपडेट पर वापस जाएँ
New releaseJul 21, 2026

s3dns v0.2.22

निष्क्रिय DNS सर्वर जो DNS अनुरोधों को हल करके, CNAME श्रृंखलाओं का पता लगाकर, और टोही के दौरान संभावित सबडोमेन टेकओवर को चिह्नित करके उजागर क्लाउड स्टोरेज बकेट (AWS S3, GCP, Azure) का पता लगाता है।

साझा करें

S3DNS

s3dns एक हल्का DNS सर्वर है जो DNS अनुरोधों को हल करके, CNAME को ट्रेस करके और ज्ञात बकेट URL पैटर्न से मिलान करके क्लाउड स्टोरेज बकेट (AWS S3, Google Cloud Storage, और Azure Blob) का पता लगाने में मदद करता है।

यह पेनटेस्टर्स, बग बाउंटी हंटर्स और क्लाउड सुरक्षा विश्लेषकों के लिए एक उपयोगी साथी है जो DNS ट्रैफ़िक विश्लेषण के दौरान खुले क्लाउड बकेट को पकड़ना चाहते हैं।

यदि S3DNS आपको किसी recon सत्र में समय बचाता है, तो इसे ⭐️ देने पर विचार करें — यह दूसरों को प्रोजेक्ट ढूंढने में मदद करता है।



🆕 अद्यतन 2026/03/06

  • TCP/53 समर्थन — S3DNS अब UDP और TCP दोनों पोर्ट 53 पर सुनता है। जो क्लाइंट छोटे UDP प्रतिक्रिया के बाद TCP पर पुनः प्रयास करते हैं, उन्हें सही ढंग से संभाला जाता है, क्वेरी को पूर्ण उत्तर प्राप्त करने के लिए TCP पर अपस्ट्रीम भेजा जाता है।
  • बड़ा DNS बफर — UDP प्राप्त बफर 512 से बढ़ाकर 4096 बाइट्स कर दिया गया है। क्लाइंट से EDNS0 विकल्प अपरिवर्तित अपस्ट्रीम रिज़ॉल्वर को भेजे जाते हैं।
  • प्रतिक्रिया कैश — DNS प्रतिक्रियाओं के लिए TTL-आधारित LRU कैश, UDP और TCP पथों में साझा किया गया। सक्रिय recon सत्रों के दौरान अपस्ट्रीम लोड और विलंबता कम करता है। CACHE_SIZE (डिफ़ॉल्ट: 1000 प्रविष्टियाँ, 0 सेट करने पर अक्षम) से कॉन्फ़िगर करने योग्य।
  • दर सीमित करना — दुरुपयोग को रोकने के लिए प्रति क्लाइंट-IP अनुरोध दर सीमा। RATE_LIMIT (डिफ़ॉल्ट: 100 req/s, 0 सेट करने पर अक्षम) से कॉन्फ़िगर करने योग्य।
  • सबडोमेन अधिग्रहण का पता लगाना — जब कोई डोमेन क्लाउड स्टोरेज पैटर्न से मेल खाता है लेकिन NXDOMAIN लौटाता है, तो S3DNS इसे संभावित डोमेन अधिग्रहण के रूप में चिह्नित करता है। यह एक लटकते DNS रिकॉर्ड को इंगित करता है जो एक अपंजीकृत बकेट की ओर इशारा करता है जिसे एक हमलावर पंजीकृत कर सकता है।
  • IPv6 IP-रेंज जाँच — AAAA रिकॉर्ड अब भी हल किए जाते हैं और ज्ञात क्लाउड स्टोरेज IP रेंज के विरुद्ध जाँचे जाते हैं। AWS IPv6 S3 उपसर्ग IPv4 रेंज के साथ लोड किए जाते हैं।
  • CNAME गहराई सीमा — पुनरावर्ती CNAME श्रृंखला अनुसरण अब सीमित है (डिफ़ॉल्ट: 10 हॉप्स) ताकि निर्मित या चक्रीय रिकॉर्ड पर अनंत लूप को रोका जा सके। max_cname_depth पैरामीटर से कॉन्फ़िगर करने योग्य।

अद्यतन 2025/08/19

  • AWS IP रेंज को JSON फ़ाइल के रूप में ऑफलाइन जोड़ा गया।
  • Azure Storage IP रेंज को JSON फ़ाइल के रूप में ऑफलाइन जोड़ा गया।
  • किसी भी सेवा के लिए IP रेंज जाँच को अक्षम करने का विकल्प जोड़ा गया:
    • AZURE_IP_RANGES=false या AWS_IP_RANGES=false (डिफ़ॉल्ट सत्य है)।
  • regex_patterns और हार्डकोडेड पैटर्न को patterns फ़ोल्डर में YAML फ़ाइलों के रूप में स्थानांतरित किया गया। आप अपने स्वयं के पैटर्न जोड़ सकते हैं।
    • Regex पैटर्न regex_ से शुरू होने चाहिए।
  • कई और क्लाउड प्रदाता जोड़े गए:
    • IBM Cloud Object Storage
    • Oracle Object Storage
    • Alibaba OSS
    • Backblaze B2
    • Linode Object Storage
    • Scaleway Object Storage
    • Vultr Object Storage
    • Cloudflare R2

अद्यतन 2025/06/21

  • AWS GovCloud समर्थन जोड़ा गया।

अद्यतन 2025/04/16

  • नियमित अभिव्यक्ति पैटर्न अपडेट किए गए।
  • बेहतर दृश्यता के लिए आउटपुट अपडेट किया गया (CNAME के लिए मूल डोमेन, क्लाइंट IP और IP रेंज संकेतक प्रदर्शित करना)।
  • AWS से IP रेंज का स्वचालित डाउनलोड — अब उनकी भी जाँच की जा रही है!
  • अपनी स्वयं की IP रेंज जोड़ने का विकल्प (वर्ग में पैटर्न या IP रेंज को मैन्युअल रूप से समायोजित करें)।

अद्यतन 2025/04/14

  • Google Cloud Storage और Azure Blob Storage बकेट के लिए रेगेक्स समर्थन जोड़ा गया।

🚀 विशेषताएँ

  • पोर्ट 53 (UDP और TCP) पर DNS सर्वर के रूप में चलता है
  • DNS अनुरोधों में संभावित क्लाउड स्टोरेज बकेट का पता लगाता है:
    • AWS S3 (वर्चुअल-होस्ट और पथ शैली, GovCloud सहित)
    • GCP बकेट
    • Azure Blob कंटेनर
    • DigitalOcean Spaces, Wasabi, IBM COS, Oracle Object Storage, Alibaba OSS, Backblaze B2, Linode, Scaleway, Vultr, Cloudflare R2
  • CNAME श्रृंखलाओं का पुनरावर्ती रूप से अनुसरण करता है (कॉन्फ़िगर करने योग्य गहराई सीमा) ताकि मास्क किए गए क्लाउड बकेट लिंक को पकड़ सके
  • संभावित सबडोमेन अधिग्रहण को चिह्नित करता है — क्लाउड स्टोरेज पैटर्न जो NXDOMAIN लौटाते हैं
  • हल किए गए IP (A और AAAA दोनों) को ज्ञात AWS S3 और Azure Storage IP रेंज के विरुद्ध जाँचता है
  • TTL-जागरूक प्रतिक्रिया कैश recon के दौरान विलंबता और अपस्ट्रीम लोड कम करने के लिए
  • प्रति-IP दर सीमित दुरुपयोग को रोकने के लिए
  • सभी निष्कर्षों को कंसोल और फ़ाइल में लॉग करता है
  • कंटेनर-अनुकूल

⚙️ यह कैसे काम करता है

S3DNS DNS क्वेरी के लिए पोर्ट 53 (UDP और TCP) पर सुनता है। प्रत्येक अनुरोध के लिए यह:

  1. अनुरोधित डोमेन निकालता है
  2. प्रतिक्रिया कैश जाँचता है — यदि कोई वैध कैश्ड उत्तर मौजूद है, तो इसे तुरंत लौटा दिया जाता है
  3. अनुरोध को एक वास्तविक DNS रिज़ॉल्वर (जैसे, 1.1.1.1) को अग्रेषित करता है — UDP क्लाइंट के लिए UDP पर, TCP क्लाइंट के लिए TCP पर
  4. क्लाइंट को वैध DNS प्रतिक्रिया लौटाता है

समानांतर में, यह:

  • क्लाउड स्टोरेज बकेट पैटर्न की जाँच करता है (रेगेक्स और हार्डकोडेड होस्टनाम मिलान)
  • हल किए गए IP को ज्ञात AWS S3 और Azure Storage रेंज के विरुद्ध जाँचता है (IPv4 और IPv6)
  • CNAME श्रृंखलाओं का पुनरावर्ती रूप से अनुसरण करता है कॉन्फ़िगर की गई गहराई तक
  • मिलान किए गए पैटर्न पर NXDOMAIN हिट को संभावित सबडोमेन अधिग्रहण उम्मीदवारों के रूप में चिह्नित करता है
  • सभी निष्कर्षों को कंसोल और s3dns.log में लॉग करता है

⚡ इसे अपने DNS के रूप में recon के दौरान उपयोग करें, और यह आपके उपकरणों या ब्राउज़र द्वारा हल किए जाने वाले प्रत्येक डोमेन के लिए निष्क्रिय रूप से क्लाउड बकेट और अधिग्रहण उम्मीदवारों को उजागर करेगा।


🧱 पूर्वापेक्षाएँ

आपको केवल निम्नलिखित में से एक की आवश्यकता होगी:

  • Python 3.11+
  • Docker (वैकल्पिक, लेकिन अनुशंसित)

🔧 स्थापना

केवल यदि आप इसे Python के साथ स्थानीय रूप से चलाना चाहते हैं तो आवश्यक है

रिपॉजिटरी क्लोन करें

git clone https://github.com/olizimmermann/s3dns.git
cd s3dns

निर्भरताएँ स्थापित करें

(एक वर्चुअल वातावरण का उपयोग अनुशंसित है)

python3 -m venv venv
source venv/bin/activate
pip install -r requirements.txt

🧪 उपयोग

Python से चलाएँ

पोर्ट 53 के लिए उन्नत अधिकारों की आवश्यकता है:

sudo python s3dns.py

यदि sudo एक लापता मॉड्यूल का दावा करता है, तो प्रयास करें: sudo venv/bin/python s3dns.py

  • यदि आप स्वयं छवि बनाते हैं, तो सुनिश्चित करें कि इसे Docker Hub संस्करण के समान टैग करें: docker build -t ozimmermann/s3dns:latest .

Docker का उपयोग करें

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 के साथ बिल्ड और चलाएँ

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

🌐 recon में S3DNS का उपयोग करना

अपने सिस्टम या उपकरण के DNS रिज़ॉल्वर को अपने S3DNS इंस्टेंस पर सेट करें।

जब आप अपने लक्ष्य को ब्राउज़ या फ़ज़ कर रहे हों, तो S3DNS प्रत्येक डोमेन का विश्लेषण करता है और बताता है कि क्या यह निम्न में हल होता है:

  • एक AWS S3 बकेट
  • एक GCP बकेट
  • एक Azure Blob कंटेनर
  • 13 अन्य समर्थित क्लाउड स्टोरेज प्रदाताओं में से कोई

यह CNAME का अनुसरण करता है, इसलिए यदि कोई डोमेन cdn.example.com की ओर इशारा करता है, जो बदले में एक क्लाउड बकेट की ओर इशारा करता है, तो वह भी पकड़ा जाएगा।

यह संभावित सबडोमेन अधिग्रहण को भी चिह्नित करता है — यदि कोई डोमेन क्लाउड स्टोरेज पैटर्न से मेल खाता है लेकिन लक्ष्य मौजूद नहीं है (NXDOMAIN), तो लटकते रिकॉर्ड को संभावित अधिग्रहण उम्मीदवार के रूप में हाइलाइट किया जाता है।

एक साइट का विश्लेषण करते समय इसका निष्क्रिय रूप से उपयोग करें ताकि सक्रिय जांच के बिना उजागर बकेट और अधिग्रहण के अवसरों को देखा जा सके


⚙️ कॉन्फ़िगरेशन

आप कमांड-लाइन फ़्लैग, पर्यावरण चर, या s3dns.py को संशोधित करके व्यवहार को समायोजित कर सकते हैं।

प्रत्येक विकल्प के लिए प्राथमिकता है: कमांड-लाइन फ़्लैग > पर्यावरण चर > इंटरैक्टिव प्रॉम्प्ट / डिफ़ॉल्ट। बिना किसी फ़्लैग के चलाने पर बिल्कुल पहले जैसा व्यवहार होता है।

कमांड-लाइन फ़्लैग

पूरी सूची के लिए python s3dns.py -h चलाएँ:

फ़्लैगसमतुल्य env varविवरण
-h, --helpसहायता दिखाएँ और बाहर निकलें
--versionसंस्करण दिखाएँ और बाहर निकलें
-d, --debugDEBUGविस्तृत डीबग आउटपुट सक्षम करें
-l, --listen IPLOCAL_DNS_SERVER_IPसुनने के लिए स्थानीय इंटरफ़ेस
-u, --upstream IPREAL_DNS_SERVER_IPअग्रेषित करने के लिए अपस्ट्रीम DNS रिज़ॉल्वर
-b, --bucket-file PATHBUCKET_FILEखोजे गए बकेट डोमेन लिखने का पथ
--aws-ip-ranges / --no-aws-ip-rangesAWS_IP_RANGESAWS S3 IP रेंज जाँच टॉगल करें
--azure-ip-ranges / --no-azure-ip-rangesAZURE_IP_RANGESAzure Storage IP रेंज जाँच टॉगल करें
--rate-limit NRATE_LIMITप्रति क्लाइंट IP अधिकतम DNS अनुरोध/सेकंड (0 = अक्षम)
--cache-size NCACHE_SIZEअधिकतम कैश्ड DNS प्रतिक्रियाएँ (0 = अक्षम)
--max-cname-depth Nअनुसरण करने के लिए अधिकतम CNAME श्रृंखला गहराई (डिफ़ॉल्ट: 10)

उदाहरण:

sudo python s3dns.py -l 0.0.0.0 -u 1.1.1.1 --rate-limit 200 --no-azure-ip-ranges

पर्यावरण चर

चरडिफ़ॉल्टविवरण
DEBUGfalseविस्तृत डीबग आउटपुट सक्षम करें
AWS_IP_RANGEStrueAWS S3 IP रेंज जाँच सक्षम करें
AZURE_IP_RANGEStrueAzure Storage IP रेंज जाँच सक्षम करें
REAL_DNS_SERVER_IP1.1.1.1क्वेरी अग्रेषित करने के लिए अपस्ट्रीम DNS रिज़ॉल्वर
LOCAL_DNS_SERVER_IP0.0.0.0सुनने के लिए स्थानीय इंटरफ़ेस
BUCKET_FILEbuckets.txtखोजे गए बकेट डोमेन लिखने का पथ
RATE_LIMIT100प्रति क्लाइंट IP प्रति सेकंड अधिकतम DNS अनुरोध (0 = अक्षम)
CACHE_SIZE1000अधिकतम कैश्ड DNS प्रतिक्रियाएँ (0 = अक्षम)

⚠️ Azure IP रेंज पर ध्यान दें

चूंकि 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

नमूना आउटपुट

Sample Output Docker


योगदान

योगदान का स्वागत है — नए क्लाउड प्रदाता पैटर्न, बग फिक्स और सुधार। दिशानिर्देशों के लिए CONTRIBUTING.md देखें।

पैटर्न फ़ाइलें patterns/ में रहती हैं। किसी नए प्रदाता के लिए समर्थन जोड़ना उतना ही सरल है जितना कि एक YAML प्रविष्टि जोड़ना — Python की आवश्यकता नहीं है।


📄 लाइसेंस

MIT लाइसेंस — उपयोग करने, सुधारने और साझा करने के लिए स्वतंत्र।


⚠️ अस्वीकरण

जिम्मेदारी से उपयोग करें। केवल उन डोमेन को स्कैन करें जिनके मालिक हैं या जिनके विश्लेषण की स्पष्ट अनुमति है।

अनधिकृत पहुँच या जांच अवैध हो सकती है।

श्रेणियाँ