Note: Für alle hier genannten Tools gilt wie immer, Verwendung unter eigener Gefahr.
In diesem kleinen Tutorial zeige ich, wie Dateien mittels DNS auf ein Zielsystem übertragen werden können. Der Hintergrund ist, dass es hin und wieder vorkommt, dass ein System keinen direkten Internetzugriff hat bzw. ein Proxy genutzt werden muss. In dem Fall funktioniert meist allerdings noch DNS.
Für die Demo verwende ich DNSlivery von no0be. Das Tool nutzt scapy
, um auf DNS-Anfragen zu hören und die entsprechenden Antworten zu senden. Leider funktioniert das nur, wenn auf dem System bereits ein DNS Server läuft, bzw. der entsprechende Port offen ist. Sonst lehnt der Kernel die Anfragen an UDP/53
ab. Der Issue Recommand to Listen on UDP port 53 adressiert dieses Problem bereits. Die Lösung besteht darin folgende Zeilen Python über die Finale while-true
Schleife einzufügen.
udpserver = socket. socket(socket.AF_INET, socket.SOCK_DGRAM)
udpserver.bind(('0.0.0.0',53)) #listen to 53 port
Als nächstes muss DNS noch korrekt konfiguriert werden, damit der Resolver auch weiß wo er hin muss. Ich verwende für den Test die folgenden beiden Einträge.
bounty.hackmich.net => Name des Servers, auf dem DNSLivery läuft
dnsd.hackmich.net => Name, unter dem die Dateien abgerufen werden
Zunächst lege ich einen A-Record mit dem Namen bounty.hackmich.net
für die IP-Adresse meines Servers an.
bounty.hackmich.net 60 IN A 144.91.106.247
Im Anschluss lege ich einen NS-Record für dnsd.hackmich.net
an, der auf bounty.hackmich.net
zeigt.
dnsd.hackmich.net 60 IN NS bounty.hackmich.net
Wenn alles korrekt eingerichtet wurde, kann DNSLivery
gestartet werden.
sudo python3 ./dnslivery.py <Interface> <DNS Namen> <Servername> -p <Payload-Odrner>
sudo python3 ./dnslivery.py eth0 dnsd.hackmich.net bounty.hackmich.net -p /opt/DNSDelivery/DNSlivery/payload/
Zu Testzwecken habe ich zwei Dateien in den Ordner payload
gelegt.
Über eine entsprechende TXT-Abfrage kann der Befehl, der zum Downloaden der Dateien benötigt wird, abgerufen werden.
Wenn der oben gezeigt Befehl in PowerShell eingegeben wird, werden die entsprechenden Daten ausgegeben.
Ein Problem auf das ich gestoßen bin, ist, dass mein NS Record nur sehr sporadisch an die anderen Nameserver verteilt wurde. Eine gute Webseite, um den Status vom NS-Record zu prüfen, ist https://www.whatsmydns.net/.
Weiterhin könnt ihr auch Tools wie nslookup
oder dig
verwenden um die Einträge zu prüfen.
nslookup -type=ns dnsd.hackmich.net
Wenn aber alles korrekt funktioniert, könnt ihr munter Dateien über DNS herunterladen und auf das Zielsystem ablegen.
Wie immer gilt falls ihr Fragen, Anmerkungen oder Verbesserungsvorschläge zu dem Artikel habt, schreibt eine Mail an info@hackmich.net.