Современный высокопроизводительный веб-краулер от ProjectDiscovery. Поддерживает JavaScript-рендеринг, автоматическое заполнение форм и глубокий обход SPA-приложений. Возможности: - Режим headless (с Chromium) для JS-heavy сайтов - Обход форм, кнопок, динамических путей - Извлечение всех endpoint'ов, параметров, форм - Фильтрация по расширению, области, scope - Параллельный краулинг нескольких целей - Вывод в JSON, интеграция с другими PD-инструментами - Поддержка custom headers, cookies, proxy
# go install: go install github.com/projectdiscovery/katana/cmd/katana@latest # Для headless-режима установить Chrome: sudo apt install -y chromium-browser # Примеры: # Базовый краулинг: katana -u https://target.com # Глубина 5, JavaScript-рендеринг: katana -u https://target.com -d 5 -headless # Краулинг списка целей + JSON: katana -list urls.txt -o endpoints.json -jsonl # Scope — только текущий домен: katana -u https://target.com -cs target.com
Возможности • Установка • Использование • Область • Конфигурация • Фильтры • Присоединяйтесь к Discord

Для успешной установки katana требуется Go 1.26+. Если у вас возникли проблемы с установкой, мы рекомендуем попробовать с использованием последней доступной версии Go, так как минимально требуемая версия могла измениться. Выполните команду ниже или скачайте предварительно скомпилированный бинарный файл со страницы релизов.
CGO_ENABLED=1 go install github.com/projectdiscovery/katana/cmd/katana@latest
Больше вариантов установки / запуска katana-
Docker
Чтобы установить / обновить docker до последнего тега -
docker pull projectdiscovery/katana:latest
Чтобы запустить katana в стандартном режиме с использованием docker -
docker run projectdiscovery/katana:latest -u https://tesla.com
Чтобы запустить katana в headless (безголовом) режиме с использованием docker -
docker run projectdiscovery/katana:latest -u https://tesla.com -system-chrome -headless
Ubuntu
Рекомендуется установить следующие предварительные зависимости -
sudo apt update
sudo apt install zip curl wget git snapd
sudo snap refresh
sudo snap install golang --classic
sudo install -d -m 0755 /etc/apt/keyrings
curl -fsSL https://dl.google.com/linux/linux_signing_key.pub \
| sudo gpg --dearmor -o /etc/apt/keyrings/google-chrome.gpg
echo "deb [arch=amd64 signed-by=/etc/apt/keyrings/google-chrome.gpg] \
http://dl.google.com/linux/chrome/deb/ stable main" \
| sudo tee /etc/apt/sources.list.d/google-chrome.list > /dev/null
sudo apt update
sudo apt install google-chrome-stable
установка katana -
go install github.com/projectdiscovery/katana/cmd/katana@latest
katana -h
Это покажет справку по инструменту. Вот все поддерживаемые ключи.
Katana is a fast crawler focused on execution in automation
pipelines offering both headless and non-headless crawling.
Usage:
./katana [flags]
Flags:
INPUT:
-u, -list string[] target url / list to crawl
-resume string resume scan using resume.cfg
-e, -exclude string[] exclude host matching specified filter ('cdn', 'private-ips', cidr, ip, regex)
CONFIGURATION:
-r, -resolvers string[] list of custom resolver (file or comma separated)
-d, -depth int maximum depth to crawl (default 3)
-jc, -js-crawl enable endpoint parsing / crawling in javascript file
-jsl, -jsluice enable jsluice parsing in javascript file (memory intensive)
-ct, -crawl-duration value maximum duration to crawl the target for (s, m, h, d) (default s)
-kf, -known-files string enable crawling of known files (all,robotstxt,sitemapxml), a minimum depth of 3 is required to ensure all known files are properly crawled.
-mrs, -max-response-size int maximum response size to read (default 4194304)
-timeout int time to wait for request in seconds (default 10)
-aff, -automatic-form-fill enable automatic form filling (experimental)
-fx, -form-extraction extract form, input, textarea & select elements in jsonl output
-retry int number of times to retry the request (default 1)
-proxy string http/socks5 proxy to use
-td, -tech-detect enable technology detection
-H, -headers string[] custom header/cookie to include in all http request in header:value format (file)
-config string path to the katana configuration file
-fc, -form-config string path to custom form configuration file
-flc, -field-config string path to custom field configuration file
-s, -strategy string Visit strategy (depth-first, breadth-first) (default "depth-first")
-iqp, -ignore-query-params Ignore crawling same path with different query-param values
-fsu, -filter-similar filter crawling of similar looking URLs (e.g., /users/123 and /users/456)
-fst, -filter-similar-threshold int number of distinct values before a path position is treated as parameter (default 10)
-tlsi, -tls-impersonate enable experimental client hello (ja3) tls randomization
-dr, -disable-redirects disable following redirects (default false)
-pcs, -page-content-similar enable page content similarity filtering (simhash|tfidf|bm25)
-pcsm, -page-content-similar-mode string similarity mode: simhash, tfidf, or bm25 (default simhash)
-pcsd, -page-content-similar-distance int simhash max hamming distance (default 3)
-pcst, -page-content-similar-threshold float tfidf/bm25 min score 0-1 (default 0.85)
-pcsn, -page-content-similar-budget int pages to fully process per similarity cluster (default 1)
-sdd, -similarity-deduplication alias for -pcs
-kb, -knowledge-base enable knowledge base classification
-kb-secrets enable secrets extractor in the knowledge base
-kb-validate-secrets validate detected secrets against their provider (sends live API calls)
-kb-endpoints enable endpoints extractor (classifies REST/GraphQL/SOAP/XHR requests)
-mdp, -max-domain-pages int maximum number of pages to crawl per domain (default unlimited)
DEBUG:
-health-check, -hc run diagnostic check up
-elog, -error-log string file to write sent requests error log
-pprof-server enable pprof server
HEADLESS:
-hl, -headless enable headless hybrid crawling (experimental)
-sc, -system-chrome use local installed chrome browser instead of katana installed
-sb, -show-browser show the browser on the screen with headless mode
-ho, -headless-options string[] start headless chrome with additional options
-nos, -no-sandbox start headless chrome in --no-sandbox mode
-cdd, -chrome-data-dir string path to store chrome browser data
-scp, -system-chrome-path string use specified chrome browser for headless crawling
-noi, -no-incognito start headless chrome without incognito mode
-cwu, -chrome-ws-url string use chrome browser instance launched elsewhere with the debugger listening at this URL
-xhr, -xhr-extraction extract xhr request url,method in jsonl output
-pls, -page-load-strategy string page load strategy (heuristic, load, domcontentloaded, networkidle, none) (default "heuristic")
-dwt, -dom-wait-time int time in seconds to wait after page load when using domcontentloaded strategy (default 5)
-csp, -captcha-solver-provider string captcha solver provider (e.g. capsolver)
-csk, -captcha-solver-key string captcha solver provider api key
SCOPE:
-cs, -crawl-scope string[] in scope url regex to be followed by crawler
-cos, -crawl-out-scope string[] out of scope url regex to be excluded by crawler
-fs, -field-scope string pre-defined scope field (dn,rdn,fqdn) or custom regex (e.g., '(company-staging.io|company.com)') (default "rdn")
-ns, -no-scope disables host based default scope
-do, -display-out-scope display external endpoint from scoped crawling
FILTER:
-mr, -match-regex string[] regex or list of regex to match on output url (cli, file)
-fr, -filter-regex string[] regex or list of regex to filter on output url (cli, file)
-f, -field string field to display in output (url,path,fqdn,rdn,rurl,qurl,qpath,file,ufile,key,value,kv,dir,udir) (Deprecated: use -output-template instead)
-sf, -store-field string field to store in per-host output (url,path,fqdn,rdn,rurl,qurl,qpath,file,ufile,key,value,kv,dir,udir)
-em, -extension-match string[] match output for given extension (eg, -em php,html,js,none)
-ef, -extension-filter string[] filter output for given extension (eg, -ef png,css)
-ndef, -no-default-ext-filter bool remove default extensions from the filter list
-mdc, -match-condition string match response with dsl based condition
-fdc, -filter-condition string filter response with dsl based condition
-duf, -disable-unique-filter disable duplicate content filtering
-filter-page-type string[] filter response with page type (e.g. error,captcha,parked)
RATE-LIMIT:
-c, -concurrency int number of concurrent fetchers to use (default 10)
-p, -parallelism int number of concurrent inputs to process (default 10)
-rd, -delay int request delay between each request in seconds
-rl, -rate-limit int maximum requests to send per second (default 150)
-rlm, -rate-limit-minute int maximum number of requests to send per minute
-hrl, -host-rate-limit int maximum requests to send per second per host
-hrlm, -host-rate-limit-minute int maximum number of requests to send per minute per host
UPDATE:
-up, -update update katana to latest version
-duc, -disable-update-check disable automatic katana update check
OUTPUT:
-o, -output string file to write output to
-output-template string custom output template
-sr, -store-response store http requests/responses
-srd, -store-response-dir string store http requests/responses to custom directory
-ncb, -no-clobber do not overwrite output file
-sfd, -store-field-dir string store per-host field to custom directory
-or, -omit-raw omit raw requests/responses from jsonl output
-ob, -omit-body omit response body from jsonl output
-lof, -list-output-fields list available fields for jsonl output format
-eof, -exclude-output-fields exclude fields from jsonl output
-j, -jsonl write output in jsonl format
-nc, -no-color disable output content coloring (ANSI escape codes)
-silent display output only
-v, -verbose display verbose output
-debug display debug output
-version display project version
katana требует url или конечную точку для краулинга и принимает один или несколько входных данных.
Входной URL можно предоставить с помощью опции -u, несколько значений можно указать через запятую, аналогично поддерживается ввод файла с помощью опции -list, а также ввод через конвейер (stdin).
katana -u https://tesla.com
katana -u https://tesla.com,https://google.com
$ cat url_list.txt
https://tesla.com
https://google.com
katana -list url_list.txt
echo https://tesla.com | katana
cat domains | httpx | katana
Опциональная фильтрация второго уровня после точного удаления дубликатов по MD5-хешу. Общий процесс нормализации HTML удаляет служебные элементы (nav/header/footer/скрипты), затем один из трех режимов определяет, достаточно ли похожа страница, чтобы пропустить дальнейший парсинг/очередь (бюджет кластера). Дедупликация по форме URL (-fsu) остается независимой.
| Режим | Флаг | Лучше всего подходит для |
|---|---|---|
simhash (по умолчанию) |
-pcsm simhash |
Почти дубликаты / шаблонные клонирование (расстояние Хэмминга через -pcsd) |
tfidf |
-pcsm tfidf |
Косинусное сходство по тематике (-pcst) |
bm25 |
-pcsm bm25 |
Тематическое сходство с нормализацией по длине (-pcst) |
# Near-duplicate detection (default mode)
katana -u https://example.com -pcs
# TF-IDF topical filtering with higher budget
katana -u https://shop.example.com -pcs -pcsm tfidf -pcst 0.85 -pcsn 2
# BM25 mode
katana -u https://example.com -pcs -pcsm bm25
# Alias from older flag name
katana -u https://example.com -sdd -pcsm simhash
Пример статистики завершения:
[INF] Content similarity (simhash): 103 processed, 30 accepted, 73 filtered - 70.9% filter rate
[INF] Crawl completed in 14s. 21 endpoints found.
Пример запуска katana -
katana -u https://youtube.com
__ __
/ /_____ _/ /____ ____ ___ _
/ '_/ _ / __/ _ / _ \/ _ /
/_/\_\\_,_/\__/\_,_/_//_/\_,_/ v0.0.1
projectdiscovery.io
[WRN] Use with caution. You are responsible for your actions.
[WRN] Developers assume no liability and are not responsible for any misuse or damage.
https://www.youtube.com/
https://www.youtube.com/about/
https://www.youtube.com/about/press/
https://www.youtube.com/about/copyright/
https://www.youtube.com/t/contact_us/
https://www.youtube.com/creators/
https://www.youtube.com/ads/
https://www.youtube.com/t/terms
https://www.youtube.com/t/privacy
https://www.youtube.com/about/policies/
https://www.youtube.com/howyoutubeworks?utm_campaign=ytgen&utm_source=ythp&utm_medium=LeftNav&utm_content=txt&u=https%3A%2F%2Fwww.youtube.com%2Fhowyoutubeworks%3Futm_source%3Dythp%26utm_medium%3DLeftNav%26utm_campaign%3Dytgen
https://www.youtube.com/new
https://m.youtube.com/
https://www.youtube.com/s/desktop/4965577f/jsbin/desktop_polymer.vflset/desktop_polymer.js
https://www.youtube.com/s/desktop/4965577f/cssbin/www-main-desktop-home-page-skeleton.css
https://www.youtube.com/s/desktop/4965577f/cssbin/www-onepick.css
https://www.youtube.com/s/_/ytmainappweb/_/ss/k=ytmainappweb.kevlar_base.0Zo5FUcPkCg.L.B1.O/am=gAE/d=0/rs=AGKMywG5nh5Qp-BGPbOaI1evhF5BVGRZGA
https://www.youtube.com/opensearch?locale=en_GB
https://www.youtube.com/manifest.webmanifest
https://www.youtube.com/s/desktop/4965577f/cssbin/www-main-desktop-watch-page-skeleton.css
https://www.youtube.com/s/desktop/4965577f/jsbin/web-animations-next-lite.min.vflset/web-animations-next-lite.min.js
https://www.youtube.com/s/desktop/4965577f/jsbin/custom-elements-es5-adapter.vflset/custom-elements-es5-adapter.js
https://www.youtube.com/s/desktop/4965577f/jsbin/webcomponents-sd.vflset/webcomponents-sd.js
https://www.youtube.com/s/desktop/4965577f/jsbin/intersection-observer.min.vflset/intersection-observer.min.js
https://www.youtube.com/s/desktop/4965577f/jsbin/scheduler.vflset/scheduler.js
https://www.youtube.com/s/desktop/4965577f/jsbin/www-i18n-constants-en_GB.vflset/www-i18n-constants.js
https://www.youtube.com/s/desktop/4965577f/jsbin/www-tampering.vflset/www-tampering.js
https://www.youtube.com/s/desktop/4965577f/jsbin/spf.vflset/spf.js
https://www.youtube.com/s/desktop/4965577f/jsbin/network.vflset/network.js
https://www.youtube.com/howyoutubeworks/
https://www.youtube.com/trends/
https://www.youtube.com/jobs/
https://www.youtube.com/kids/
Стандартный режим краулинга использует стандартную Go http-библиотеку для обработки HTTP-запросов/ответов. Этот режим намного быстрее, так как не имеет накладных расходов веб-браузера. Тем не менее, он анализирует тело HTTP-ответов как есть, без какого-либо рендеринга javascript или DOM, потенциально пропуская эндпоинты, отрисованные после загрузки DOM, или асинхронные вызовы эндпоинтов, которые могут происходить в сложных веб-приложениях в зависимости, например, от событий, специфичных для браузера.
Headless режим использует встроенные headless-вызовы для обработки HTTP-запросов/ответов непосредственно в контексте браузера. Это дает два преимущества: - HTTP-отпечаток (TLS и пользовательский агент) полностью идентифицирует клиент как легитимный браузер - Лучшее покрытие, поскольку эндпоинты обнаруживаются анализом как стандартного необработанного ответа, как в предыдущем режиме, так и отрисованного браузером ответа с включенным javascript.
Headless краулинг не является обязательным и может быть включен с помощью опции -headless.
Вот другие headless CLI-опции -
katana -h headless
Flags:
HEADLESS:
-hl, -headless enable headless hybrid crawling (experimental)
-sc, -system-chrome use local installed chrome browser instead of katana installed
-sb, -show-browser show the browser on the screen with headless mode
-ho, -headless-options string[] start headless chrome with additional options
-nos, -no-sandbox start headless chrome in --no-sandbox mode
-cdd, -chrome-data-dir string path to store chrome browser data
-scp, -system-chrome-path string use specified chrome browser for headless crawling
-noi, -no-incognito start headless chrome without incognito mode
-cwu, -chrome-ws-url string use chrome browser instance launched elsewhere with the debugger listening at this URL
-xhr, -xhr-extraction extract xhr requests
-pls, -page-load-strategy string page load strategy (heuristic, load, domcontentloaded, networkidle, none) (default "heuristic")
-dwt, -dom-wait-time int time in seconds to wait after page load when using domcontentloaded strategy (default 5)
-csp, -captcha-solver-provider string captcha solver provider (e.g. capsolver)
-csk, -captcha-solver-key string captcha solver provider api key
-no-sandboxЗапускает headless chrome браузер с опцией no-sandbox, полезно при запуске от имени пользователя root.
katana -u https://tesla.com -headless -no-sandbox
-no-incognitoЗапускает headless chrome браузер без режима инкогнито, полезно при использовании локального браузера.
katana -u https://tesla.com -headless -no-incognito
Чтобы сохранять cookies и другие данные сессии браузера между запусками, комбинируйте -no-incognito с -chrome-data-dir, чтобы Katana использовала выбранную вами директорию профиля Chrome вместо изолированной временной.
katana -u https://tesla.com -headless -no-incognito -chrome-data-dir /tmp/katana-profile
-headless-optionsПри краулинге в headless-режиме дополнительные опции chrome можно указать с помощью -headless-options, например -
katana -u https://tesla.com -headless -system-chrome -headless-options --disable-gpu,proxy-server=http://127.0.0.1:8080
-page-load-strategyУправляет тем, как katana ждет загрузки страниц в headless-режиме. Разные стратегии полезны для разных типов веб-приложений:
| Стратегия | Описание |
|---|---|
heuristic |
(по умолчанию) Умное ожидание, адаптирующееся к поведению страницы - ожидает событие загрузки, бездействие сети и стабильность DOM |
load |
Ждет только события загрузки браузера |
domcontentloaded |
Ждет события DOMContentLoaded плюс дополнительное время (настраивается через -dwt) для рендеринга JavaScript |
networkidle |
Ждет прекращения сетевой активности |
none |
Без ожидания - возвращает результат сразу после начала навигации |
katana -u https://tesla.com -headless -pls domcontentloaded
Стратегия domcontentloaded особенно полезна для одностраничных приложений (SPA), которые никогда полностью не завершают загрузку из-за непрерывных фоновых запросов (вебсокеты, поллинг и т.д.).
-dom-wait-timeПри использовании стратегии загрузки страниц domcontentloaded эта опция определяет, сколько секунд ждать после срабатывания события DOMContentLoaded. Это позволяет время для рендеринга интерактивных элементов JavaScript. По умолчанию 5 секунд.
katana -u https://tesla.com -headless -pls domcontentloaded -dwt 10
Katana поддерживает автоматическое обнаружение и решение капч при headless-краулинге. При обнаружении страницы с капчей katana определяет поставщика капчи, решает ее через внешний сервис и продолжает краулинг.
Поддерживаемые типы капч: reCAPTCHA v2, reCAPTCHA v3, reCAPTCHA Enterprise, Cloudflare Turnstile, hCaptcha
-captcha-solver-providerОпция для указания поставщика решения капч. В настоящее время поддерживается: capsolver.
-captcha-solver-keyAPI-ключ для поставщика решения капч.
katana -u https://example.com -headless -csp capsolver -csk YOUR_API_KEY
Поставщик и ключ также можно задать с помощью переменных окружения:
export CAPTCHA_SOLVER_PROVIDER=capsolver
export CAPTCHA_SOLVER_KEY=YOUR_API_KEY
katana -u https://example.com -headless
Краулинг может быть бесконечным, если не ограничить область, поэтому katana поставляется с множеством средств для определения области краулинга.
-field-scopeНаиболее удобная опция для определения области с использованием предопределенного имени поля, rdn является опцией по умолчанию для области поля.
rdn - краулинг ограничен корневым доменным именем и всеми поддоменами (например, *example.com) (по умолчанию)fqdn - краулинг ограничен указанным поддоменом (например, www.example.com или api.example.com)dn - краулинг ограничен ключевым словом доменного имени (например, example)katana -u https://tesla.com -fs dn
-crawl-scopeДля расширенного управления областью можно использовать опцию -cs, которая поддерживает регулярные выражения.
katana -u https://tesla.com -cs login
Для множественных правил области допускается передача файла с многострочными строками / регулярными выражениями.
$ cat in_scope.txt
login/
admin/
app/
wordpress/
katana -u https://tesla.com -cs in_scope.txt
-crawl-out-scopeДля определения того, что не следует краулить, можно использовать опцию -cos, которая также поддерживает ввод регулярных выражений.
katana -u https://tesla.com -cos logout
Для множественных правил исключения области допускается передача файла с многострочными строками / регулярными выражениями.
$ cat out_of_scope.txt
/logout
/log_out
katana -u https://tesla.com -cos out_of_scope.txt
-no-scopeKatana по умолчанию ограничивает область *.domain, чтобы отключить это, можно использовать опцию -ns, а также для краулинга всего интернета.
katana -u https://tesla.com -ns
-display-out-scopeПо умолчанию, когда используется опция scope, она также применяется для отображения ссылок в качестве результата, поэтому внешние URL по умолчанию исключаются, и чтобы переопределить это поведение, можно использовать опцию -do для отображения всех внешних URL, которые существуют в целевом URL / Endpoints с областью видимости.
katana -u https://tesla.com -do
Вот все опции CLI для управления областью видимости -
katana -h scope
Flags:
SCOPE:
-cs, -crawl-scope string[] in scope url regex to be followed by crawler
-cos, -crawl-out-scope string[] out of scope url regex to be excluded by crawler
-fs, -field-scope string pre-defined scope field (dn,rdn,fqdn) (default "rdn")
-ns, -no-scope disables host based default scope
-do, -display-out-scope display external endpoint from scoped crawling
Katana предоставляет множество опций для настройки и управления краулингом так, как нам нужно.
-depthОпределение глубины (depth) для отслеживания URL для краулинга. Чем больше глубина, тем больше количество краулируемых endpoints + больше времени на краулинг.
katana -u https://tesla.com -d 5
-js-crawlОпция для включения парсинга файлов JavaScript + краулинга endpoints, обнаруженных в файлах JavaScript. По умолчанию отключена.
katana -u https://tesla.com -jc
-crawl-durationОпция для предварительного определения длительности краулинга. По умолчанию отключена.
katana -u https://tesla.com -ct 2
-known-filesОпция для включения краулинга файлов robots.txt и sitemap.xml. По умолчанию отключена.
katana -u https://tesla.com -kf robotstxt,sitemapxml
-automatic-form-fillОпция для включения автоматического заполнения форм для известных/неизвестных полей. Значения известных полей можно настроить по мере необходимости, обновив конфигурационный файл формы по адресу $HOME/.config/katana/form-config.yaml.
Автоматическое заполнение форм является экспериментальной функцией.
katana -u https://tesla.com -aff
Значения конфигурации форм поддерживают вспомогательные функции DSL для динамической генерации данных. Все функции rand_* из библиотеки projectdiscovery/dsl доступны:
# $HOME/.config/katana/form-config.yaml
email: "rand_email()"
phone: "rand_phone()"
placeholder: "rand_first_name()"
password: 'rand_base(16, "")'
color: "#e66465"
-filter-similarОпция для фильтрации краулинга похожих по виду URL путем нормализации переменных сегментов пути. Она обнаруживает ID, UUID, хеши, даты и другие динамические значения, а также изучает повторяющиеся шаблоны во время выполнения. Например, /users/123 и /users/456 считаются одним и тем же endpoint.
katana -u https://tesla.com -fsu
Порог повышения (сколько различных значений в позиции пути должно быть, прежде чем она будет рассматриваться как параметр) можно настроить с помощью -fst. Более низкие значения более агрессивны (меньше URL краулируется), более высокие — более разрешительны. По умолчанию 10.
katana -u https://tesla.com -fsu -fst 5
-max-domain-pagesОпция для ограничения количества краулируемых страниц на домен. Предотвращает использование одного доменом всего бюджета краулинга, полезна для больших сайтов или защиты от ловушек краулера.
katana -u https://tesla.com -mdp 100
Katana может обогащать результаты краулинга с помощью базы знаний — классификации на основе машинного обучения для каждой краулируемой страницы, поддерживаемой dit. При включении каждый ответ классифицируется по типу страницы (например, login, error, captcha, parked), а любые формы на странице идентифицируются, при этом результат прикрепляется к полю knowledgebase выходных данных в формате JSONL. Это работает со всеми движками (стандартным и headless).
Примечание: Классификационная модель загружается автоматически при первом использовании в
~/.dit/model.json(с Hugging Face). Это единоразовая загрузка для каждого устройства — последующие запуски используют кэшированную модель. Ручная установкаditне требуется.
-knowledge-baseВключает классификацию базы знаний. Классификация типа страницы и формы добавляется в поле knowledgebase каждого результата.
katana -u https://example.com -kb -jsonl
{
"timestamp": "...",
"request": { "...": "..." },
"response": {
"...": "...",
"knowledgebase": {
"PageType": "login",
"Forms": [{ "type": "login", "fields": { "username": "username or email", "password": "password" } }]
}
}
}
-filter-page-typeФильтрует результаты, оставляя только указанный тип(ы) страниц. Включение этой опции подразумевает -kb (классификатор инициализируется автоматически).
katana -u https://example.com -fpt login,error
-kb-secretsВключает экстрактор секретов в базе знаний, обнаруживая обнаруженные секреты (API-ключи, токены и т. д.) под ключом secrets. Добавьте -kb-validate-secrets для проверки обнаруженных секретов у их поставщика — обратите внимание, что это отправляет реальные вызовы API.
katana -u https://example.com -kb-secrets
-kb-endpointsВключает экстрактор endpoints, который классифицирует запросы как REST, GraphQL, SOAP или XHR под ключом endpoints.
katana -u https://example.com -kb-endpoints
Аутентифицированный краулинг предполагает включение пользовательских заголовков или куки в HTTP-запросы для доступа к защищенным ресурсам. Эти заголовки предоставляют информацию для аутентификации или авторизации, позволяя вам краулировать аутентифицированный контент / endpoints. Вы можете указать заголовки напрямую в командной строке или предоставить их в виде файла с katana для выполнения аутентифицированного краулинга.
Примечание: Пользователю необходимо вручную выполнить аутентификацию и экспортировать сессионную куки / заголовок в файл для использования с katana.
-headersОпция для добавления пользовательского заголовка или куки в запрос.
Синтаксис заголовков в HTTP-спецификации
Вот пример добавления куки в запрос:
katana -u https://tesla.com -H 'Cookie: usrsess=AmljNrESo'
Также можно предоставить заголовки или куки в виде файла. Например:
$ cat cookie.txt
Cookie: PHPSESSIONID=XXXXXXXXX
X-API-KEY: XXXXX
TOKEN=XX
katana -u https://tesla.com -H cookie.txt
Есть дополнительные опции для настройки при необходимости, вот все связанные с конфигурацией опции CLI -
katana -h config
Flags:
CONFIGURATION:
-r, -resolvers string[] list of custom resolver (file or comma separated)
-d, -depth int maximum depth to crawl (default 3)
-jc, -js-crawl enable endpoint parsing / crawling in javascript file
-ct, -crawl-duration int maximum duration to crawl the target for
-kf, -known-files string enable crawling of known files (all,robotstxt,sitemapxml)
-mrs, -max-response-size int maximum response size to read (default 9223372036854775807)
-timeout int time to wait for request in seconds (default 10)
-aff, -automatic-form-fill enable automatic form filling (experimental)
-fx, -form-extraction enable extraction of form, input, textarea & select elements
-retry int number of times to retry the request (default 1)
-proxy string http/socks5 proxy to use
-H, -headers string[] custom header/cookie to include in request
-config string path to the katana configuration file
-fc, -form-config string path to custom form configuration file
-flc, -field-config string path to custom field configuration file
-s, -strategy string Visit strategy (depth-first, breadth-first) (default "depth-first")
-iqp, -ignore-query-params Ignore crawling same path with different query-param values
-fsu, -filter-similar filter crawling of similar looking URLs (e.g., /users/123 and /users/456)
-fst, -filter-similar-threshold int number of distinct values before a path position is treated as parameter (default 10)
-mdp, -max-domain-pages int maximum number of pages to crawl per domain (default unlimited)
Katana также может подключаться к активной сессии браузера, где пользователь уже вошел в систему и прошел аутентификацию, и использовать ее для краулинга. Единственное требование для этого — запустить браузер с включенным удаленной отладкой.
Вот пример запуска браузера Chrome с включенной удаленной отладкой и использования его с katana -
шаг 1) Сначала найдите путь к исполняемому файлу Chrome
| Операционная система | Расположение исполняемого файла Chromium | Расположение исполняемого файла Google Chrome |
|---|---|---|
| Windows (64 бит) | C:\Program Files (x86)\Google\Chromium\Application\chrome.exe |
C:\Program Files (x86)\Google\Chrome\Application\chrome.exe |
| Windows (32 бит) | C:\Program Files\Google\Chromium\Application\chrome.exe |
C:\Program Files\Google\Chrome\Application\chrome.exe |
| macOS | /Applications/Chromium.app/Contents/MacOS/Chromium |
/Applications/Google Chrome.app/Contents/MacOS/Google Chrome |
| Linux | /usr/bin/chromium |
/usr/bin/google-chrome |
шаг 2) Запустите Chrome с включенной удаленной отладкой, он вернет URL-адрес websocket. Например, в MacOS вы можете запустить Chrome с включенной удаленной отладкой, используя следующую команду -
$ /Applications/Google\ Chrome.app/Contents/MacOS/Google\ Chrome --remote-debugging-port=9222
DevTools listening on ws://127.0.0.1:9222/devtools/browser/c5316c9c-19d6-42dc-847a-41d1aeebf7d6
Теперь войдите на веб-сайт, который хотите краулировать, и оставьте браузер открытым.
шаг 3) Теперь используйте URL-адрес websocket с katana для подключения к активной сессии браузера и краулинга веб-сайта
katana -headless -u https://tesla.com -cwu ws://127.0.0.1:9222/devtools/browser/c5316c9c-19d6-42dc-847a-41d1aeebf7d6 -no-incognito
Примечание: вы можете использовать опцию
-cddдля указания пользовательского каталога данных Chrome для хранения данных браузера и куки, но это не сохраняет данные сессии, если куки установлена какТолькоили истекает через определенное время.
-field[!WARNING] Устарело: используйте
-output-template. Флагfieldвсе еще поддерживается для обратной совместимости.
Katana поставляется со встроенными полями, которые можно использовать для фильтрации вывода для получения желаемой информации. Опцию -f можно использовать для указания любого из доступных полей.
-f, -field string field to display in output (url,path,fqdn,rdn,rurl,qurl,qpath,file,key,value,kv,dir,udir)
Вот таблица с примерами каждого поля и ожидаемым результатом при его использовании -
| ПОЛЕ | ОПИСАНИЕ | ПРИМЕР |
|---|---|---|
url |
URL Endpoint | https://admin.projectdiscovery.io/admin/login?user=admin&password=admin |
qurl |
URL с параметрами запроса | https://admin.projectdiscovery.io/admin/login.php?user=admin&password=admin |
qpath |
Путь с параметрами запроса | /login?user=admin&password=admin |
path |
URL Path | https://admin.projectdiscovery.io/admin/login |
fqdn |
Полностью квалифицированное доменное имя | admin.projectdiscovery.io |
rdn |
Корневое доменное имя | projectdiscovery.io |
rurl |
Корневой URL | https://admin.projectdiscovery.io |
ufile |
URL с файлом | https://admin.projectdiscovery.io/login.js |
file |
Имя файла в URL | login.php |
key |
Ключи параметров в URL | user,password |
value |
Значения параметров в URL | admin,admin |
kv |
Ключи=Значения в URL | user=admin&password=admin |
dir |
Имя каталога URL | /admin/ |
udir |
URL с каталогом | https://admin.projectdiscovery.io/admin/ |
Вот пример использования опции field для отображения только всех URL с параметром запроса -
katana -u https://tesla.com -f qurl -silent
https://shop.tesla.com/en_au?redirect=no
https://shop.tesla.com/en_nz?redirect=no
https://shop.tesla.com/product/men_s-raven-lightweight-zip-up-bomber-jacket?sku=1740250-00-A
https://shop.tesla.com/product/tesla-shop-gift-card?sku=1767247-00-A
https://shop.tesla.com/product/men_s-chill-crew-neck-sweatshirt?sku=1740176-00-A
https://www.tesla.com/about?redirect=no
https://www.tesla.com/about/legal?redirect=no
https://www.tesla.com/findus/list?redirect=no
Вы можете создавать пользовательские поля для извлечения и хранения определённой информации из ответов страниц, используя правила регулярных выражений. Эти пользовательские поля определяются в конфигурационном файле YAML и загружаются из расположения по умолчанию: $HOME/.config/katana/field-config.yaml. Альтернативно, вы можете использовать опцию -flc для загрузки конфигурационного файла пользовательских полей из другого расположения.
Вот пример пользовательского поля.
- name: email
type: regex
regex:
- '([a-zA-Z0-9._-]+@[a-zA-Z0-9._-]+\.[a-zA-Z0-9_-]+)'
- '([a-zA-Z0-9+._-]+@[a-zA-Z0-9._-]+\.[a-zA-Z0-9_-]+)'
- name: phone
type: regex
regex:
- '\d{3}-\d{8}|\d{4}-\d{7}'
При определении пользовательских полей поддерживаются следующие атрибуты:
Значение атрибута name используется как значение опции CLI
-field.
Тип пользовательского атрибута, в настоящее время поддерживаемая опция —
regex.
Часть ответа, из которой извлекается информация. Значение по умолчанию —
response, которое включает и заголовок, и тело. Другие возможные значения —headerиbody.
Вы можете использовать этот атрибут для выбора конкретной совпавшей группы в регулярном выражении, например:
group: 1.
katana -u https://tesla.com -f email,phone
-store-fieldДля дополнения опции field, которая полезна для фильтрации вывода во время выполнения, существует опция -sf, -store-fields, которая работает точно так же, как опция field, за исключением того, что вместо фильтрации она сохраняет всю информацию на диск в директорию katana_field, отсортированную по целевому URL. Используйте -sfd или -store-field-dir для сохранения данных в другом расположении.
katana -u https://tesla.com -sf key,fqdn,qurl -silent
$ ls katana_field/
https_www.tesla.com_fqdn.txt
https_www.tesla.com_key.txt
https_www.tesla.com_qurl.txt
Опция -store-field может быть полезна для сбора информации для создания целевых списков слов для различных целей, включая, но не ограничиваясь:
-extension-matchВывод сканирования можно легко сопоставить с определённым расширением, используя опцию -em, чтобы гарантированно отображать только вывод, содержащий указанное расширение.
katana -u https://tesla.com -silent -em js,jsp,json
Используйте специальное значение none, чтобы также включить в вывод URL без расширения файла:
katana -u https://tesla.com -silent -em js,jsp,json,none
-extension-filterВывод сканирования можно легко отфильтровать по определённому расширению, используя опцию -ef, которая гарантирует удаление всех URL, содержащих указанное расширение.
katana -u https://tesla.com -silent -ef css,txt,md
-no-default-ext-filterKatana по умолчанию фильтрует несколько расширений. Это можно отключить с помощью опции -ndef.
katana -u https://tesla.com -silent -ndef
-match-regexФлаг -match-regex или -mr позволяет фильтровать выходные URL с помощью регулярных выражений. При использовании этого флага только URL, соответствующие указанному регулярному выражению, будут напечатаны в выводе.
katana -u https://tesla.com -mr 'https://shop\.tesla\.com/*' -silent
-filter-regexФлаг -filter-regex или -fr позволяет фильтровать выходные URL с помощью регулярных выражений. При использовании этого флага URL, соответствующие указанному регулярному выражению, будут пропускаться.
katana -u https://tesla.com -fr 'https://www\.tesla\.com/*' -silent
Katana поддерживает выражения на основе DSL для расширенных возможностей сопоставления и фильтрации:
katana -u https://www.hackerone.com -mdc 'status_code == 200'
katana -u https://www.hackerone.com -mdc 'contains(endpoint, "default") && status_code != 403'
katana -u https://www.hackerone.com -mdc 'contains(to_lower(technologies), "php")'
katana -u https://www.hackerone.com -fdc 'contains(to_lower(technologies), "cloudflare")'
Функции DSL можно применять к любим ключам в выводе jsonl. Для получения дополнительной информации о доступных функциях DSL посетите проект dsl.
Вот дополнительные параметры фильтрации -
katana -h filter
Flags:
FILTER:
-mr, -match-regex string[] regex or list of regex to match on output url (cli, file)
-fr, -filter-regex string[] regex or list of regex to filter on output url (cli, file)
-f, -field string field to display in output (url,path,fqdn,rdn,rurl,qurl,qpath,file,ufile,key,value,kv,dir,udir)
-sf, -store-field string field to store in per-host output (url,path,fqdn,rdn,rurl,qurl,qpath,file,ufile,key,value,kv,dir,udir)
-em, -extension-match string[] match output for given extension (eg, -em php,html,js,none)
-ef, -extension-filter string[] filter output for given extension (eg, -ef png,css)
-ndef, -no-default-ext-filter bool remove default extensions from the filter list
-mdc, -match-condition string match response with dsl based condition
-fdc, -filter-condition string filter response with dsl based condition
-duf, -disable-unique-filter disable duplicate content filtering
Легко получить блокировку / бан во время сканирования, если не соблюдать лимиты целевых веб-сайтов. Katana поставляется с множеством опций для настройки скорости сканирования, чтобы она была такой быстрой / медленной, какой вы хотите.
-delayопция для введения задержки в секундах между каждым новым запросом, который katana делает во время сканирования. По умолчанию отключена.
katana -u https://tesla.com -delay 20
-concurrencyопция для управления количеством URL на mục tiêu для одновременной загрузки.
katana -u https://tesla.com -c 20
-parallelismопция для определения количества целей для одновременной обработки из входного списка.
katana -u https://tesla.com -p 20
-rate-limitМаксимальное количество запросов в секунду, применяется глобально ко всем хостам.
katana -u https://tesla.com -rl 100
-rate-limit-minuteМаксимальное количество запросов в минуту, применяется глобально ко всем хостам.
katana -u https://tesla.com -rlm 500
-host-rate-limitМаксимальное количество запросов в секунду на хост. Каждый хост получает свой собственный пул для ограничения скорости, поэтому медленный хост не будет замедлять быстрые. Заменяет глобальное ограничение скорости при установке. Katana также автоматически делает откат с экспоненциальной задержкой и джиттером, когда хост возвращает 429 или 503.
katana -u https://tesla.com -hrl 50
-host-rate-limit-minuteМаксимальное количество запросов в минуту на хост.
katana -u https://tesla.com -hrlm 200
Вот все длинные / короткие варианты CLI для управления ограничением скорости -
katana -h rate-limit
Flags:
RATE-LIMIT:
-c, -concurrency int number of concurrent fetchers to use (default 10)
-p, -parallelism int number of concurrent inputs to process (default 10)
-rd, -delay int request delay between each request in seconds
-rl, -rate-limit int maximum requests to send per second (default 150)
-rlm, -rate-limit-minute int maximum number of requests to send per minute
-hrl, -host-rate-limit int maximum requests to send per second per host
-hrlm, -host-rate-limit-minute int maximum number of requests to send per minute per host
Katana поддерживает как вывод файлов в формате простого текста, так и JSON, который включает дополнительную информацию, такую как source, tag и имя attribute для корреляции обнаруженных конечных точек.
-outputПо умолчанию katana выводит обнаруженные конечные точки в формате простого текста. Результаты можно записать в файл, используя опцию -output.
katana -u https://example.com -no-scope -output example_endpoints.txt
-output-templateОпция -output-template позволяет настроить формат вывода с помощью шаблона, обеспечивая гибкость в определении структуры вывода. Эта опция заменяет устаревший флаг -field для фильтрации вывода. Вместо использования предопределённых полей вы можете указать пользовательский шаблон непосредственно в командной строке, чтобы контролировать представление извлечённых данных.
Пример использования опции -output-template:
katana -u https://example.com -output-template '{{email}} - {{url}}'
В этом примере email представляет пользовательское поле, которое извлекает и отображает адреса электронной почты, найденные в источнике url.
[!NOTE] Если указанное поле не существует или не содержит значения, оно просто будет пропущено в выводе.
Эта опция может эффективно структурировать вывод наиболее подходящим для вашего варианта использования образом, делая извлечение данных более интуитивным и настраиваемым.
-jsonlkatana -u https://example.com -jsonl | jq .
{
"timestamp": "2023-03-20T16:23:58.027559+05:30",
"request": {
"method": "GET",
"endpoint": "https://example.com",
"raw": "GET / HTTP/1.1\r\nHost: example.com\r\nUser-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 11_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36\r\nAccept-Encoding: gzip\r\n\r\n"
},
"response": {
"status_code": 200,
"headers": {
"accept_ranges": "bytes",
"expires": "Mon, 27 Mar 2023 10:53:58 GMT",
"last_modified": "Thu, 17 Oct 2019 07:18:26 GMT",
"content_type": "text/html; charset=UTF-8",
"server": "ECS (dcb/7EA3)",
"vary": "Accept-Encoding",
"etag": "\"3147526947\"",
"cache_control": "max-age=604800",
"x_cache": "HIT",
"date": "Mon, 20 Mar 2023 10:53:58 GMT",
"age": "331239"
},
"body": "<!doctype html>\n<html>\n<head>\n <title>Example Domain</title>\n\n <meta charset=\"utf-8\" />\n <meta http-equiv=\"Content-type\" content=\"text/html; charset=utf-8\" />\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\" />\n <style type=\"text/css\">\n body {\n background-color: #f0f0f2;\n margin: 0;\n padding: 0;\n font-family: -apple-system, system-ui, BlinkMacSystemFont, \"Segoe UI\", \"Open Sans\", \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n \n }\n div {\n width: 600px;\n margin: 5em auto;\n padding: 2em;\n background-color: #fdfdff;\n border-radius: 0.5em;\n box-shadow: 2px 3px 7px 2px rgba(0,0,0,0.02);\n }\n a:link, a:visited {\n color: #38488f;\n text-decoration: none;\n }\n @media (max-width: 700px) {\n div {\n margin: 0 auto;\n width: auto;\n }\n }\n </style> \n</head>\n\n<body>\n<div>\n <h1>Example Domain</h1>\n <p>This domain is for use in illustrative examples in documents. You may use this\n domain in literature without prior coordination or asking for permission.</p>\n <p><a href=\"https://www.iana.org/domains/example\">More information...</a></p>\n</div>\n</body>\n</html>\n",
"technologies": [
"Azure",
"Amazon ECS",
"Amazon Web Services",
"Docker",
"Azure CDN"
],
"raw": "HTTP/1.1 200 OK\r\nContent-Length: 1256\r\nAccept-Ranges: bytes\r\nAge: 331239\r\nCache-Control: max-age=604800\r\nContent-Type: text/html; charset=UTF-8\r\nDate: Mon, 20 Mar 2023 10:53:58 GMT\r\nEtag: \"3147526947\"\r\nExpires: Mon, 27 Mar 2023 10:53:58 GMT\r\nLast-Modified: Thu, 17 Oct 2019 07:18:26 GMT\r\nServer: ECS (dcb/7EA3)\r\nVary: Accept-Encoding\r\nX-Cache: HIT\r\n\r\n<!doctype html>\n<html>\n<head>\n <title>Example Domain</title>\n\n <meta charset=\"utf-8\" />\n <meta http-equiv=\"Content-type\" content=\"text/html; charset=utf-8\" />\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\" />\n <style type=\"text/css\">\n body {\n background-color: #f0f0f2;\n margin: 0;\n padding: 0;\n font-family: -apple-system, system-ui, BlinkMacSystemFont, \"Segoe UI\", \"Open Sans\", \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n \n }\n div {\n width: 600px;\n margin: 5em auto;\n padding: 2em;\n background-color: #fdfdff;\n border-radius: 0.5em;\n box-shadow: 2px 3px 7px 2px rgba(0,0,0,0.02);\n }\n a:link, a:visited {\n color: #38488f;\n text-decoration: none;\n }\n @media (max-width: 700px) {\n div {\n margin: 0 auto;\n width: auto;\n }\n }\n </style> \n</head>\n\n<body>\n<div>\n <h1>Example Domain</h1>\n <p>This domain is for use in illustrative examples in documents. You may use this\n domain in literature without prior coordination or asking for permission.</p>\n <p><a href=\"https://www.iana.org/domains/example\">More information...</a></p>\n</div>\n</body>\n</html>\n"
}
}
-store-responseОпция -store-response позволяет записывать все запросы и ответы обнаруженных конечных точек в текстовый файл. При использовании этой опции текстовые файлы, включающие запрос и ответ, будут записаны в директорию katana_response. Если вы хотите указать пользовательскую директорию, вы можете использовать опцию -store-response-dir.
katana -u https://example.com -no-scope -store-response
$ cat katana_response/index.txt
katana_response/example.com/327c3fda87ce286848a574982ddd0b7c7487f816.txt https://example.com (200 OK)
katana_response/www.iana.org/bfc096e6dd93b993ca8918bf4c08fdc707a70723.txt http://www.iana.org/domains/reserved (200 OK)
Примечание:
Опция -store-response не поддерживается в режиме -headless.
-list-output-fieldsФлаг -list-output-fields или -lof отображает все доступные поля, которые можно использовать в формате вывода JSONL. Это полезно для понимания того, какие данные доступны при использовании пользовательских шаблонов вывода или при исключении определённых полей.
katana -lof
-exclude-output-fieldsФлаг -exclude-output-fields или -eof позволяет исключить определённые поля из вывода JSONL. Это полезно для уменьшения размера вывода или для фокусировки на определённых данных путём удаления ненужных полей.
katana -u https://example.com -jsonl -eof raw,body
Вот дополнительные опции CLI, связанные с выводом -
katana -h output
OUTPUT:
-o, -output string file to write output to
-sr, -store-response store http requests/responses
-srd, -store-response-dir string store http requests/responses to custom directory
-lof, -list-output-fields list available fields for jsonl output format
-eof, -exclude-output-fields exclude fields from jsonl output
-j, -json write output in JSON Lines format
-nc, -no-color disable output content coloring (ANSI escape codes)
-silent display output only
-v, -verbose display verbose output
-version display project version
katana может использоваться как библиотека путём создания экземпляра структуры Option и заполнения его теми же опциями, которые были бы указаны через CLI. Используя эти опции, вы можете создать crawlerOptions и так стандартный, или гибридный crawler.
Метод crawler.Crawl должен быть вызван для сканирования ввода.
package main
import (
"math"
"github.com/projectdiscovery/gologger"
"github.com/projectdiscovery/katana/pkg/engine/standard"
"github.com/projectdiscovery/katana/pkg/output"
"github.com/projectdiscovery/katana/pkg/types"
)
func main() {
options := &types.Options{
MaxDepth: 3, // Maximum depth to crawl
FieldScope: "rdn", // Crawling Scope Field
BodyReadSize: math.MaxInt, // Maximum response size to read
Timeout: 10, // Timeout is the time to wait for request in seconds
Concurrency: 10, // Concurrency is the number of concurrent crawling goroutines
Parallelism: 10, // Parallelism is the number of urls processing goroutines
Delay: 0, // Delay is the delay between each crawl requests in seconds
RateLimit: 150, // Maximum requests to send per second
Strategy: "depth-first", // Visit strategy (depth-first, breadth-first)
OnResult: func(result output.Result) { // Callback function to execute for result
gologger.Info().Msg(result.Request.URL)
},
}
crawlerOptions, err := types.NewCrawlerOptions(options)
if err != nil {
gologger.Fatal().Msg(err.Error())
}
defer crawlerOptions.Close()
crawler, err := standard.New(crawlerOptions)
if err != nil {
gologger.Fatal().Msg(err.Error())
}
defer crawler.Close()
var input = "https://www.hackerone.com"
err = crawler.Crawl(input)
if err != nil {
gologger.Warning().Msgf("Could not crawl %s: %s", input, err.Error())
}
}
Для поддержания отслеживания проблем и повышения эффективности обработки:
Все отчёты начинаются как обсуждения в GitHub
Почему сначала обсуждения? - Сообщество может помочь с быстрыми вопросами и устранением неполадок - Лучшая обработка - подтверждённые ошибки/функциональность становятся отслеживаемыми проблемами - Чистый трекер проблем - фокус только на действенных элементах
Maintainers will convert discussions to issues when appropriate after proper review.
katana сделана с ❤️ командой projectdiscovery и распространяется под лицензией MIT.