
Un serveur DNS MITM en Python basé sur des expressions régulières avec prise en charge des attaques de rebinding DNS.
Mise à jour 4/14/2020 - Support de Python 2 supprimé et code basculé vers Python3
Maintenant avec round-robin & options améliorées !
Bugs : @crypt0s - Twitter [email protected] - Email
Un serveur DNS basé sur les expressions régulières Python !
UTILISATION :
./fakedns.py [-h] -c Config path [-i interface IP address] [--rebind]
Le fichier dns.conf doit être configuré de la manière suivante :
[CODE DU TYPE D'ENREGISTREMENT] [expression régulière Python] [réponse] [réponse de rebinding]
La réponse peut être une adresse IP ou la chaîne self,
le sucre syntaxique self sera traduit en l'adresse IP locale de votre machine, par exemple 192.168.1.100.
Si aucune correspondance n'est trouvée, le serveur DNS tentera de résoudre la requête en utilisant le serveur DNS configuré sur votre machine locale et transmettra la requête à ce serveur pour le compte de l'utilisateur demandeur.
- A
- TXT
- AAAA
- PTR
- SOA
- MX
- CNAME
- Prend en charge le DNS Rebinding
- Prend en charge le round-robin
Les règles de round-robin sont implémentées. Chaque fois qu'un client demande une règle correspondante, FakeDNS fournit l'IP suivante dans la liste d'IP fournie dans la règle.
Une liste d'IP est séparée par des virgules.
Par exemple :
A robin.net 1.2.3.4,1.1.1.1,2.2.2.2
Est une règle de round-robin pour robin.net qui renverra des réponses pointant vers 1.2.3.4, 1.1.1.1 et 2.2.2.2, en itérant dans cet ordre chaque fois qu'un client fait une demande pour l'entrée robin.net.
NOTE : Ces IP ne sont pas incluses sous forme de liste dans la réponse au client - ils n'obtiennent toujours qu'une seule IP dans la réponse (pourrait être modifié plus tard)
FakeDNS prend en charge les règles de rebinding, ce qui signifie essentiellement que le serveur accepte un certain nombre de requêtes d'un client pour un domaine jusqu'à un seuil (par défaut 1 requête) puis change l'adresse IP pour une autre.
Par exemple :
A rebind.net 1.1.1.1 10%4.5.6.7
Signifie que nous avons un enregistrement A pour rebind.net qui renvoie 1.1.1.1 pour les 10 premières tentatives. À la 11e requête d'un client qui a déjà fait 10 requêtes, FakeDNS commence à servir la deuxième IP, 4.5.6.7
Vous pouvez utiliser une liste d'adresses ici et FakeDNS fera du round-robin pour vous, comme dans la règle "normale".
(localhost uniquement sans étapes supplémentaires)
J'ai eu beaucoup de succès à tester/développer FakeDNS dans Docker car c'est plus facile que de l'exécuter nativement sur des installations Ubuntu modernes qui ont déjà leurs propres services DNS fonctionnant sur le port 53.
Si vous voulez l'essayer, vous pouvez le faire sans trop d'effort en suivant ces étapes :
En supposant que vous êtes dans le répertoire FakeDns : sudo docker run --interactive --tty --volume \pwd`:/opt/FakeDns -p 5353:53/udp python:3.8 /opt/FakeDns/fakedns.py -c /opt/FakeDns/dns.conf.example. Et pour tester, vous pouvez exécuter nslookup -port=5353 testrule.test 127.0.0.1qui devrait retourner1.1.1.1` lors de votre première requête
Ou, si vous préférez utiliser docker-compose, exécutez simplement docker-compose up et utilisez le même test que ci-dessus.