
Server DNS MITM in Python basato su espressioni regolari con supporto per attacchi di DNS Rebinding
Aggiornamento 14/04/2020 - rimosso il supporto a Python 2 e codice migrato a Python3
Ora con round-robin e opzioni migliorate!
Bug: @crypt0s - Twitter
[email protected] - Email
Un server DNS basato su espressioni regolari Python!
USAGE:
./fakedns.py [-h] -c Config path [-i interface IP address] [--rebind]
Il file dns.conf deve essere configurato nel seguente modo:
[RECORD TYPE CODE] [python regular expression] [answer] [rebind answer]
La risposta può essere un indirizzo IP o la stringa self,
lo zucchero sintattico self verrà tradotto con l'indirizzo IP locale della tua macchina corrente, ad esempio 192.168.1.100.
Se non viene trovata una corrispondenza, il server DNS tenterà di risolvere la richiesta usando il server DNS configurato sulla tua macchina locale e inoltrerà la richiesta a quel server per conto dell'utente richiedente.
- A
- TXT
- AAAA
- PTR
- SOA
- MX
- CNAME
- Supporta DNS Rebinding
- Supporta round-robin
Le regole round-robin sono implementate. Ogni volta che un client richiede una regola corrispondente, FakeDNS restituirà il successivo IP nell'elenco di IP forniti nella regola.
Un elenco di IP è separato da virgole.
Per esempio:
A robin.net 1.2.3.4,1.1.1.1,2.2.2.2
È una regola round-robin per robin.net che restituirà risposte che puntano a 1.2.3.4, 1.1.1.1 e 2.2.2.2, iterando in quest'ordine ogni volta che un client effettua una richiesta per la voce robin.net.
NOTA : Questi IP non vengono inclusi come elenco nella risposta al client - ricevono comunque un solo IP nella risposta (potrebbe cambiare in futuro)
FakeDNS supporta le regole di rebinding, il che significa sostanzialmente che il server accetta un certo numero di richieste da un client per un dominio fino a una soglia (predefinita a 1 richiesta) e poi cambia l'indirizzo IP con uno diverso.
Per esempio:
A rebind.net 1.1.1.1 10%4.5.6.7
Significa che abbiamo un record A per rebind.net che risolve in 1.1.1.1 per i primi 10 tentativi. All'undicesima richiesta da parte di un client che ha già effettuato 10 richieste, FakeDNS inizia a restituire il secondo IP, 4.5.6.7
Qui puoi usare un elenco di indirizzi e FakeDNS li gestirà in round-robin, proprio come nella regola "normale".
(solo localhost senza passaggi aggiuntivi)
Ho avuto molto successo testando/sviluppando FakeDNS in Docker perché è più semplice che eseguirlo nativamente su installazioni Ubuntu moderne che hanno già i propri servizi DNS in esecuzione sulla porta 53.
Se vuoi provarlo, puoi farlo senza troppa fatica seguendo questi passaggi:
Supponendo che tu sia dentro la directory 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. Per testare, puoi eseguire nslookup -port=5353 testrule.test 127.0.0.1che dovrebbe restituire1.1.1.1` alla prima richiesta
Oppure, se preferisci usare docker-compose, basta eseguire docker-compose up e usare lo stesso test di cui sopra.