Skip to content
KitploitKITPLOIT
OutilsBlog
Soumettre
OutilsBlog
Soumettre

Outils de Hacking, PenTest et Cybersécurité pour votre Arsenal de Sécurité !

Kitploit est un répertoire d'outils de hacking, de cybersécurité et de pentesting. Découvrez les dernières mises à jour des projets pour trouver des vulnérabilités, analyser des systèmes, automatiser les tests et renforcer votre sécurité.

··Flux·Contact·Confidentialité·© 2026 Kitploit

Répertoire d'outils

Catégories

Voir toutes les catégories
Loading categories
s3dns — Serveur DNS passif qui détecte les buckets de stockage cloud exposés (AWS S3, GCP, Azure) en résolvant les requêtes DNS, en traçant les chaînes CNAME, et en signalant les potentielles prises de contrôle de sous-domaines lors de la reconnaissance. | Kitploit
Outils/GitHubGitHub/olizimmermann/s3dns
OSINT (Renseignement de Sources Ouvertes)ReconnaissanceAnalyse des VulnérabilitésCollecte d'InformationsTests d'IntrusionSécurité CloudÉnumération de Sous-domainesAnalyse DNS
GitHubolizimmermann/s3dns

s3dns

Serveur DNS passif qui détecte les buckets de stockage cloud exposés (AWS S3, GCP, Azure) en résolvant les requêtes DNS, en traçant les chaînes CNAME, et en signalant les potentielles prises de contrôle de sous-domaines lors de la reconnaissance.

12913il y a 4 joursVérifié par Kitploit

Populaires

Voir tout →

Découvrez les outils les plus utilisés par notre communauté.

Explorer tous les outils

Parcourez notre collection d'outils

Voir tous les outils →
Partager
Voir le dépôt
Site web

S3DNS

s3dns est un serveur DNS léger qui aide à découvrir les buckets de stockage cloud (AWS S3, Google Cloud Storage et Azure Blob) en résolvant les requêtes DNS, en traçant les CNAME et en faisant correspondre les modèles d'URL de buckets connus.

C'est un compagnon pratique pour les testeurs d'intrusion, les chasseurs de bug bounty et les analystes en sécurité cloud qui souhaitent détecter les buckets cloud exposés lors de l'analyse du trafic DNS.

Si S3DNS vous fait gagner du temps lors d'une session de reconnaissance, pensez à lui donner une ⭐️ — cela aide les autres à trouver le projet.



🆕 Mise à jour 2026/03/06

  • Support TCP/53 — S3DNS écoute désormais sur les ports UDP et TCP 53. Les clients qui réessaient en TCP après une réponse UDP tronquée sont traités correctement, la requête étant transmise en amont via TCP pour récupérer la réponse complète.
  • Tampon DNS plus grand — Le tampon de réception UDP est passé de 512 à 4096 octets. Les options EDNS0 du client sont transmises telles quelles au résolveur amont.
  • Cache de réponses — Cache LRU basé sur TTL pour les réponses DNS, partagé entre les chemins UDP et TCP. Réduit la charge amont et la latence lors des sessions de reconnaissance actives. Configurable via CACHE_SIZE (par défaut : 1000 entrées, mettre à 0 pour désactiver).
  • Limitation de débit — Limite du taux de requêtes par IP cliente pour éviter les abus. Configurable via RATE_LIMIT (par défaut : 100 req/s, mettre à 0 pour désactiver).
  • Détection de prise de contrôle de sous-domaine — Lorsqu'un domaine correspond à un modèle de stockage cloud mais renvoie NXDOMAIN, S3DNS le signale comme une possible prise de contrôle de domaine. Cela indique un enregistrement DNS orphelin pointant vers un bucket non réclamé qu'un attaquant pourrait enregistrer.
  • Vérifications de plages IP IPv6 — Les enregistrements AAAA sont désormais également résolus et vérifiés par rapport aux plages IP de stockage cloud connues. Les préfixes AWS IPv6 S3 sont chargés en même temps que les plages IPv4.
  • Limite de profondeur CNAME — Le suivi récursif des chaînes CNAME est désormais plafonné (par défaut : 10 sauts) pour éviter les boucles infinies sur des enregistrements artificiels ou cycliques. Configurable via le paramètre max_cname_depth.

Mise à jour 2025/08/19

  • Ajout des plages IP AWS hors ligne sous forme de fichier JSON.
  • Ajout des plages IP Azure Storage hors ligne sous forme de fichier JSON.
  • Ajout de l'option pour désactiver la vérification des plages IP pour chaque service en utilisant :
    • AZURE_IP_RANGES=false ou AWS_IP_RANGES=false (par défaut true).
  • Déplacement des regex_patterns et des motifs codés en dur vers le dossier patterns sous forme de fichiers YAML. Vous pouvez ajouter vos propres motifs.
    • Les motifs regex doivent commencer par regex_.
  • Ajout de plusieurs autres fournisseurs cloud :
    • IBM Cloud Object Storage
    • Oracle Object Storage
    • Alibaba OSS
    • Backblaze B2
    • Linode Object Storage
    • Scaleway Object Storage
    • Vultr Object Storage
    • Cloudflare R2

Mise à jour 2025/06/21

  • Ajout du support AWS GovCloud.

Mise à jour 2025/04/16

  • Mise à jour des motifs regex.
  • Mise à jour de la sortie pour une meilleure visibilité (affichage du domaine d'origine pour les CNAME, de l'IP cliente et des indicateurs de plage IP).
  • Téléchargement automatique des plages IP depuis AWS — elles sont désormais également vérifiées !
  • Option d'ajouter vos propres plages IP (ajustez manuellement les motifs ou les plages IP dans la classe).

Mise à jour 2025/04/14

  • Ajout du support regex pour les buckets Google Cloud Storage et Azure Blob Storage.

🚀 Fonctionnalités

  • Fonctionne comme serveur DNS sur le port 53 (UDP et TCP)
  • Détecte les potentiels buckets de stockage cloud dans les requêtes DNS :
    • AWS S3 (style hôte virtuel et chemin, y compris GovCloud)
    • Buckets GCP
    • Conteneurs Azure Blob
    • DigitalOcean Spaces, Wasabi, IBM COS, Oracle Object Storage, Alibaba OSS, Backblaze B2, Linode, Scaleway, Vultr, Cloudflare R2
  • Suit les chaînes CNAME de manière récursive (limite de profondeur configurable) pour détecter les liens vers des buckets cloud masqués
  • Signale les prises de contrôle de sous-domaine potentielles — motifs de stockage cloud qui renvoient NXDOMAIN
  • Vérifie les IP résolues (A et AAAA) par rapport aux plages IP AWS S3 et Azure Storage connues
  • Cache de réponses avec TTL pour réduire la latence et la charge amont pendant la reconnaissance
  • Limitation de débit par IP pour prévenir les abus
  • Enregistre toutes les découvertes dans la console et dans un fichier
  • Adapté aux conteneurs

⚙️ Comment ça fonctionne

S3DNS écoute sur le port 53 (UDP et TCP) pour les requêtes DNS. Pour chaque requête, il :

  1. Extrait le domaine demandé
  2. Vérifie le cache de réponses — si une réponse en cache valide existe, elle est renvoyée immédiatement
  3. Transmet la requête à un résolveur DNS réel (ex. 1.1.1.1) — en UDP pour les clients UDP, en TCP pour les clients TCP
  4. Renvoie la réponse DNS valide au client

En parallèle, il :

  • Vérifie les motifs de bucket de stockage cloud (correspondance regex et nom d'hôte codé en dur)
  • Vérifie les IP résolues par rapport aux plages AWS S3 et Azure Storage connues (IPv4 et IPv6)
  • Suit les chaînes CNAME de manière récursive jusqu'à la profondeur configurée
  • Signale les hits NXDOMAIN sur les motifs correspondants comme candidats potentiels à la prise de contrôle de sous-domaine
  • Enregistre toutes les découvertes dans la console et dans s3dns.log

⚡ Utilisez ceci comme votre DNS pendant la reconnaissance, et il fera remonter passivement les buckets cloud et les candidats à la prise de contrôle pour chaque domaine que vos outils ou navigateur résolvent.


🧱 Prérequis

Vous n'aurez besoin que de l'un des éléments suivants :

  • Python 3.11+
  • Docker (optionnel, mais recommandé)

🔧 Installation

Nécessaire uniquement si vous souhaitez l'exécuter localement avec Python

Cloner le dépôt

root@kitploit:~
git clone https://github.com/olizimmermann/s3dns.git
cd s3dns

Installer les dépendances

(L'utilisation d'un environnement virtuel est recommandée)

root@kitploit:~
python3 -m venv venv
source venv/bin/activate
pip install -r requirements.txt

🧪 Utilisation

Exécuter avec Python

Le port 53 nécessite des privilèges élevés :

root@kitploit:~
sudo python s3dns.py

Si sudo signale un module manquant, essayez : sudo venv/bin/python s3dns.py

  • Si vous construisez l'image vous-même, assurez-vous de la taguer comme la version Docker Hub pour la cohérence : docker build -t ozimmermann/s3dns:latest .

Utiliser Docker

La façon la plus simple de démarrer avec S3DNS.

root@kitploit:~
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

Construire et exécuter avec Docker

root@kitploit:~
docker build -t ozimmermann/s3dns:latest .
root@kitploit:~
docker run --rm -p 53:53/udp -p 53:53/tcp \
  -v "./bucket_findings/:/app/buckets/" \
  --name "s3dns" \
  ozimmermann/s3dns:latest

Les découvertes sont enregistrées :

  • Dans le terminal, et/ou
  • Dans ./bucket_findings/

Dépannage

Lorsque vous utilisez S3DNS sur la même machine où vous effectuez l'analyse, il peut être utile de définir le drapeau --network host :

root@kitploit:~
docker run --rm -p 53:53/udp -p 53:53/tcp \
  -v "./bucket_findings/:/app/buckets/" \
  --network host \
  --name "s3dns" \
  ozimmermann/s3dns:latest

Étant donné que le port 53 nécessite des privilèges élevés, certains utilisateurs (par exemple, les utilisateurs Mac) peuvent avoir besoin de sudo :

root@kitploit:~
sudo docker run --rm -p 53:53/udp -p 53:53/tcp \
  -v "./bucket_findings/:/app/buckets/" \
  --name "s3dns" \
  ozimmermann/s3dns:latest

🌐 Utiliser S3DNS en reconnaissance

Définissez le résolveur DNS de votre système ou outil sur votre instance S3DNS.

En naviguant ou en fuzzant votre cible, S3DNS analyse chaque domaine et vous indique s'il se résout en :

  • Un bucket AWS S3
  • Un bucket GCP
  • Un conteneur Azure Blob
  • L'un des 13 autres fournisseurs de stockage cloud pris en charge

Il suit les CNAME, donc si un domaine pointe vers cdn.example.com, qui à son tour pointe vers un bucket cloud, il le détectera également.

Il signale également les prises de contrôle de sous-domaine potentielles — si un domaine correspond à un motif de stockage cloud mais que la cible n'existe pas (NXDOMAIN), l'enregistrement orphelin est mis en évidence comme un candidat possible à la prise de contrôle.

Utilisez-le passivement lors de l'analyse d'un site pour repérer les buckets exposés et les opportunités de prise de contrôle sans sondage actif.


⚙️ Configuration

Vous pouvez ajuster le comportement via des drapeaux en ligne de commande, des variables d'environnement ou en modifiant s3dns.py.

La priorité pour chaque option est : drapeau en ligne de commande > variable d'environnement > invite interactive / valeur par défaut. L'exécution sans drapeau se comporte exactement comme avant.

Drapeaux en ligne de commande

Exécutez python s3dns.py -h pour la liste complète :

Exemple :

root@kitploit:~
sudo python s3dns.py -l 0.0.0.0 -u 1.1.1.1 --rate-limit 200 --no-azure-ip-ranges

Variables d'environnement

⚠️ Note sur les plages IP Azure

Étant donné que Microsoft ne nomme pas explicitement ses plages IP Azure Blob Storage, S3DNS utilise toutes les adresses IP Azure Storage fournies publiquement. Cela peut entraîner des faux positifs. Envisagez de désactiver cette vérification si vous rencontrez des problèmes :

root@kitploit:~
AZURE_IP_RANGES=false

Ajouter des motifs personnalisés

Ajoutez des fichiers YAML dans le répertoire patterns/. Les fichiers préfixés par regex_ sont traités comme des motifs regex ; tous les autres sont traités comme des correspondances de sous-chaîne.


Mode débogage

Python :

root@kitploit:~
sudo su
export DEBUG=true
python s3dns.py

Docker :

root@kitploit:~
docker run --rm -p 53:53/udp -p 53:53/tcp \
  -v "./bucket_findings/:/app/buckets/" \
  -e "DEBUG=true" \
  --name "s3dns" \
  ozimmermann/s3dns:latest

Définir plusieurs variables d'environnement dans Docker :

root@kitploit:~
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

Exemple de sortie

Exemple de sortie Docker


Contribuer

Les contributions sont les bienvenues — nouveaux motifs de fournisseurs cloud, corrections de bugs et améliorations. Voir CONTRIBUTING.md pour les directives.

Les fichiers de motifs se trouvent dans patterns/. Ajouter le support d'un nouveau fournisseur est aussi simple que d'ajouter une entrée YAML — aucun Python requis.


📄 Licence

Licence MIT — Libre d'utilisation, d'amélioration et de partage.


⚠️ Avertissement

Utilisez de manière responsable. Ne scannez que les domaines que vous possédez ou pour lesquels vous avez l'autorisation explicite d'analyser.

Les accès ou sondages non autorisés peuvent être illégaux.

Télécharger l’outil
DrapeauVariable d'environnement équivalenteDescription
-h, --help–Affiche l'aide et quitte
--version–Affiche la version et quitte
-d, --debugDEBUGActive la sortie de débogage verbeuse
-l, --listen IPLOCAL_DNS_SERVER_IPInterface locale sur laquelle écouter
-u, --upstream IPREAL_DNS_SERVER_IPRésolveur DNS amont auquel transmettre
-b, --bucket-file CHEMINBUCKET_FILEChemin pour écrire les domaines de buckets découverts
--aws-ip-ranges / --no-aws-ip-rangesAWS_IP_RANGESActive/désactive les vérifications des plages IP AWS S3
--azure-ip-ranges / --no-azure-ip-rangesAZURE_IP_RANGESActive/désactive les vérifications des plages IP Azure Storage
--rate-limit NRATE_LIMITNombre max de requêtes DNS/s par IP cliente (0 = désactivé)
--cache-size NCACHE_SIZENombre max de réponses DNS en cache (0 = désactivé)
--max-cname-depth N–Profondeur max de chaîne CNAME à suivre (par défaut : 10)
VariableValeur par défautDescription
DEBUGfalseActive la sortie de débogage verbeuse
AWS_IP_RANGEStrueActive les vérifications des plages IP AWS S3
AZURE_IP_RANGEStrueActive les vérifications des plages IP Azure Storage
REAL_DNS_SERVER_IP1.1.1.1Résolveur DNS amont pour transmettre les requêtes
LOCAL_DNS_SERVER_IP0.0.0.0Interface locale sur laquelle écouter
BUCKET_FILEbuckets.txtChemin pour écrire les domaines de buckets découverts
RATE_LIMIT100Nombre max de requêtes DNS par seconde par IP cliente (0 = désactivé)
CACHE_SIZE1000Nombre max de réponses DNS en cache (0 = désactivé)