
Легко превращайте однопоточные приложения командной строки в быстрое многопоточное приложение с поддержкой CIDR и glob.
Легко превращайте однопоточные консольные приложения в быстрые многопоточные с поддержкой CIDR и glob.
Установка с помощью:
$ python3 setup.py install
Затем будут установлены зависимости, и Interlace будет добавлен в ваш PATH как interlace.
| Пример | Тип нотации |
|---|---|
| 80 | Один порт |
| 1-80 | Дефисная нотация, выполнить команду для каждого порта от 1 до 80 |
| 80,443 | Выполнить команду для портов 80 и 443 |
Оба аргумента -t и -tL обрабатываются одинаково. Вы можете передавать цели так же, как при использовании nmap. Это можно сделать с помощью нотации CIDR, дефисной нотации или списка целей, разделённого запятыми. В одном файле списка целей также можно использовать разные типы нотации для каждой строки.
Кроме того, вы можете передавать цели через STDIN, и ни -t, ни -tL не потребуются.
Следующие переменные будут заменены в командах во время выполнения:
Interlace также предоставляет две дополнительные функции для управления потоком выполнения в файле команд: _blocker_ и _block:<name>_. Блокировщики предотвращают выполнение команд, перечисленных после них, пока не завершатся все команды перед ними, а блоки можно использовать для принудительного последовательного выполнения команд, перечисленных внутри блока, для одной цели.
Они выполняются на уровне каждой цели. Если есть доступные потоки, но блокировщик мешает текущей цели, Interlace начнёт выполнение команд со следующей цели в списке, чтобы максимизировать эффективность.
Использование этих функций позволит вам более непосредственно управлять потоком выполнения для отдельных целей, чтобы предотвратить выполнение команд не в том порядке.
Блокировщики предотвращают выполнение всего, что находится ниже них, пока не завершатся все команды выше (для текущего активного хоста). Например, в следующем:
mkdir -p _output_/_target_/scans/
_blocker_
nmap _target_ -oA _output_/_target_/scans/_target_-nmap
Использование блокировщика здесь предотвращает запуск nmap на цели до создания базовой структуры папок, что предотвращает исключение от nmap.
Блоки заставляют всё внутри них выполняться последовательно. Вы также можете использовать несколько блоков в одном файле команд. Например, в следующем:
_block:nmap_
mkdir -p _target_/output/scans/
nmap _target_ -oN _target_/output/scans/_target_-nmap
_block:nmap_
nikto --host _target_
В этом примере блок будет работать так же, как и раньше, но при достаточном количестве потоков nikto начнёт выполняться немедленно, передавая результаты обратно в терминал (пока nmap и создание файлов выполняются в фоне).
Предположим, у вас есть файл targets.txt со следующим содержимым:
bugcrowd.com
hackerone.com
Вы можете использовать Interlace для обработки любого количества целей в этом файле, используя:
➜ /tmp interlace -tL ./targets.txt -threads 5 -c "nikto --host _target_ > ./_target_-nikto.txt" -v
=========================================================================
Interlace v1.0 by Michael Skelton (@codingo_) & Sajeeb Lohani (@sml555_)
=========================================================================
[14:33:23] [THREAD] [nikto --host hackerone.com > ./hackerone.com-nikto.txt] Added to Queue
[14:33:23] [THREAD] [nikto --host bugcrowd.com > ./bugcrowd.com-nikto.txt] Added to Queue
Это запустит Nikto на каждом хосте и сохранит результаты в файл для каждой цели. Обратите внимание, что в приведённом выше примере, поскольку мы используем оператор >, результаты не будут выводиться обратно в терминал; однако это желаемая функциональность, так как иначе мы не смогли бы определить, для какой цели были возвращены результаты Nikto.
Для приложений, где требуется обратная связь, просто передавайте команды как обычно (или используйте tee).
Используя приведённый выше пример, предположим, что вы хотите запустить независимые сканирования для портов 80 и 443 для одних и тех же целей. Тогда вы можете использовать следующее:
➜ /tmp interlace -tL ./targets.txt -threads 5 -c "nikto --host _target_:_port_ > ./_target_-_port_-nikto.txt" -p 80,443 -v
=========================================================================
Interlace v1.0 by Michael Skelton (@codingo_) & Sajeeb Lohani (@sml555_)
=========================================================================
[14:33:23] [THREAD] [nikto --host hackerone.com:80 > ./hackerone.com-nikto.txt] Added to Queue
[14:33:23] [THREAD] [nikto --host bugcrowd.com:80 > ./hackerone.com-nikto.txt] Added to Queue
[14:33:23] [THREAD] [nikto --host bugcrowd.com:443 > ./bugcrowd.com-nikto.txt] Added to Queue
[14:33:23] [THREAD] [nikto --host hackerone.com:443 > ./hackerone.com-nikto.txt] Added to Queue
Часто при пентестах есть список команд, которые вы хотите запускать почти в каждой работе. Предположим, что этот список включает testssl.sh, nikto и sslscan. Вы можете сохранить список команд в файл commands.txt со следующим содержимым:
nikto --host _target_:_port_ > _output_/_target_-nikto.txt
sslscan _target_:_port_ > _output_/_target_-sslscan.txt
testssl.sh _target_:_port_ > _output_/_target_-testssl.txt
Если затем вам дана цель example.com, вы можете запустить каждую из этих команд для этой цели с помощью следующего:
interlace -t example.com -o ~/Engagements/example/ -cL ./commands.txt -p 80,443
Это запустит nikto, sslscan и testssl.sh для портов 80 и 443 на example.com и сохранит файлы в вашу папку проектов.
Interlace автоматически разворачивает нотацию CIDR при запуске потоков (если не передан флаг --no-cidr). Это позволяет передавать нотацию CIDR в различные приложения:
Чтобы запустить сканирование виртуальных хостов на всех целях в диапазоне 192.168.12.0/24 с помощью прямой команды, вы можете использовать:
interlace -t 192.168.12.0/24 -c "vhostscan _target_ -oN _output_/_target_-vhosts.txt" -o ~/scans/ -threads 50
Это несмотря на то, что VHostScan не имеет встроенной поддержки нотации CIDR. Поскольку Interlace разворачивает нотацию перед построением очереди потоков, VHostScan по сути получает только список прямых IP-адресов для сканирования.
Interlace автоматически разворачивает диапазоны glob при запуске потоков. Это позволяет передавать диапазоны glob в различные приложения:
Чтобы запустить сканирование виртуальных хостов на всех целях в диапазоне 192.168.12.* с помощью прямой команды, вы можете использовать:
interlace -t 192.168.12.* -c "vhostscan _target_ -oN _output_/_target_-vhosts.txt" -o ~/scans/ -threads 50
Опять же, VHostScan не имеет встроенной поддержки диапазонов glob.
Interlace автоматически разворачивает дефисные диапазоны при запуске потоков. Это позволяет передавать диапазоны glob в различные приложения:
Чтобы запустить сканирование виртуальных хостов на всех целях в диапазоне 192.168.12.1-15 с помощью прямой команды, вы можете использовать:
interlace -t 192.168.12.1-15 -c "vhostscan _target_ -oN _output_/_target_-vhosts.txt" -o ~/scans/ -threads 50
Опять же, VHostScan не имеет встроенной поддержки дефисных диапазонов.
Запустите сканирование виртуальных хостов для каждого хоста из файла (target-lst.txt), одновременно ограничивая количество сканирований до максимум 50 потоков.
Это можно сделать с помощью прямой команды:
interlace -tL ./target-list.txt -c "vhostscan -t _target_ -oN _output_/_target_-vhosts.txt" -o ~/scans/ -threads 50
Или, альтернативно, для выполнения той же команды, но с использованием файла команд:
interlace -cL ./vhosts-commands.txt -tL ./target-list.txt -threads 50 -o ~/scans
Это предполагает, что содержимое файла команд следующее:
vhostscan -t $target -oN _output_/_target_-vhosts.txt
Это создаст файл для каждой цели в указанной выходной папке. Вы также можете запустить несколько команд, просто добавив их в файл команд.
Interlace автоматически исключает любые хосты, указанные через аргументы -e или -eL. Эти аргументы также совместимы с нотациями диапазонов, упомянутыми выше (CIDR, glob и дефисная)
Чтобы запустить сканирование виртуальных хостов для всех целей в диапазоне CIDR 192.168.12.0/24, но не для целей в диапазоне 192.168.12.0/26, с помощью прямой команды, вы можете использовать:
interlace -t 192.168.12.0/24 -e 192.168.12.0/26 -c "vhostscan _target_ -oN _output_/_target_-vhosts.txt" -o ~/scans/ -threads 50
Используя приведённый выше пример, предположим, что вы хотите выполнять независимые сканирования через разные прокси для одних и тех же целей. Тогда вы можете использовать следующее:
➜ /tmp interlace -tL ./targets.txt -pL ./proxies.txt -threads 5 -c "nikto --host _target_:_port_ -useproxy _proxy_ > ./_target_-_port_-nikto.txt" -p 80,443 -v
Первоначально написано Майклом Скелтоном (codingo) и Саджибом Лохани (sml555) с помощью Чарелл Коллетт (@Charcol0x89) за рефакторинг потоков и общий подход, а также Люка Стивенса (hakluke) за тестирование и подход.
Вклад в этот проект очень приветствуется. Если вы новичок в open source и хотели бы получить помощь, не стесняйтесь обращаться к нам в Twitter (@codingo_) / (@sml555_), и мы поможем, чем сможем.
| Аргумент | Описание |
|---|
| (stdin) | Подача списков целей из другого приложения в формате, разделённом запятыми, в нотации CIDR или как отдельный хост |
| -t | Укажите цель или доменное имя в формате, разделённом запятыми, в нотации CIDR или как отдельный хост |
| -tL | Укажите список целей или доменных имён |
| -e | Укажите список целей для исключения в формате, разделённом запятыми, в нотации CIDR или как отдельный хост |
| -eL | Укажите список целей для исключения |
| -threads | Укажите максимальное количество потоков, выполняемых одновременно (ПО УМОЛЧАНИЮ:5) |
| -timeout | Укажите таймаут в секундах для любого отдельного потока (ПО УМОЛЧАНИЮ:600) |
| -c | Укажите одну команду для выполнения над каждой целью или доменом |
| -cL | Укажите список команд для выполнения над каждой целью или доменом |
| -o | Укажите переменную выходной папки, которую можно использовать в командах как _output_ |
| -p | Укажите список переменной порта, которую можно использовать в командах как _port_. Это может быть один порт, список, разделённый запятыми, или диапазон с использованием дефисной нотации |
| -pL | Укажите список прокси |
| --proto | Укажите протоколы, которые можно использовать в командах как _proto_ |
| -rp | Укажите переменную реального порта, которую можно использовать в командах как _realport_ |
| -random | Укажите каталог файлов, которые можно случайным образом использовать в командах как _random_ |
| --no-bar / --sober | Если установлено, то индикатор выполнения будет убран |
| --no-cidr | Если установлено, то нотация CIDR в файле целей не будет автоматически расширяться в отдельные хосты |
| --no-color | Если установлено, то все цвета переднего или заднего плана будут удалены |
| --silent | Если установлено, то будет отображаться только важная информация, а баннеры и другая информация будут скрыты |
| -v | Если установлено, то подробный вывод будет отображаться в терминале |
| Переменная | Замена |
|---|
| _target_ | Заменяется на расширенный список целей, против которых выполняется текущий поток |
| _cleantarget_ | Заменяется на цель, очищенную от http:// или https:// |
| _safe-target_ | Заменяется на цель с автоматическим экранированием для команд, предотвращающим выполнение подкоманд |
| _host_ | Работает так же, как _target_, и может использоваться взаимозаменяемо |
| _output_ | Заменяется на переменную выходной папки из Interlace |
| _port_ | Заменяется на расширенную переменную порта из Interlace |
| _realport_ | Заменяется на переменную реального порта из Interlace |
| _proxy_ | Заменяется на список прокси из Interlace |
| _random_ | Заменяется на случайно выбранный файл из Interlace |