Blog

DNS Delivery

28.12.2022 | 2 minutes read
Share this:

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.

Setup

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/ 

Testen

Zu Testzwecken habe ich zwei Dateien in den Ordner payload gelegt.

Start DNSLivery

Über eine entsprechende TXT-Abfrage kann der Befehl, der zum Downloaden der Dateien benötigt wird, abgerufen werden.

Text Abfragen

Wenn der oben gezeigt Befehl in PowerShell eingegeben wird, werden die entsprechenden Daten ausgegeben.

Download der Daten

Debugen

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.