
Ein auf regulären Ausdrücken basierender Python-MITM-DNS-Server mit Unterstützung für DNS-Rebinding-Angriffe
Update 4/14/2020 - Python-2-Unterstützung entfernt und Code auf Python3 umgestellt
Jetzt mit Round-Robin und verbesserten Optionen!
Fehler: @crypt0s - Twitter
[email protected] - E-Mail
Ein DNS-Server, der auf Python-Regulären Ausdrücken basiert!
USAGE:
./fakedns.py [-h] -c Config path [-i interface IP address] [--rebind]
Die dns.conf sollte wie folgt eingerichtet werden:
[RECORD TYPE CODE] [python regular expression] [answer] [rebind answer]
Die Antwort kann eine IP-Adresse oder der String self sein;
der self-Syntaxzucker wird in die lokale IP-Adresse deines aktuellen Rechners übersetzt, z. B. 192.168.1.100.
Wenn keine Übereinstimmung gefunden wird, versucht der DNS-Server, die Anfrage mithilfe des DNS-Servers aufzulösen, der auf deinem lokalen Rechner eingestellt ist, und leitet die Anfrage im Namen des anfragenden Benutzers an diesen Server weiter.
- A
- TXT
- AAAA
- PTR
- SOA
- MX
- CNAME
- Supports DNS Rebinding
- Supports round-robin
Round-Robin-Regeln sind implementiert. Jedes Mal, wenn ein Client eine passende Regel anfragt, liefert FakeDNS die nächste IP aus der Liste der in der Regel angegebenen IPs aus.
Eine Liste von IPs wird durch Kommas getrennt.
Zum Beispiel:
A robin.net 1.2.3.4,1.1.1.1,2.2.2.2
Das ist eine Round-Robin-Regel für robin.net, die Antworten ausliefert, die auf 1.2.3.4, 1.1.1.1 und 2.2.2.2 verweisen, und bei jeder Anfrage eines Clients für den robin.net-Eintrag in dieser Reihenfolge durchläuft.
HINWEIS: Diese IPs werden dem Client nicht als Liste in der Antwort übermittelt – er erhält weiterhin nur eine einzelne IP in der Antwort (könnte später geändert werden).
FakeDNS unterstützt Rebinding-Regeln, was im Grunde bedeutet, dass der Server eine bestimmte Anzahl von Anfragen eines Clients für eine Domain akzeptiert, bis ein Schwellenwert erreicht ist (standardmäßig 1 Anfrage), und dann die IP-Adresse auf eine andere ändert.
Zum Beispiel:
A rebind.net 1.1.1.1 10%4.5.6.7
Das bedeutet, dass wir einen A-Record für rebind.net haben, der für die ersten 10 Versuche auf 1.1.1.1 aufgelöst wird. Bei der 11. Anfrage eines Clients, der bereits 10 Anfragen gestellt hat, beginnt FakeDNS, die zweite IP, 4.5.6.7, auszuliefern.
Du kannst hier eine Liste von Adressen verwenden, und FakeDNS wendet darauf Round-Robin an, genau wie bei der „normalen“ Regel.
(nur localhost ohne zusätzliche Schritte)
Ich hatte großen Erfolg damit, FakeDNS in Docker zu testen/zu entwickeln, weil es einfacher ist, als es nativ auf modernen Ubuntu-Installationen auszuführen, die bereits eigene DNS-Dienste auf Port 53 betreiben.
Wenn du es ausprobieren möchtest, kannst du das ohne großen Aufwand tun, indem du die folgenden Schritte befolgst:
Angenommen, du befindest dich im FakeDns-Verzeichnis: 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. Und zum Testen kannst du nslookup -port=5353 testrule.test 127.0.0.1ausführen, was bei deiner ersten Anfrage1.1.1.1` zurückgeben sollte.
Oder wenn du docker-compose verwenden möchtest, führe einfach docker-compose up aus und nutze denselben Test wie oben.