April 13, 2025

Использование веб-краулера Katana

https://t.me/pentesters_confessions

В этой статье рассмотрим, как использовать веб-краулер Katana. Мы подробно разберем практически весь его функционал.

Katana — это мощный фреймворк для веб-краулинга и спайдеринга, разработанный командой ProjectDiscovery. Он незаменим на всех этапах тестирования на проникновение, обеспечивая гибкость и эффективность

Ввод ссылки

Katana позволяет указать цели для сканирования несколькими способами:

1. Через -u:

Мы можем дать как одну ссылку, например:

katana -u github.com

Для нескольких ссылок (разделяются запятыми):

katana -u github.com,google.com

Тогда инструмент будет кравлить их параллельно, а не в порядке очереди

2. Через -list

katana -list list.txt

В list.txt кидаем все ссылки. Например:

google.com

github.com

evil.com

....

3. Через STDIN (удобно для автоматизации и one-liner'ов):

echo https://tesla.com | katana

cat domains | httpx | katana

Crawling Modes

Katana поддерживает два режима сканирования:

  1. Стандартный

Это тот режим, какой мы разобрали выше (он используеться по умолчанию). Использует стандартную http библиотеку go. Из плюсов данного режима можно выделить только скорость.

Недостаток заключается в том, что HTTP-библиотека Go обрабатывает ответ в том виде, в каком он получен, без выполнения JavaScript и манипуляций с DOM . Это может привести к пропущенным конечным точкам, которые появляются только после рендеринга или в результате асинхронных вызовов.

Проще говоря, если вы хотите испоьзовать потэнциал этого инструмента на максимум, то стандартный режим не подойдет. Стандартный режим подходит для быстрого сканирования, но не раскрывает полный потенциал инструмента. Если требуется глубокий анализ, лучше выбрать другой режим.

2. Headless браузер

В этом режиме Katana как бы запускает браузер «внутри себя», без отображения окна. Это нужно для того, чтобы:

  1. Притвориться настоящим браузером — так сайты воспринимают сканер как обычного пользователя и дают больше данных.
  2. Получить больше информации — Katana может «увидеть» то, что появляется на сайте только после загрузки JavaScript или взаимодействия со страницей.

Если ты сканируешь современный сайт, где контент загружается динамически (например, после клика по кнопке или прокрутки), включи этот режим с помощью команды -headless.
Он работает медленнее, чем обычный режим, но зато находит больше.

При запуске от имени супер-пользователя, запускайте через --no-sandbox

Область сканирования

Одна из ключевых задач при сборе ссылок с помощью Katana — фильтрация ненужных данных. Инструмент может собирать ссылки, связанные, например, с Google Analytics или другими сторонними сервисами. Это замедляет процесс сканирования и засоряет результаты лишней информацией. Katana предлагает четыре метода для фильтрации по scope'у:

1. Field-scope"Что разрешено"

Ты заранее указываешь: какие сайты, домены или ссылки можно обрабатывать. Всё остальное игнорируется.

Пример: сканировать только example.com, игнорируя всё остальное.

2. Crawl-scope"Где ходить"

Определяешь, по каким ссылкам можно переходить во время сканирования.

Пример: переходить только по внутренним ссылкам, не выходя на другие сайты.

3. Crawl-out-scope"Смотреть, но не трогать"

Katana замечает внешние ссылки, но не переходит по ним. Это помогает видеть, куда ведёт сайт, но не тратить время на лишнее.


4. No-scope"Без ограничений"

Katana сканирует всё подряд — любые ссылки, сайты и ресурсы.

Используй осторожно: можно случайно обойти полинтернета :)

Field-scope

Для этого режима есть 3 опции:

1. rdn (по умолчанию)

Сканирование по основному домену и всем его поддоменам.

Пример: example.com, www.example.com, api.example.comвсе войдут в сканирование.


2. fqdn

Сканирование только по конкретному (под)домену, который ты указал.

Пример: если ты указал www.example.com, то api.example.comуже не будет сканироваться.


3. dn

Сканирование по ключевому слову домена.

Пример: если указано example, то попадут в сканирование example.com, example.net, example.org и т.п.

Crawl-scope

Флаг -cs (crawl-scope) работает как фильтр по регулярному выражению (regex)

Это значит, что Katana будет возвращать только те URL, которые соответствуют заданному шаблону.

Например, если ты сканируешь сайт tesla.com и используешь:

-cs "shop"

То в результатах ты увидишь только те ссылки, в которых есть слово shop, например:

https://shop.tesla.com/

https://www.tesla.com/shop/accessories

А все остальные ссылки, вроде https://www.tesla.com/models или https://www.tesla.com/about, — будут отброшены, потому что они не совпадают с фильтром.

Crawl-out-scope

Crawl-out-scope (-cos) — фильтр на исключение URL

Флаг -cos работает как фильтр на исключение: он удаляет из результатов все ссылки, которые соответствуют заданному шаблону (регулярному выражению).

Например, если ты используешь:

cos "shop"

Katana исключит из вывода все ссылки, в которых есть слово shop, например:

  • https://shop.tesla.com/
  • https://www.tesla.com/shop/accessories

Они просто не попадут в результаты. Прще говоря, этот филтр работает как crawl-scope но наоборот

No-scope

No-scope (-ns) — без ограничений

Если ты укажешь флаг -ns, Katana полностью отключит ограничения по области сканирования.

Это значит, что:

  • Сканирование начнётся с указанного сайта (например, https://tesla.com)
  • Но дальше Katana будет переходить по всем ссылкам, которые найдёт — даже если они ведут на другие сайты и домены.

📌 Пример:

katana -u https://tesla.com -ns

В этом случае Katana может перейти на:

  • https://twitter.com/Tesla
  • https://shop.tesla.cn/
  • https://some-other-website.com

То есть ты как бы "открываешь ворота" для обхода всего интернета, начиная с одного сайта.

⚠️ Важно: такой режим может привести к слишком большому объёму данных, поэтому использовать его нужно с осторожностью. Не используем его, если нету необходимости

Глубина сканирования

С помощью флага -depth ты можешь указать, на какую глубину Katana должна следовать по ссылкам при сканировании.

  • Чем меньше значение, тем быстрее сканирование, но меньше найденных ссылок.
  • Чем больше значение, тем глубже Katana будет заходить, найдёт больше endpoint’ов — но и займёт больше времени.

По дефолту стоит значение 3. Максимальное значение - 5.

Автоматическое заполнение форм

-automatic-form-fill (-aff) — автоматическое заполнение форм

Эта опция включает автоматическое заполнение веб-форм во время сканирования.

  • Katana пытается автоматически заполнять формы на сайте — например, поля логина, поиска, подписки и т.д.
  • Она умеет распознавать известные поля (например, email, name, password) и может заполнять даже неизвестные поля по умолчанию.
  • Значения для заполнения можно настроить вручную в файле конфигурации:
$HOME/.config/katana/form-config.yaml

Я б советовал изменить в значении email домен на какой нибудь gmail.com. Так как иногда сайты не пропускают дальше, если email - незнакомый домен. Таким образом сайты защищаються от временных пост, спама и так далее...

Дополнительный парсинг

-known-files — сканирование robots.txt и sitemap.xml

Эта опция включает сканирование известных файлов, таких как:

  • robots.txt — файл, в котором сайты указывают, что можно и нельзя сканировать
  • sitemap.xml — карта сайта, где перечислены все важные страницы

📌 По умолчанию эта опция отключена, так что её нужно включать вручную.


✅ Пример:

katana -u https://tesla.com -kf robotstxt,sitemapxml

Работаем с js файлами

-jc / -js-crawl — включить обход и парсинг JS-файлов

Эта опция включает поиск ссылок внутри JavaScript-файлов.

Полезно для нахождения "спрятанных" endpoint’ов, которые подгружаются через JS, например: api.example.com/data внутри main.js.

-jsl / -jsluice — углублённый парсинг JS-файлов (ресурсоёмкий)

Эта опция включает дополнительный парсинг с помощью инструмента jsluice, что позволяет находить ещё больше скрытых ссылок и паттернов в JS.

⚠️ Затратно по памяти — лучше использовать на мощной машине или для отдельных целей.

Кастомные regex скрипты

Katana поддерживает мощную фильтрацию и обработку URL через регулярные выражения, что позволяет гибко управлять областью сканирования и результатами.

Ниже приведен пример, как Katana извлекает email-адреса с помощью пользовательского регулярного выражения (regex). Нашёл я его на гитхабе:

Мнение ИИ об оптимальном использовании Katana

В завершение я обратился к ИИ, чтобы выяснить, как, по его мнению, лучше всего использовать Katana для достижения максимальной эффективности:

Для повышения эффективности сканирования добавлю от себя следуйщее:

  • Добавлять Cookie: Используйте флаг -H "Cookie: <value>", чтобы эмулировать авторизованного пользователя и получить доступ к скрытым данным.
  • Менять User-Agent: Применяйте разные User-Agent’ы с помощью флага -H "User-Agent: <value>" или опции -rua для случайного выбора, чтобы обойти ограничения сайтов.
  • Настраивать заголовки: Добавляйте кастомные заголовки через -H для специфичных сценариев, например, для тестирования API или обхода защиты.

Эти настройки помогут адаптировать Katana под конкретные задачи и увеличить объем собираемой информации.

Заключение

Мы рассмотрели ключевые функции Katana — мощного инструмента для веб-краулинга. Его возможности далеко не ограничиваются описанным: Katana предлагает множество дополнительных опций, таких как настройка заголовков, использование cookie, проксирование запросов и другие технические параметры. Подробности этих функций вы можете изучить в официальной документации Katana. Не недооценивайте этот инструмент — он способен значительно ускорить и углубить процесс анализа веб-ресурсов.

НАШИ ПРОЕКТЫ

Канал - ИСПОВЕДЬ ПЕНТЕСТЕРА

Наш Чат - t.me/+YgxPPcFtalUyZDYy