
katana v1.7.0
Uma estrutura de crawling e spidering de próxima geração.
Um framework de crawling e spidering de próxima geração
Recursos • Instalação • Uso • Escopo • Configuração • Filtros • Entre no Discord
Recursos

- Crawling web rápido e totalmente configurável
- Modo Padrão e Headless
- Parsing / crawling de JavaScript
- Preenchimento automático de formulários personalizável
- Controle de escopo - Campo pré-configurado / Regex
- Base de conhecimento - Classificação de tipo de página / formulário por ML (modelo baixado automaticamente)
- Saída personalizável - Campos pré-configurados
- ENTRADA - STDIN, URL e LISTA
- SAÍDA - STDOUT, ARQUIVO e JSON
Instalação
katana requer Go 1.26+ para instalar com sucesso. Se você encontrar problemas de instalação, recomendamos tentar com a versão mais recente disponível do Go, pois a versão mínima necessária pode ter mudado. Execute o comando abaixo ou baixe um binário pré-compilado da página de releases.```console CGO_ENABLED=1 go install github.com/projectdiscovery/katana/cmd/katana@latest
**Mais opções para instalar / executar o katana-**
<details>
<summary>Docker</summary>
> Para instalar / atualizar o docker para a tag latest -```sh
docker pull projectdiscovery/katana:latest
Para executar o katana no modo padrão usando o docker -```sh docker run projectdiscovery/katana:latest -u https://tesla.com
> Para executar katana em modo headless usando docker -```sh
docker run projectdiscovery/katana:latest -u https://tesla.com -system-chrome -headless
Ubuntu
É recomendado instalar os seguintes pré-requisitos -```sh 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
> install katana -```sh
go install github.com/projectdiscovery/katana/cmd/katana@latest
Uso```console
katana -h
Isso exibirá ajuda para a ferramenta. Aqui estão todas as opções que ela suporta.```console
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)
-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
Executando Katana
Entrada para katana
katana requer url ou endpoint para crawlear e aceita entradas únicas ou múltiplas.
A URL de entrada pode ser fornecida usando a opção -u, e múltiplos valores podem ser fornecidos usando entrada separada por vírgula; da mesma forma, a entrada file é suportada usando a opção -list e adicionalmente a entrada via pipe (stdin) também é suportada.
Entrada de URL```sh
katana -u https://tesla.com
#### Entrada de múltiplas URLs (separadas por vírgula)```sh
katana -u https://tesla.com,https://google.com
Entrada de Lista```bash
$ cat url_list.txt
https://tesla.com https://google.com
Extrair um arquivo .bin do GENEActiv sem precisar do software GENEActiv PC ou de uma conexão USB (via conversão de arquivo)
Ações Disponíveis:
- Extrair dados de arquivos .bin do GENEActiv, incluindo:
- Recuperar campos de metadados (ex., Versão do Firmware do Dispositivo, Data de Extração, Dados de Calibração)
- Analisar e gerar dados no formato **Pandas DataFrame**
- Gerar valores de contagem **ActiGraph count** usando o pacote **GGIR** comumente utilizado
- Relatar erros de dados, destacando anomalias (ex., temperaturas excessivas, tempo de não uso)
- Saída autodocumentada via resumo em markdown (saída opcional)"```
katana -list url_list.txt
STDIN (Entrada via pipe)```sh
echo https://tesla.com | katana
O **conceito central** é que você pode rapidamente```sh
cat domains | httpx | katana
Exemplo de execução do katana -```console 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/
## Modo de Rastreamento
### Modo Padrão
A modalidade de rastreamento padrão utiliza a biblioteca http padrão do Go nos bastidores para lidar com requisições/respostas HTTP. Esta modalidade é muito mais rápida, pois não tem a sobrecarga do navegador. Ainda assim, analisa o corpo das respostas HTTP como ele é, sem qualquer renderização de JavaScript ou DOM, potencialmente perdendo endpoints renderizados pós-DOM ou chamadas assíncronas de endpoints que podem ocorrer em aplicações web complexas dependendo, por exemplo, de eventos específicos do navegador.
### Modo Headless
O modo headless conecta chamadas headless internas para lidar com requisições/respostas HTTP diretamente no contexto do navegador. Isso oferece duas vantagens:
- A impressão digital HTTP (TLS e user agent) identifica totalmente o cliente como um navegador legítimo
- Melhor cobertura, pois os endpoints são descobertos analisando a resposta bruta padrão, como na modalidade anterior, e também a renderizada pelo navegador com JavaScript ativado.
O rastreamento headless é opcional e pode ser ativado usando a opção `-headless`.
Aqui estão outras opções de CLI headless -```console
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
Executa o navegador Chrome headless com a opção no-sandbox, útil ao executar como usuário root.```console katana -u https://tesla.com -headless -no-sandbox
*`-no-incognito`*
----
Executa o navegador Chrome em modo headless sem o modo anônimo, útil ao utilizar o navegador local.```console
katana -u https://tesla.com -headless -no-incognito
Para preservar cookies e outros dados de sessão do navegador entre execuções, combine -no-incognito com -chrome-data-dir para que o Katana reutilize o diretório de perfil do Chrome escolhido em vez de um temporário isolado.```console
katana -u https://tesla.com -headless -no-incognito -chrome-data-dir /tmp/katana-profile
*`-headless-options`*
----
Quando estiver realizando crawling em modo headless, opções adicionais do Chrome podem ser especificadas usando `-headless-options`, por exemplo -```console
katana -u https://tesla.com -headless -system-chrome -headless-options --disable-gpu,proxy-server=http://127.0.0.1:8080
-page-load-strategy
Controla como o katana aguarda o carregamento das páginas no modo headless. Diferentes estratégias são úteis para diferentes tipos de aplicações web:
| Estratégia | Descrição |
|---|---|
heuristic | (padrão) Espera inteligente que se adapta ao comportamento da página - aguarda pelo evento de carga, inatividade de rede e estabilidade do DOM |
load | Aguarda apenas pelo evento de carga do navegador |
domcontentloaded | Aguarda pelo evento DOMContentLoaded mais um tempo adicional (configurável via -dwt) para renderização de JavaScript |
networkidle | Aguarda até que a atividade de rede pare |
none | Sem espera - retorna imediatamente após o início da navegação |
| katana -u https://tesla.com -headless -pls domcontentloaded |
A estratégia `domcontentloaded` é particularmente útil para Single Page Applications (SPAs) que nunca completam o carregamento totalmente devido a pedidos contínuos em segundo plano (websockets, polling, etc.).
*`-dom-wait-time`*
----
Quando se utiliza a estratégia de carregamento de página `domcontentloaded`, esta opção especifica quantos segundos esperar após o evento DOMContentLoaded ser acionado. Isso dá tempo para o JavaScript renderizar elementos interativos. O padrão é 5 segundos.```console
katana -u https://tesla.com -headless -pls domcontentloaded -dwt 10
Resolução de Captcha
Katana suporta detecção e resolução automática de captcha durante a navegação headless. Quando uma página de captcha é encontrada, o katana identifica o provedor de captcha, resolve-o através de um serviço externo e continua a navegação.
Tipos de captcha suportados: reCAPTCHA v2, reCAPTCHA v3, reCAPTCHA Enterprise, Cloudflare Turnstile, hCaptcha
-captcha-solver-provider
Opção para especificar o provedor de resolução de captcha. Atualmente suportado: capsolver.
-captcha-solver-key
Chave de API para o provedor de resolução de captcha.```console katana -u https://example.com -headless -csp capsolver -csk YOUR_API_KEY
O provedor e a chave também podem ser definidos via variáveis de ambiente:```console
export CAPTCHA_SOLVER_PROVIDER=capsolver
export CAPTCHA_SOLVER_KEY=YOUR_API_KEY
katana -u https://example.com -headless
Controle de Escopo
O rastreamento pode ser interminável se não for escopado, por isso o katana vem com múltiplos suportes para definir o escopo do rastreamento.
-field-scope
Opção mais prática para definir escopo com nome de campo predefinido, sendo rdn a opção padrão para escopo de campo.
rdn- rastreamento escopado ao nome de domínio raiz e todos os subdomínios (ex.:*exemplo.com) (padrão)fqdn- rastreamento escopado ao subdomínio fornecido (ex.:www.exemplo.comouapi.exemplo.com)dn- rastreamento escopado à palavra-chave do nome de domínio (ex.:exemplo)```console katana -u https://tesla.com -fs dn
*`-crawl-scope`*
------
Para controle avançado de escopo, a opção `-cs` pode ser usada que vem com suporte a **regex**.```console
katana -u https://tesla.com -cs login
Para múltiplas regras no escopo, entrada de arquivo com string multilinha / regex pode ser passada.```bash $ cat in_scope.txt
login/ admin/ app/ wordpress/
### Instantâneos Extraídos

Os instantâneos extraídos estarão no diretório "VOL-[volume-id]-[datetime]" numerados cronologicamente.
Formato de data e hora: yyyyMMddHHmm
Para analisar com precisão os atributos de tempo, exporte no seu fuso horário local.
### Relatórios

Algumas informações do volume geradas automaticamente.
### Automação de Análise
Ferramentas WinMD: [WinMDCollect](https://github.com/projectdiscovery/katana/blob/HEAD/tools/WinMDCollect)
Ferramentas de análise de saída WinMD (scripts Bash): [OutputAnalysis](https://github.com/projectdiscovery/katana/blob/HEAD/tools/OutputAnalysis)```console
katana -u https://tesla.com -cs in_scope.txt
-crawl-out-scope
Para definir o que não rastrear, a opção -cos pode ser usada e também suporta entrada regex.```console
katana -u https://tesla.com -cos logout
Para múltiplas regras fora do escopo, entrada de arquivo com string multilinha / regex pode ser passada.```bash
$ cat out_of_scope.txt
/logout
/log_out
(empty)```console katana -u https://tesla.com -cos out_of_scope.txt
*`-no-scope`*
----
Katana tem como escopo padrão `*.domain`; para desabilitar isso, a opção `-ns` pode ser usada e também para rastrear a internet.```console
katana -u https://tesla.com -ns
-display-out-scope
Por padrão, quando a opção de escopo é usada, ela também se aplica aos links exibidos como saída, de modo que URLs externas são excluídas por padrão e para sobrescrever esse comportamento, a opção -do pode ser usada para exibir todas as URLs externas presentes nos URLs / Endpoints com escopo de destino.```
katana -u https://tesla.com -do
Aqui estão todas as opções de CLI para o controle de escopo -```console
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
Configuração do Crawler
Katana vem com várias opções para configurar e controlar o crawl da forma que desejamos.
-depth
Opção para definir a profundidade para seguir as URLs durante o crawl, quanto maior a profundidade, maior o número de endpoints sendo rastreados + tempo de crawl.```
katana -u https://tesla.com -d 5
*`-js-crawl`*
----
Opção para ativar a análise de arquivos JavaScript + rastreamento dos endpoints descobertos em arquivos JavaScript, desabilitada por padrão.```
katana -u https://tesla.com -jc
-crawl-duration
Opção para duração de crawling predefinida, desativada por padrão.``` katana -u https://tesla.com -ct 2
*`-known-files`*
----
Opção para ativar a varredura dos arquivos `robots.txt` e `sitemap.xml`, desativada por padrão.```
katana -u https://tesla.com -kf robotstxt,sitemapxml
-automatic-form-fill
Opção para habilitar o preenchimento automático de formulários para campos conhecidos / desconhecidos, os valores de campos conhecidos podem ser personalizados conforme necessário, atualizando o arquivo de configuração do formulário em $HOME/.config/katana/form-config.yaml.
O preenchimento automático de formulários é um recurso experimental.``` katana -u https://tesla.com -aff
Os valores de configuração de formulário suportam funções auxiliares DSL para geração dinâmica de dados. Todas as funções `rand_*` da biblioteca [projectdiscovery/dsl](https://github.com/projectdiscovery/dsl) estão disponíveis:```yaml
# $HOME/.config/katana/form-config.yaml
email: "rand_email()"
phone: "rand_phone()"
placeholder: "rand_first_name()"
password: 'rand_base(16, "")'
color: "#e66465"
-filter-similar
Opção para filtrar a varredura de URLs de aparência semelhante, normalizando segmentos de caminho variáveis. Isto detecta IDs, UUIDs, hashes, datas e outros valores dinâmicos, e também aprende padrões repetidos em tempo de execução. Por exemplo, /users/123 e /users/456 são tratados como o mesmo endpoint.```
katana -u https://tesla.com -fsu
O limite de promoção (quantos valores distintos em uma posição de caminho antes de ser tratado como parâmetro) pode ser ajustado com `-fst`. Valores mais baixos são mais agressivos (menos URLs rastreados), valores mais altos são mais permissivos. O padrão é `10`.```
katana -u https://tesla.com -fsu -fst 5
-max-domain-pages
Opção para limitar o número de páginas rastreadas por domínio. Impede que qualquer domínio único consuma todo o orçamento de rastreamento, útil para sites grandes ou proteção contra armadilhas de rastreador.``` katana -u https://tesla.com -mdp 100
## Classificação da Base de Conhecimento
Katana pode enriquecer resultados de rastreamento com uma **base de conhecimento** — classificação por aprendizado de máquina de cada página rastreada, alimentada por [dit](https://github.com/HappyHackingSpace/dit). Quando ativada, cada resposta é classificada por **tipo de página** (ex.: `login`, `error`, `captcha`, `parked`) e quaisquer formulários na página são identificados, com o resultado anexado ao campo `knowledgebase` da saída JSONL. Isso funciona em **todos os mecanismos** (padrão e headless).
> **Nota**: O modelo de classificação é **baixado automaticamente** na primeira utilização para `~/.dit/model.json` (do [Hugging Face](https://huggingface.co/datasets/happyhackingspace/dit)). Isso é um custo único, por máquina — execuções subsequentes reutilizam o modelo em cache. Nenhuma instalação manual de `dit` é necessária.
*`-knowledge-base`*
----
Ativa a classificação da base de conhecimento. A classificação de tipo de página e de formulários é adicionada ao campo `knowledgebase` de cada resultado.```console
katana -u https://example.com -kb -jsonl
- Nilesh descobriu esta vulnerabilidade durante um teste de penetração de um contrato inteligente, onde a função de transferência de fundos do contrato inteligente verificava apenas a condição de igualdade e não a condição de limite inferior, resultando em uma transação que permitia a um atacante transferir fundos mesmo que o saldo fosse inferior ao montante da transferência.```json { "timestamp": "...", "request": { "...": "..." }, "response": { "...": "...", "knowledgebase": { "PageType": "login", "Forms": [{ "type": "login", "fields": { "username": "username or email", "password": "password" } }] } } }
*`-filter-page-type`*
----
Filtrar resultados apenas para o(s) tipo(s) de página fornecido(s). Ativar isso implica `-kb` (o classificador é inicializado automaticamente).```console
katana -u https://example.com -fpt login,error
-kb-secrets
Ative o extrator de segredos na base de conhecimento, revelando segredos detectados (chaves de API, tokens, etc.) sob a chave secrets. Adicione -kb-validate-secrets para validar segredos detectados contra seu provedor — note que isso envia chamadas de API ao vivo.```console
katana -u https://example.com -kb-secrets
*`-kb-endpoints`*
----
Habilita o extrator de endpoints, que classifica requisições como REST, GraphQL, SOAP ou XHR sob a chave `endpoints`.```console
katana -u https://example.com -kb-endpoints
Rastreamento Autenticado
O rastreamento autenticado envolve a inclusão de cabeçalhos ou cookies personalizados em requisições HTTP para acessar recursos protegidos. Esses cabeçalhos fornecem informações de autenticação ou autorização, permitindo que você rastreie conteúdos/endpoints autenticados. Você pode especificar cabeçalhos diretamente na linha de comando ou fornecê-los como um arquivo com o katana para realizar o rastreamento autenticado.
Nota: O usuário precisa realizar manualmente a autenticação e exportar o cookie/sessão ou cabeçalho para um arquivo para usar com o katana.
-headers
Opção para adicionar um cabeçalho ou cookie personalizado à requisição.
Sintaxe dos cabeçalhos na especificação HTTP
Aqui está um exemplo de adição de um cookie à requisição:``` katana -u https://tesla.com -H 'Cookie: usrsess=AmljNrESo'
Também é possível fornecer cabeçalhos ou cookies como um arquivo. Por exemplo:```
$ cat cookie.txt
Cookie: PHPSESSIONID=XXXXXXXXX
X-API-KEY: XXXXX
TOKEN=XX
Netexec
Netexec é um fork comunitário da ferramenta CrackMapExec obsoleta, projetado para pentesting e red teaming. Ele fornece poderosas capacidades de enumeração e exploração de rede.
Principais Características
- Suporte a Protocolos: SMB, MSSQL, WinRM, LDAP e mais
- Spray de Credenciais: Testar credenciais em vários protocolos
- Execução de Comandos: Executar comandos em sistemas remotos
- Sistema de Módulos: Extensível através de módulos da comunidade
- Formatação de Saída: Saída em JSON, XML, texto simples
- Integração: Funciona com Nessus, Metasploit e outras ferramentas``` katana -u https://tesla.com -H cookie.txt
Existem mais opções para configurar quando necessário, aqui estão todas as opções de CLI relacionadas à configuração -```console
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)
Conectando-se a uma Sessão Ativa do Navegador
O Katana também pode se conectar a uma sessão ativa do navegador na qual o usuário já está logado e autenticado, e utilizá-la para crawling. O único requisito para isso é iniciar o navegador com a depuração remota ativada.
Aqui está um exemplo de como iniciar o navegador Chrome com depuração remota ativada e usá-lo com o Katana -
passo 1) Primeiro, localize o caminho do executável do Chrome
| Sistema Operacional | Localização do Executável do Chromium | Localização do Executável do Google Chrome |
|---|---|---|
| Windows (64-bit) | C:\Program Files (x86)\Google\Chromium\Application\chrome.exe | C:\Program Files (x86)\Google\Chrome\Application\chrome.exe |
| Windows (32-bit) | 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 |
passo 2) Inicie o Chrome com depuração remota ativada; ele retornará uma URL websocker. Por exemplo, no macOS, você pode iniciar o Chrome com depuração remota ativada usando o seguinte comando -```console $ /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
> Agora faça login no site que deseja rastrear e mantenha o navegador aberto.
**passo 3) Agora use a URL do websocket com o katana para se conectar à sessão ativa do navegador e rastrear o site**```console
katana -headless -u https://tesla.com -cwu ws://127.0.0.1:9222/devtools/browser/c5316c9c-19d6-42dc-847a-41d1aeebf7d6 -no-incognito
Nota: pode usar a opção
-cddpara especificar um diretório de dados personalizado do Chrome para armazenar dados do navegador e cookies, mas isso não salva dados de sessão se o cookie for definido comoSessionapenas ou expirar após certo tempo.
Filtros
-field
[!WARNING] Obsoleto: use
-output-templateem vez disso. A flag de campo ainda é suportada para compatibilidade com versões anteriores.
Katana vem com campos integrados que podem ser usados para filtrar a saída para a informação desejada. A opção -f pode ser usada para especificar qualquer um dos campos disponíveis.```
-f, -field string field to display in output (url,path,fqdn,rdn,rurl,qurl,qpath,file,key,value,kv,dir,udir)
Aqui está uma tabela com exemplos de cada campo e saída esperada quando usado -
| FIELD | DESCRIPTION | EXAMPLE |
| ------- | --------------------------- | ------------------------------------------------------------ |
| `url` | Endpoint URL | `https://admin.projectdiscovery.io/admin/login?user=admin&password=admin` |
| `qurl` | URL incluindo parâmetro de consulta | `https://admin.projectdiscovery.io/admin/login.php?user=admin&password=admin` |
| `qpath` | Caminho incluindo parâmetro de consulta | `/login?user=admin&password=admin` |
| `path` | Caminho da URL | `https://admin.projectdiscovery.io/admin/login` |
| `fqdn` | Nome de domínio totalmente qualificado | `admin.projectdiscovery.io` |
| `rdn` | Nome do domínio raiz | `projectdiscovery.io` |
| `rurl` | URL raiz | `https://admin.projectdiscovery.io` |
| `ufile` | URL com arquivo | `https://admin.projectdiscovery.io/login.js` |
| `file` | Nome do arquivo na URL | `login.php` |
| `key` | Chaves de parâmetro na URL | `user,password` |
| `value` | Valores de parâmetro na URL | `admin,admin` |
| `kv` | Chaves=Valores na URL | `user=admin&password=admin` |
| `dir` | Nome do diretório da URL | `/admin/` |
| `udir` | URL com diretório | `https://admin.projectdiscovery.io/admin/` |
Aqui está um exemplo de uso da opção field para exibir apenas todas as URLs com parâmetro de consulta -```
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
Custom Fields
Você pode criar campos personalizados para extrair e armazenar informações específicas das respostas das páginas usando regras de regex. Esses campos personalizados são definidos usando um arquivo de configuração YAML e são carregados do local padrão em $HOME/.config/katana/field-config.yaml. Alternativamente, você pode usar a opção -flc para carregar um arquivo de configuração de campos personalizados de um local diferente.
Aqui está um exemplo de campo personalizado.```yaml
-
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}'
Ao definir campos personalizados, os seguintes atributos são suportados:
- **name** (obrigatório)
> O valor do atributo **name** é usado como o valor da opção `-field` na CLI.
- **type** (obrigatório)
> O tipo de atributo personalizado, opção atualmente suportada - `regex`
- **part** (opcional)
> A parte da resposta da qual extrair as informações. O valor padrão é `response`, que inclui tanto o cabeçalho quanto o corpo. Outros valores possíveis são `header` e `body`.
- group (opcional)
> Você pode usar este atributo para selecionar um grupo específico correspondente na regex, por exemplo: `group: 1`
#### Executando katana usando campo personalizado:```console
katana -u https://tesla.com -f email,phone
-store-field
Para complementar a opção field, que é útil para filtrar a saída em tempo de execução, existe a opção -sf, -store-fields, que funciona exatamente como a opção field, exceto que, em vez de filtrar, armazena todas as informações no disco no diretório katana_field ordenado por URL alvo. Use -sfd ou -store-field-dir para armazenar dados em um local diferente.```
katana -u https://tesla.com -sf key,fqdn,qurl -silent
``````bash
$ ls katana_field/
https_www.tesla.com_fqdn.txt
https_www.tesla.com_key.txt
https_www.tesla.com_qurl.txt
A opção -store-field pode ser útil para coletar informações para construir uma wordlist direcionada para vários propósitos, incluindo mas não se limitando a:
- Identificar os parâmetros mais comumente usados
- Descobrir caminhos frequentemente usados
- Encontrar arquivos comumente usados
- Identificar subdomínios relacionados ou desconhecidos
Filtros Katana
-extension-match
A saída do rastreamento pode ser facilmente filtrada para uma extensão específica usando a opção -em para garantir que apenas a saída contendo a extensão fornecida seja exibida.```
katana -u https://tesla.com -silent -em js,jsp,json
Use o valor especial `none` para também incluir URLs sem uma extensão de arquivo na saída:```
katana -u https://tesla.com -silent -em js,jsp,json,none
-extension-filter
A saída do crawl pode ser facilmente filtrada para extensão específica usando a opção -ef, que garante remover todas as URLs que contêm a extensão fornecida.```
katana -u https://tesla.com -silent -ef css,txt,md
*`-no-default-ext-filter`*
---
Katana filtra várias extensões por padrão. Isso pode ser desabilitado com a opção `-ndef`.```
katana -u https://tesla.com -silent -ndef
-match-regex
A flag -match-regex ou -mr permite filtrar URLs de saída usando expressões regulares. Ao usar esta flag, apenas URLs que correspondam à expressão regular especificada serão exibidas na saída.```
katana -u https://tesla.com -mr 'https://shop\.tesla\.com/*' -silent
*`-filter-regex`*
---
A flag `-filter-regex` ou `-fr` permite filtrar URLs de saída utilizando expressões regulares. Ao utilizar esta flag, serão ignoradas as URLs que correspondam à expressão regular especificada.```
katana -u https://tesla.com -fr 'https://www\.tesla\.com/*' -silent
Filtragem Avançada
Katana suporta expressões baseadas em DSL para capacidades avançadas de correspondência e filtragem:
- Para corresponder endpoints com código de status 200:```shell katana -u https://www.hackerone.com -mdc 'status_code == 200'
- Para corresponder endpoints que contenham "default" e tenham um código de status diferente de 403:```shell
katana -u https://www.hackerone.com -mdc 'contains(endpoint, "default") && status_code != 403'
- Para corresponder endpoints com tecnologias PHP:```shell katana -u https://www.hackerone.com -mdc 'contains(to_lower(technologies), "php")'
- Para filtrar endpoints que estão rodando no Cloudflare:```shell
katana -u https://www.hackerone.com -fdc 'contains(to_lower(technologies), "cloudflare")'
As funções DSL podem ser aplicadas a qualquer chave na saída jsonl. Para mais informações sobre as funções DSL disponíveis, visite o projeto dsl.
Aqui estão opções adicionais de filtro -```console 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
## Limite de Taxa
É fácil ser bloqueado/banido durante o crawling se não seguir os limites dos sites alvo, o katana vem com múltiplas opções para ajustar o crawl para ir tão rápido/lento quanto quisermos.
*`-delay`*
-----```
katana -u https://tesla.com -delay 20
-concurrency
opção para controlar o número de urls por alvo a buscar ao mesmo tempo.``` katana -u https://tesla.com -c 20
*`-parallelism`*
-----
opção para definir o número de alvos a processar ao mesmo tempo a partir da lista de entrada.```
katana -u https://tesla.com -p 20
-rate-limit
Máximo de requisições por segundo, aplicado globalmente a todos os hosts.``` katana -u https://tesla.com -rl 100
*`-rate-limit-minute`*
-----
Máximo de requisições por minuto, aplicado globalmente em todos os hosts.```
katana -u https://tesla.com -rlm 500
-host-rate-limit
Máximo de requisições por segundo por host. Cada host tem seu próprio balde de limite de taxa, então um host lento não irá limitar os rápidos. Substitui o limite de taxa global quando definido. Katana também recua automaticamente com atraso exponencial e jitter quando um host retorna 429 ou 503.```console katana -u https://tesla.com -hrl 50
*`-host-rate-limit-minute`*
-----
Máximo de requisições por minuto por host.```console
katana -u https://tesla.com -hrlm 200
Aqui estão todas as opções longas / curtas de CLI para controle de limite de taxa -```console 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
## Saída
Katana suporta saída em arquivo tanto em formato de texto simples quanto JSON, que inclui informações adicionais como nome de `source`, `tag` e `attribute` para correlacionar o endpoint descoberto.
*`-output`*
---
Por padrão, katana gera os endpoints rastreados em formato de texto simples. Os resultados podem ser escritos em um arquivo usando a opção -output.```console
katana -u https://example.com -no-scope -output example_endpoints.txt
-output-template
A opção -output-template permite personalizar o formato de saída usando um modelo, proporcionando flexibilidade na definição da estrutura de saída. Esta opção substitui a flag obsoleta -field para filtrar a saída. Em vez de depender de campos predefinidos, você pode especificar um modelo personalizado diretamente na linha de comando para controlar como os dados extraídos são apresentados.
Exemplo de uso da opção -output-template:```sh
katana -u https://example.com -output-template '{{email}} - {{url}}'
Neste exemplo, `email` representa um [campo personalizado](#custom-fields) que extrai e exibe endereços de e-mail encontrados na origem `url`.
> [!NOTE]
> Se um campo especificado não existir ou não contiver um valor, ele será simplesmente omitido da saída.
Esta opção pode estruturar efetivamente a saída da maneira que melhor se adequa ao seu caso de uso, tornando a extração de dados mais intuitiva e personalizável.
*`-jsonl`*
---```console
katana -u https://example.com -jsonl | jq .
Licença
GNU General Public License v3.0```json { "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": "\n\n\n Example Domain\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 \n\n\n\n
Example Domain
\nThis domain is for use in illustrative examples in documents. You may use this\n domain in literature without prior coordination or asking for permission.
\n<a href="https://www.iana.org/domains/example\">More information...
\nExample Domain
\nThis domain is for use in illustrative examples in documents. You may use this\n domain in literature without prior coordination or asking for permission.
\n<a href="https://www.iana.org/domains/example\">More information...
\n*`-store-response`*
----
A opção `-store-response` permite escrever todas as requisições e respostas de endpoints rastreados em um arquivo de texto. Quando esta opção é usada, arquivos de texto contendo a requisição e resposta serão escritos no diretório **katana_response**. Se você desejar especificar um diretório personalizado, pode usar a opção `-store-response-dir`.```console
katana -u https://example.com -no-scope -store-response
(empty)```bash $ 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)
**Nota:**
*A opção `-store-response` não é suportada no modo `-headless`.*
*`-list-output-fields`*
----
A flag `-list-output-fields` ou `-lof` exibe todos os campos disponíveis que podem ser usados no formato de saída JSONL. Isso é útil para entender quais dados estão disponíveis ao usar modelos de saída personalizados ou ao excluir campos específicos.```console
katana -lof
-exclude-output-fields
A flag -exclude-output-fields ou -eof permite excluir campos específicos da saída JSONL. Isso é útil para reduzir o tamanho da saída ou focar em dados específicos, removendo campos indesejados.```console
katana -u https://example.com -jsonl -eof raw,body
Aqui estão opções adicionais de CLI relacionadas à saída -```console
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 como biblioteca
katana pode ser usado como biblioteca criando uma instância da struct Option e preenchendo-a com as mesmas opções que seriam especificadas via CLI. Usando as opções, você pode criar crawlerOptions e assim um crawler padrão ou híbrido.
O método crawler.Crawl deve ser chamado para rastrear a entrada.```go
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()) } }
## Relatar Problemas & Solicitações de Funcionalidades
Para manter o rastreamento de problemas e melhorar a eficiência da triagem:
**Todos os relatórios começam como [Discussões no GitHub](https://github.com/projectdiscovery/katana/discussions)**
- **Relatórios de Bugs** → [Iniciar uma Discussão de Perguntas e Respostas](https://github.com/projectdiscovery/katana/discussions/new?category=q-a)
- **Solicitações de Funcionalidades** → [Iniciar uma Discussão de Ideias](https://github.com/projectdiscovery/katana/discussions/new?category=ideas)
- **Perguntas** → [Iniciar uma Discussão de Perguntas e Respostas](https://github.com/projectdiscovery/katana/discussions/new?category=q-a)
**Por que Discussões Primeiro?**
- **A comunidade pode ajudar** com perguntas rápidas e solução de problemas
- **Melhor triagem** - bugs/funcionalidades confirmados se tornam problemas rastreados
- **Rastreador de problemas mais limpo** - foco apenas em itens acionáveis
Os mantenedores converterão discussões em problemas quando apropriado, após revisão adequada.
--------
<div align="center">
katana é feito com ❤️ pela equipe [projectdiscovery](https://projectdiscovery.io) e distribuído sob [Licença MIT](https://github.com/projectdiscovery/katana/blob/HEAD/LICENSE.md).
<a href="https://discord.gg/projectdiscovery"><img src="https://assets.kitploit.com/production/public/readmes/5826/d0624f94cb9ea6401be5a089bb694bc963c47fa82aa3b758c893e3b0bbfdf663.png" width="300" alt="Join Discord"></a>
</div>