
Сканер виртуальных хостов, выполняющий обратные запросы, может использоваться с инструментами пивотинга, обнаруживает сценарии catch-all, обходит подстановочные знаки, псевдонимы и динамические страницы по умолчанию.
Сканер виртуальных хостов, который можно использовать с инструментами для пивота, обнаруживает сценарии catch-all, псевдонимы и динамические страницы по умолчанию. Впервые представлен на SecTalks BNE в сентябре 2017 года (слайды).
Это улучшенная версия оригинального VHostScan от Codingo с дополнительными улучшениями, модернизированной кодовой базой и расширенными списками слов для лучшего обнаружения виртуальных хостов.
Затем запустите приложение `docker run --rm -it vhostscan -t´
VHostScan требует Python 3.8 или выше. Установите используя:
$ pip install VHostScan
Или установите из исходников:
$ git clone https://github.com/codingo/VHostScan.git
$ cd VHostScan
$ pip install .
Для разработки:
$ pip install -e .
Зависимости будут установлены, и VHostScan будет добавлен в ваш PATH.
Обратите внимание, что многие из этих примеров ссылаются на 10.10.10.29. Этот IP-адрес относится к BANK.HTB, архивной целевой машине с HackTheBox (https://www.hackthebox.eu/).
Самый простой пример запускает список слов по умолчанию для example.com, используя порт 80 по умолчанию:
$ VHostScan -t example.com
Если ваше подключение требует SSL, вы можете использовать:
$ VHostScan -t example.com --ssl

Предположим, у вас есть проброс порта через SSH, который прослушивает порт 4444 и перенаправляет трафик на порт 80 на тестовой машине example.com. Вы можете использовать следующую команду, чтобы VHostScan подключался через ваш SSH-туннель через localhost:4444, но форматировал заголовки запроса так, как будто он подключается напрямую к порту 80:
$ VHostScan -t localhost -b example.com -p 4444 -r 80
VHostScan поддерживает конвейерную передачу из других приложений и обрабатывает информацию, переданную в VHostScan, как данные списка слов. Например:
$ cat bank.htb | VHostScan -t 10.10.10.29

Вы также можете указать список слов для использования вместе со stdin. В этом случае данные из списка слов будут добавлены к данным из stdin. Например:
$ echo -e 'a.example.com\b.example.com' | VHostScan -t localhost -w ./wordlists/wordlist.txt
Вот пример с включённой нечеткой логикой. Видно, что последнее сравнение гораздо более схоже, чем первые два (сравнивается содержимое, а не фактические хэши):
VHostScan теперь включает несколько специализированных списков слов для различных сценариев. Оригинальные списки слов были созданы Codingo на основе реального опыта тестирования на проникновение, а эта улучшенная версия включает дополнительные специализированные списки для современной инфраструктуры.
Подробную информацию о каждом списке слов см. в WORDLISTS.md.
Используйте список, ориентированный на пентест, для оценки безопасности:
$ VHostScan -t target.com -w ./wordlists/pentest-focused.txt
Объедините несколько списков слов для всестороннего сканирования:
$ VHostScan -t target.com -w "./wordlists/common-vhosts.txt,./wordlists/cloud-modern.txt"
Используйте облачный список слов для современной инфраструктуры:
$ VHostScan -t example.com -w ./wordlists/cloud-modern.txt --ssl
Этот проект включает небольшой набор тестов. Запуск тестов очень прост:
pip install -r test-requirements.txt
python3 setup.py test
Если вы планируете добавить новую функцию в проект, подумайте о том, чтобы также внести несколько тестов. Хорошо протестированная кодовая база — это здоровая кодовая база. :)
Эта улучшенная версия включает:
VHostScan был изначально создан Codingo и впервые представлен на SecTalks BNE в сентябре 2017 года. Эта улучшенная версия строится на этой отличной основе с дополнительными улучшениями для современного тестирования на проникновение и охоты за багами.
| Аргумент | Описание |
|---|
| -h, --help | Показать справку и выйти |
| -t TARGET_HOSTS | Установить целевой хост. |
| -b BASE_HOST | Установить хост для подстановки в списке слов (по умолчанию TARGET). |
| -w WORDLISTS | Установить список(и) слов для использования. Можно указать несколько списков через запятую (например, -w "./wordlists/simple.txt, ./wordlists/hackthebox.txt" (по умолчанию ./wordlists/virtual-host-scanning.txt). Доступные списки: simple.txt, hackthebox.txt, common-vhosts.txt, pentest-focused.txt, cloud-modern.txt, virtual-host-scanning.txt. |
| -p PORT | Установить порт для использования (по умолчанию 80). |
| -r REAL_PORT | Реальный порт веб-сервера для использования в заголовках, если не 80 (см. RFC2616 14.23); полезно при пивоте через ssh/nc и т.д. (по умолчанию PORT). |
| --ignore-http-codes IGNORE_HTTP_CODES | Список HTTP-кодов, разделённых запятыми, для игнорирования при сканировании виртуальных хостов (по умолчанию 404). |
| --ignore-content-length IGNORE_CONTENT_LENGTH | Игнорировать содержимое указанной длины. |
| --prefix PREFIX | Добавить префикс к каждому элементу списка слов для добавления dev-<word>, test-<word> и т.д. |
| --suffix SUFFIX | Добавить суффикс к каждому элементу списка слов для добавления <word>dev, <word>dev |
| --first-hit | Вернуть первый успешный результат. Использовать только в сценариях, где вы уверены, что catch-all не настроен (например, в CTF). |
| --unique-depth UNIQUE_DEPTH | Показать вероятные совпадения содержимого страницы, встречающиеся x раз (по умолчанию 1). |
| --ssl | Если установлено, то соединения будут выполняться по HTTPS вместо HTTP. |
| --fuzzy-logic | Если установлено, то все ответы с уникальным содержимым сравниваются, и для каждой пары выводится коэффициент сходства. Это помогает изолировать vhosts в ситуациях, когда страница по умолчанию не статична (например, содержит время). |
| --no-lookups | Отключить обратные запросы (определяет новые цели и добавляет их в список слов, включено по умолчанию). |
| --rate-limit | Время задержки в секундах между сканированиями (по умолчанию 0). |
| --random-agent | Если установлено, каждое сканирование будет использовать случайный user-agent из предопределённого списка. |
| --user-agent | Указать user-agent для сканирования. |
| --waf | Если установлено, будут отправлены простые заголовки для обхода WAF. |
| -oN OUTPUT_NORMAL | Обычный вывод в файл при указании параметра -oN с именем файла. |
| -oG OUTPUT_GREPABLE | Вывод, пригодный для grep, в файл при указании параметра -oG с именем файла. |
| -oJ OUTPUT_JSON | Вывод в формате JSON в файл при указании параметра -oJ с именем файла. |
| -v VERBOSE | Увеличить объём вывода для отображения прогресса |