Skip to content
KitploitKITPLOIT
FerramentasBlog
Enviar
FerramentasBlog
Enviar

Ferramentas de Hacking, PenTest e Cibersegurança para o seu Arsenal de Segurança!

Kitploit é um diretório de ferramentas de hacking, cibersegurança e pentesting. Descubra as últimas atualizações de projetos para encontrar vulnerabilidades, analisar sistemas, automatizar testes e fortalecer sua segurança.

··Feeds·Contato·Privacidade·© 2026 Kitploit

Diretório de Ferramentas

Categorias

Ver todas as categorias
Loading categories
xnLinkFinder — Uma ferramenta Python usada para descobrir endpoints, parâmetros potenciais, uma wordlist específica para um dado alvo e segredos. | Kitploit
Ferramentas/GitHubGitHub/xnl-h4ck3r/xnlinkfinder
ReconhecimentoColeta de InformaçõesSegurança WebTestes de PenetraçãoDetecção de SegredosRastreador
GitHubxnl-h4ck3r/xnlinkfinder

xnLinkFinder

Uma ferramenta Python usada para descobrir endpoints, parâmetros potenciais, uma wordlist específica para um dado alvo e segredos.

Ver Repositório
1.6k186há 5 mesesRevisado pelo Kitploit

Mais Populares

Ver todos →

Descubra as ferramentas mais usadas pela nossa comunidade.

Explore todas as ferramentas

Navegue pela nossa coleção de ferramentas

Ver todas as ferramentas →
Compartilhar

Sobre - v8.2

Esta é uma ferramenta usada para descobrir endpoints, descobrir parâmetros potenciais, gerar uma wordlist específica para o alvo e encontrar segredos para um determinado alvo. Ela pode encontrá-los por:

  • crawling de um alvo (passar um domínio/URL)
  • crawling de múltiplos alvos (passar um arquivo de domínios/URLs)
  • pesquisar arquivos em um determinado diretório (passar um nome de diretório)
  • pesquisar o conteúdo de um único arquivo
  • obtê-los de um projeto Burp (passar a localização de um arquivo XML do Burp)
  • obtê-los de um projeto ZAP (passar a localização de um arquivo de mensagem ASCII do ZAP)
  • obtê-los de um projeto Caido (passar a localização de um arquivo CSV de exportação do Caido)
  • obtê-los de um arquivo HAR (HTTP Archive) (passar a localização de um arquivo JSON do HAR)
  • processar um diretório de resultados do waymore (pesquisar arquivos de resposta arquivados de waymore -mode R e também solicitar URLs de waymore.txt e as URLs originais de waymore_index.txt - veja waymore README.md)

O script python é baseado nas capacidades de descoberta de links da minha extensão Burp GAP. Como ponto de partida, peguei a incrível ferramenta LinkFinder de Gerben Javado, e usei a Regex para encontrar links, mas com melhorias adicionais para encontrar ainda mais.

Instalação

xnLinkFinder suporta Python 3.

Instale xnLinkFinder no ambiente python padrão (global).```bash pip install xnLinkFinder

root@kitploit:~
OU```bash
pip install git+https://github.com/xnl-h4ck3r/xnLinkFinder.git -v

Você pode atualizar com```bash pip install --upgrade xnLinkFinder

root@kitploit:~
### pipx

Configuração rápida em ambiente python isolado usando [pipx](https://pypa.github.io/pipx/)```bash
pipx install git+https://github.com/xnl-h4ck3r/xnLinkFinder.git

NOTA: Para extrair links de arquivos PDF, você pode instalar o pdftotext no seu sistema. Você pode instalá-lo usando sudo apt install -y poppler-utils no Linux ou brew install poppler no macOS. Se você não tiver o pdftotext instalado, o xnLinkFinder recorrerá ao uso da biblioteca Python pypdf. Se nenhum texto for encontrado (por exemplo, em PDFs escaneados), ele tentará usar o ocrmypdf se estiver instalado (por exemplo, sudo apt install -y ocrmypdf). Usar pdftotext e ocrmypdf geralmente fornecerá resultados muito melhores do que apenas pypdf.

Usage| Arg | Long Arg | Descrição |

| ----------- | -------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | | -i | --input | Insira: um URL, arquivo de texto com URLs, um diretório de arquivos para pesquisar, um arquivo de saída do Burp XML, um arquivo de saída do ZAP, um arquivo CSV do Caido, um arquivo JSON do HAR, ou um único arquivo para pesquisar conteúdos. | | -o | --output | O arquivo para salvar a saída dos Links, incluindo o caminho se necessário (padrão: output.txt). Se definido como cli, a saída é escrita apenas no STDOUT. Se o arquivo já existir, será apenas anexado (e desduplicado) a menos que a opção -ow seja passada. | | -op | --output-params | O arquivo para salvar a saída de Parâmetros Potenciais, incluindo o caminho se necessário (padrão: parameters.txt). Se definido como cli, a saída é escrita apenas no STDOUT (mas não canalizada para outro programa). Se o arquivo já existir, será apenas anexado (e desduplicado) a menos que a opção -ow seja passada. | | -owl | --output-wordlist | O arquivo para salvar a saída da Wordlist específica do alvo, incluindo o caminho se necessário (padrão: Nenhuma saída de wordlist). Se definido como cli, a saída é escrita apenas no STDOUT (mas não canalizada para outro programa). Se o arquivo já existir, será apenas anexado (e desduplicado) a menos que a opção -ow seja passada. | | -oo | --output-oos | O arquivo para salvar a saída de links fora do escopo, incluindo o caminho se necessário (padrão: Nenhuma saída OOS). Se definido como , a saída é escrita apenas no STDOUT (mas não canalizada para outro programa). Se o arquivo já existir, será apenas anexado (e desduplicado) a menos que a opção -ow seja passada. | | -os | --output-secrets | O arquivo para salvar quaisquer segredos encontrados nas respostas (formato JSON), incluindo o caminho se necessário (padrão: Nenhuma saída de segredos). Se o arquivo já existir, os segredos serão mesclados a menos que a opção -ow seja passada. Os segredos são agrupados por tipo e valor com uma matriz de fontes onde cada um foi encontrado. | | -ow | --output-overwrite | Se o arquivo de saída já existir, ele será sobrescrito em vez de ser anexado. | | -sp | --scope-prefix | Quaisquer links encontrados começando com receberão como prefixo os domínios do escopo na saída, em vez do link original. Se o valor passado for um nome de arquivo válido, esse arquivo será usado; caso contrário, o literal de string será usado. | | -spo | --scope-prefix-original | Se o argumento for passado, isso determina se o link original começando com também é incluído na saída (padrão: false) | | -spkf | --scope-prefix-keep-failed | Se o argumento for passado, isso determina se um link com prefixo será mantido na saída se foi um 404 ou ocorreu uma RequestException (padrão: false) | | -sf | --scope-filter | Filtrará os links de saída para incluir apenas aqueles cujo domínio do link está no escopo especificado. Se o valor passado for um nome de arquivo válido, esse arquivo será usado; caso contrário, o literal de string será usado. Este argumento agora é obrigatório se a entrada for um domínio/URL (ou arquivo de domínios/URLs) para evitar crawling em sites fora do escopo e também prevenir resultados enganosos. | | -c | --cookies † | Adicione cookies para passar com as requisições HTTP. Passe no formato | | -H | --headers † | Adicione cabeçalhos personalizados para passar com as requisições HTTP. Passe no formato | | -ra | --regex-after | Regex para fins de filtragem de endpoints encontrados antes da saída (ex.: ). Se corresponder, o link é emitido. | | -d | --depth † | O nível de profundidade para pesquisar. Por exemplo, se um valor de 2 for passado, todos os links inicialmente encontrados serão então pesquisados por mais links (padrão: 1). Esta opção é ignorada para arquivos Burp, arquivos ZAP, arquivos Caido e arquivos HAR porque podem ser enormes e consumir muita memória. Também é aconselhável usar o argumento () para garantir que uma requisição a links encontrados sem um domínio possa ser tentada. | | -p | --processes † | Multithreading básico é feito ao obter requisições para um URL, ou arquivo de URLs (não um arquivo Burp, arquivo ZAP, arquivo Caido ou arquivo HAR). Este argumento determina o número de processos (threads) utilizados (padrão: 25) | | -rl | --rate-limit † | Número máximo de requisições para enviar por segundo (padrão: 0, sem limitação de taxa). Isso ajuda a evitar sobrecarregar o servidor alvo. | | -x | --exclude | Exclusões adicionais de links (à lista em ) em uma lista separada por vírgulas, ex.: | | -orig | --origin | Se você quer que a origem do link esteja na saída. Exibido como na saída (padrão: false) | | -prefixed | | Se você quer ver quais links foram prefixados na saída. Exibe após o link e a origem na saída (padrão: false) | | -xrel | --exclude-relative-links | Por padrão, se quaisquer links nos resultados começarem com ou , eles serão incluídos. Se este argumento for usado, esses links relativos não serão adicionados. | | -t | --timeout † | Quantos segundos esperar para que o servidor envie dados antes de desistir (padrão: 10 segundos) | | -r | --retries † | O número de vezes para repetir uma requisição após uma falha (ex.: timeout, erro de conexão, etc). Isso é limitado a 5 repetições (padrão: 0) | | -inc | --include | Incluir links de entrada () na saída (padrão: false) | | -u | --user-agent † | Quais User Agents obter links, ex.: . Os valores possíveis são , , e . Também existem , e que são subconjuntos de mas podem ser usados separadamente. | | -uc | --user-agent-custom † | Uma string de User Agent personalizada para usar em todas as requisições. Isso substituirá o argumento /. Pode ser usado quando um programa requer um cabeçalho User Agent específico para identificar você, por exemplo. | | -insecure | † | Se as verificações de certificado TLS devem ser desabilitadas ao fazer requisições (padrão: false) | | -s429 | † | Parar quando > 95 por cento das respostas retornarem 429 Too Many Requests (padrão: false) | | -s403 | † | Parar quando > 95 por cento das respostas retornarem 403 Forbidden (padrão: false) | | -sTO | † | Parar quando > 95 por cento das requisições expirarem (padrão: false) | | -sCE | † | Parar quando > 95 por cento das requisições tiverem erros de conexão (padrão: false) | | -m | --memory-threshold | A porcentagem de limite de memória. Se a memória da máquina ultrapassar o limite, o programa será interrompido e finalizado de forma graciosa antes de ficar sem memória (padrão: 95) | | -mfs | --max-file-size † | O tamanho máximo do arquivo (em bytes) de um arquivo a ser verificado se -i for um diretório. Se o tamanho do arquivo exceder, será ignorado (padrão: 500 MB). Definir como 0 significa que nenhum arquivo será ignorado, independentemente do tamanho. | | -mrs | --max-response-size † | O tamanho máximo da resposta (em MB) para baixar. Respostas maiores que isso serão ignoradas (padrão: 100 MB). | | -fp | --forward-proxy † | Para descoberta ativa de links com URL (ou arquivo de URLs), repita as requisições através de um proxy como Burp ou Caido, ex.: . | | -rp | --request-proxy | Proxy de requisição a ser usado. Pode ser uma string de proxy (ex.: , ) ou um arquivo contendo uma lista de proxies (um por linha, seleção aleatória). | | | --heap | Se deve tirar uma captura de heap dos URLs visitados e extrair links da memória do navegador. Isso levará mais tempo, mas pode descobrir links gerados dinamicamente que a análise estática padrão pode perder (Requer Playwright instalado). | | -ro | --readable-only | Se passado, apenas texto legível por humanos será extraído de respostas/arquivos HTML usando BeautifulSoup antes de procurar links. Isso exclui conteúdo de tags , , e . | | -ascii-only | | Se links e parâmetros só serão adicionados se contiverem apenas caracteres ASCII. Isso pode ser útil quando você sabe que o alvo provavelmente usa caracteres ASCII e também recebe um número de falsos positivos de arquivos binários por algum motivo. | | -mtl | --max-time-limit | O limite máximo de tempo (em minutos) para executar antes de parar (padrão: 0). Se 0 for passado, não há limite. | | | --config | Caminho para o arquivo de configuração YML. Se não for passado, procura pelo arquivo no diretório padrão, tipicamente . | | -nwlpl | --no-wordlist-plurals | Quando palavras são encontradas para uma wordlist específica do alvo, por padrão novas palavras são adicionadas se houver uma palavra singular de uma plural, e vice-versa. Se este argumento for usado, este processo não é realizado. | | -nwlpw | --no-wordlist-pathwords | Por padrão, quaisquer palavras de caminho encontradas nos links serão processadas para a wordlist específica do alvo. Se este argumento for usado, elas não serão processadas. | | -nwlpm | --no-wordlist-parameters | Por padrão, quaisquer parâmetros encontrados nos links serão processados para a wordlist específica do alvo. Se este argumento for usado, eles não serão processados. | | -nwlc | --no-wordlist-comments | Por padrão, quaisquer comentários em páginas serão processados para a wordlist específica do alvo. Se este argumento for usado, eles não serão processados. | | -nwlia | --no-wordlist-imgalt | Por padrão, quaisquer atributos 'alt' de imagem serão processados para a wordlist específica do alvo. Se este argumento for usado, eles não serão processados. | | -nwld | --no-wordlist-digits | Excluir quaisquer palavras da wordlist específica do alvo que contenham dígitos numéricos. | | -nwll | --no-wordlist-lowercase | Por padrão, qualquer palavra adicionada com caracteres maiúsculos também adicionará a palavra em minúsculas. Se este argumento for usado, as palavras em minúsculas não serão adicionadas. | | -wlml | --wordlist-maxlen | O comprimento máximo de palavras a adicionar à wordlist específica do alvo, excluindo plurais (padrão: 0 - sem limite) | | -swf | --stopwords-file | Um arquivo de Stop Words adicionais (além de "stopWords" no arquivo de configuração YML) usado para excluir palavras da wordlist específica do alvo. Stop Words são usadas em Processamento de Linguagem Natural e listas diferentes podem ser encontradas em diferentes bibliotecas. Você pode querer adicionar palavras em diferentes idiomas, dependendo do seu alvo. | | -brt | --burpfile-remove-tags | Quando a entrada passada com é um arquivo Burp, o usuário é perguntado interativamente se deseja remover tags desnecessárias desse arquivo (às vezes há um problema em arquivos XML do Burp que pode ser resolvido removendo tags desnecessárias, o que também tornará o arquivo menor). Se você está usando o xnLinkFinder em um script, não deseja interromper para entrada do usuário, então pode definir isso passando este argumento com ou . NOTA: Esta é uma alteração permanente no arquivo | | -all | --all-tlds | Todos os links encontrados serão retornados, mesmo que o TLD não seja comum. Isso pode resultar em vários falsos positivos onde nomes de variáveis, etc., também podem ser um possível domínio genuíno. Por padrão, apenas links que têm um TLD nos TLDs comuns ( em ) serão retornados. | | -cl | --content-length | Mostrar o Content-Length da resposta ao fazer crawling. | | -nb | --no-banner | Oculta o banner da ferramenta. | | -v | --verbose | Saída verbosa | | -vv | --vverbose | Saída muito verbosa | | | --version | Mostrar o número da versão atual. | | -h | --help | Mostrar a mensagem de ajuda e sair |† NÃO RELEVANTE PARA ENTRADA DE DIRETÓRIO, ARQUIVO XML DO BURP, ARQUIVO ZAP, ARQUIVO CSV DO CAIDO OU ARQUIVO HAR

config.yml

O arquivo config.yml (normalmente em ~/.config/xnLinkFinder/) possui as chaves que podem ser atualizadas conforme sua necessidade:

  • linkExclude - Uma lista separada por vírgulas de strings (ex.: .css,.jpg,.jpeg etc.) que todas as ligações são verificadas. Se uma ligação incluir qualquer uma das strings, ela será excluída da saída. Se a entrada for um diretório, os nomes dos arquivos são verificados contra esta lista.
  • contentExclude - Uma lista separada por vírgulas de strings (ex.: text/css,image/jpeg,image/jpg etc.) que todos os cabeçalhos Content-Type das respostas são verificados. Quaisquer respostas com esses tipos de conteúdo serão excluídas e não serão verificadas em busca de links.
  • fileExtExclude - Uma lista separada por vírgulas de strings (ex.: .zip,.gz,.tar etc.) que todos os arquivos no modo Diretório são verificados. Se um arquivo tiver uma dessas extensões, ele não será pesquisado por links. Além disso, no modo normal, se uma resposta não tiver um tipo de conteúdo para verificar exclusões, ela verificará essas extensões no final da URL para determinar se deve pesquisar por links.
  • regexFiles - Uma lista de tipos de arquivo separados por um caractere pipe (ex.: php|php3|php5 etc.). Eles são usados na Expressão Regular de Localização de Links quando há descobertas que não são links óbvios, mas são tipos de arquivo interessantes que você deseja capturar. Se você adicionar a esta lista, certifique-se de escapar quaisquer pontos para garantir a regex correta, ex.:

† SE ESTES NÃO FOREM ENCONTRADOS NO ARQUIVO DE CONFIGURAÇÃO, ELES PADRÃO PARA True

Exemplos

Encontrar Links de um alvo específico - Básico```

xnLinkFinder -i target.com -sf target.com

root@kitploit:~
### Encontrar Links de um alvo específico - Detalhado

Idealmente, forneça um prefixo de escopo (`-sp`) com o domínio principal (incluindo esquema) e um filtro de escopo (`-sf`) para filtrar os resultados apenas para domínios relevantes (pode ser um arquivo ou domínios no escopo). Além disso, você pode passar cookies e cabeçalhos personalizados para garantir que encontre links disponíveis apenas para usuários autorizados.
Especificar o User Agent (`-u desktop mobile`) primeiro pesquisará todos os links usando User Agents de desktop e, em seguida, tentará novamente usando user agents móveis. Pode haver endpoints específicos relacionados ao user agent fornecido. Fornecer um valor de profundidade (`-d`) continuará enviando requisições para links encontrados na pesquisa de profundidade anterior para encontrar mais links.```
xnLinkFinder -i target.com -sp target_prefix.txt -sf target_scope.txt -spo -inc -vv -H 'Authorization: Bearer XXXXXXXXXXXXXX' -c 'SessionId=MYSESSIONID' -u desktop mobile -d 10

Encontrar Links de uma lista de URLs - Básico

Se você tiver um arquivo de URLs de arquivos JS, por exemplo, você pode procurar links neles:``` xnLinkFinder -i target_js.txt -sf target.com

root@kitploit:~
NOTA: Assume-se que um arquivo passado é uma lista de URLs se a primeira linha começar com `//` ou `http` ou se for um formato de domínio (ex.: `example.com`, `sub.example.co.uk`), caso contrário é considerado um arquivo para pesquisar o conteúdo (a menos que seja um arquivo Burp, Zap, Caido ou HAR).

### Encontrar Links a partir do conteúdo de um arquivo - Básico

Se você tem uma resposta salva, por exemplo, pode procurar links nela:```
xnLinkFinder -i response.txt -sf target.com

NOTA: Um arquivo passado é assumido como uma lista de URLs se a primeira linha começar com // ou http ou for um formato de domínio (ex.: example.com, sub.example.co.uk); caso contrário, é considerado um arquivo para pesquisar o conteúdo (a menos que seja um arquivo Burp, Zap, Caido ou HAR).

Encontrar Links a partir de arquivos em um diretório - Básico

Se você tem arquivos, por exemplo, arquivos JS, respostas HTTP, etc., você pode procurar links neles:``` xnLinkFinder -i ~/.config/waymore/results/target.com

root@kitploit:~
NOTA: Subdiretórios também são verificados. A opção `-mfs` pode ser especificada para ignorar arquivos acima de um determinado tamanho.

### Encontrar Links de um projeto Burp - Básico

No Burp, selecione os itens que deseja pesquisar destacando o escopo, por exemplo, clicando com o botão direito e selecionando `Save selected items`. Certifique-se de que a opção `base64-encode requests and responses` está marcada antes de salvar.
Para obter todos os links do arquivo (mesmo com arquivos ENORMES, você conseguirá obter todos os links):```
xnLinkFinder -i target_burp.xml

NOTA: O xnLinkFinder presume que, se a primeira linha do arquivo passado com -i começar com <?xml, então você está tentando processar um arquivo do Burp.

Encontrar Links de um projeto Burp - Detalhado

Idealmente, forneça o prefixo de escopo (-sp) com o domínio principal (incluindo esquema) e um filtro de escopo (-sf) para filtrar os resultados apenas para domínios relevantes.``` xnLinkFinder -i target_burp.xml -o target_burp.txt -sp https://www.target.com -sf target.* -ow -spo -inc -vv

root@kitploit:~
### Encontrar Links de um projeto ZAP - Básico

No ZAP, selecione os itens que deseja pesquisar destacando o Histórico, por exemplo, clicando no menu `Export` e selecionando `Save Messages...` (ou `Export Messages to File...` em versões mais antigas). Isso permitirá salvar um arquivo de texto ASCII de todas as solicitações e respostas que deseja pesquisar.
Para obter todos os links do arquivo (mesmo com arquivos ENORMES, você conseguirá obter todos os links):```
xnLinkFinder -i target_zap.txt

NOTA: xnLinkFinder supõe que se a primeira linha do arquivo passado com -i estiver no formato ==== 99 ========== ou ===99 ==========, por exemplo, então você está tentando processar um arquivo de texto ASCII do ZAP.

Encontrar Links de um arquivo CSV de exportação do Cadio - Básico

No Caido, vá até a seção History e selecione a opção Export.

Se você estiver usando a edição Caido Pro ou Enterprise, escolha a opção Export current rows e selecione As CSV. Vá para a seção Exports e baixe o arquivo CSV. Então passe como entrada:``` xnLinkFinder -i 2023-03-18-010332_csv_requests.csv

root@kitploit:~
Se você está usando a edição Caido Community, então terá que escolher a opção **Export all** e selecionar **As CSV**. Vá para a seção **Exports** e baixe o arquivo CSV. Como você tem o histórico completo, vai querer remover tudo que não for relevante do arquivo CSV. Use o exemplo abaixo, onde `redbull` é a parte principal dos domínios do alvo que você está analisando.```
cat 2023-03-18-010332_csv_requests.csv | grep -E '^id|^[0-9]+,[^,]*redbull' > caido_redbull.csv
xnLinkFinder -i caido_redbull.csv

NOTA: O xnLinkFinder assume que, se a primeira linha do arquivo passado com -i estiver no formato id,host,method, então você está tentando processar um arquivo CSV de exportação do Caido.

Encontrar Links a partir de um arquivo JSON HAR (HTTP Archive) - Básico

Um arquivo HAR é um arquivo JSON que contém uma lista de requisições e respostas HTTP. É um formato comum para armazenar tráfego HTTP. Você pode exportar um arquivo HAR da maioria dos navegadores web, geralmente na aba de Rede das Ferramentas do Desenvolvedor. Passe o arquivo como entrada:``` xnLinkFinder -i browser.har

root@kitploit:~
NOTA: xnLinkFinder assume que se o nome do arquivo terminar com `.har` OU a primeira linha do arquivo contém `"log"` e começa com `{`, então você está tentando processar um arquivo HAR.

### Encontrar Links a partir de um diretório de resultados do Waymore

A ferramenta [waymore](https://github.com/xnl-h4ck3r/waymore) pode ser usada para obter URLs de várias APIs de terceiros, e também baixar respostas arquivadas de várias fontes. Passar um diretório de resultados do waymore para `xnLinKFinder` irá pesquisar o conteúdo das respostas arquivadas, e também solicitar URLs de `waymore.txt` e também as URLs arquivadas de `waymore_index.txt` (ou `index.txt` para versões mais antigas do `waymore`) e obter mais links dessas respostas. Se `-d`/`--depth` for zero, então as URLs de `waymore_index.txt` serão apenas retornadas, mas não solicitadas.```
xnLinkFinder -i ~/Tools/waymore/results/target.com

NOTA: É passado como um diretório normal, mas o xnLinkFinder determinará que é um diretório de resultados do waymore e processará de acordo. Isso depende da convenção de nomenclatura padrão do arquivo de URLs ser waymore.txt e esse arquivo estar no mesmo diretório dos arquivos arquivados (o que é por padrão).

Enviando para outras ferramentas

Você pode enviar xnLinkFinder para outras ferramentas. Quaisquer erros são enviados para stderr e quaisquer links encontrados são enviados para stdout. O arquivo de saída ainda é criado além dos links serem enviados para o próximo programa. No entanto, os parâmetros potenciais não são enviados para o próximo programa, mas ainda são escritos no arquivo. Por exemplo:``` xnLinkFinder -i redbull.com -sp https://redbull.com -sf rebbull.* -d 3 | unfurl keys | sort -u

root@kitploit:~
Você também pode passar a entrada através do `stdin` em vez de `-i`.```
cat redbull_subs.txt | xnLinkFinder -sp https://redbull.com -sf rebbull.* -d 3

NOTA: Não é possível usar pipe em arquivos Burp, ZAP, Caido ou HAR; estes devem ser passados usando -i.

Recomendações e Notas

  • Sempre use o argumento de Prefixo de Escopo -sp. Pode ser um único domínio de escopo, ou um arquivo contendo múltiplos domínios de escopo. Abaixo estão exemplos do formato usado (nenhum caminho deve ser incluído, e nenhum curinga usado. O schema é opcional, mas o padrão será http): ``` http://www.target.com https://target-payments.com https://static.target-cdn.com
    root@kitploit:~

Se um link for encontrado sem domínio, por exemplo /path/to/example.js, então passar -sp http://www.target.com resultará na saída http://www.target.com/path/to/example.js e se a Profundidade (-d) for >1, uma solicitação poderá ser feita a essa URL para procurar mais links. Se um arquivo de domínios for passado usando -sp, a saída incluirá cada domínio seguido de /path/to/example.js e aumentará a chance de encontrar mais links.

  • Se você usar -sp mas ainda quiser que o link original de /path/to/example.js (sem um domínio) seja retornado adicionalmente na saída, passe o argumento -spo.
  • Sempre use o argumento de Filtro de Escopo -sf. Isso garantirá que apenas domínios relevantes sejam retornados na saída e, mais importante, se a Profundidade (-d) for >1, os alvos fora do escopo não serão pesquisados por links ou parâmetros. Pode ser um domínio de escopo ou um arquivo contendo vários domínios de escopo. Abaixo estão exemplos do formato usado (nenhum esquema ou caminho deve ser incluído): ``` target.* target-payments.com static.target-cdn.com
    root@kitploit:~

ISTO É APENAS PARA FILTRAR O DOMÍNIO DOS LINKS.

  • Se quiser filtrar a saída final de alguma forma, use -ra. É sempre uma boa ideia usar https://regex101.com/ para verificar se a sua expressão Regex vai fazer o que espera.
  • Use a opção -v para ter uma melhor ideia do que a ferramenta está a fazer.
  • Se tiver problemas, use a opção -vv que pode mostrar erros que estão a ocorrer, que podem ser resolvidos, ou pode reportar como um issue no github.
  • Passe os valores de cookies (-c), cabeçalhos (-H) e regex (-ra) entre aspas simples, por exemplo -ra '/api/v[0-9]\.[0-9]\*'
  • Defina a opção -o para dar um nome de ficheiro de saída específico para os Links, em vez do padrão output.txt. Se planeia executar uma grande profundidade de pesquisas, comece com 2 com a opção -v para verificar o que está a ser retornado. Depois pode aumentar a Profundidade, e a nova saída será anexada ao ficheiro existente, a menos que passe -ow.
  • Defina a opção para dar um nome de ficheiro de saída específico para Parâmetros Potenciais, em vez do padrão . Qualquer saída será anexada ao ficheiro existente, a menos que passe .

Issues

Se encontrar algum problema, ou tiver ideias para melhorias, por favor sinta-se à vontade para abrir um issue no Github. Se houver um problema, será útil se puder fornecer o comando exato que executou e uma descrição detalhada do problema. Se possível, execute com -vv para reproduzir o problema e informe-me sobre quaisquer mensagens de erro que sejam dadas.

TODO

  • Adicionar verificação regex específica para Requests quando um ficheiro de proxy é passado como entrada. Atualmente usa a mesma regex que Requests, mas isso não é ideal.
  • Obter nomes de Cookies para adicionar à lista de parâmetros potenciais.

Exemplo de saída

Encontrar links ativos para um domínio:

...

Entrada e saída por pipe:

Boa sorte e boas caçadas! Se realmente adora a ferramenta (ou qualquer outra), ou elas o ajudaram a encontrar uma recompensa fantástica, considere COMPRAR-ME UM CAFÉ! ☕ (Preciso de cafeína!)

🤘 /XNL-h4ck3r

Buy Me a Coffee at ko-fi.com

Baixar ferramenta
cli
/
-sp
/
-spkf
'name1=value1; name2=value2;'
'Header1: value1; Header2: value2;'
/api/v[0-9]\.[0-9]\*
-sp
--scope-prefix
config.yml
careers,forum
LINK-URL [ORIGIN-URL]
(PREFIXED)
./
../
-i
-u desktop mobile
desktop
mobile
set-top-boxes
game-console
mobile-apple
mobile-android
mobile-windows
mobile
-u
--user-agent
http://127.0.0.1:8080
http://user:[email protected]:8000
socks5://host:port
<script>
<style>
<noscript>
<template>
config.yml
~/.config/xnLinkFinder
NOTA: se o valor de configuração YAML respParamPathWords for True, este argumento não terá efeito a menos que -nwlpm/--no-wordlist-parameters também seja passado.
-i
true
false
commonTLDs
config.yml
js\.map
  • respParamLinksFound † - Se deve obter parâmetros potenciais de links encontrados nas respostas: True ou False
  • respParamPathWords † - Se deve adicionar palavras do caminho em links recuperados como parâmetros potenciais: True ou False
  • respParamJSON † - Se o tipo MIME da resposta contiver JSON, se deve adicionar valores de chave JSON como parâmetros potenciais: True ou False
  • respParamJSVars † - Se variáveis JavaScript definidas com var, let ou const são adicionadas como parâmetros potenciais: True ou False
  • respParamXML † - Se o tipo MIME da resposta contiver XML, se deve adicionar valores de atributos XML como parâmetros potenciais: True ou False
  • respParamInputField † - Se o tipo MIME da resposta contiver HTML ou JAVASCRIPT (porque HTML pode ser incorporado em HTML), se deve adicionar atributos NAME e ID de quaisquer campos INPUT (ou TEXTAREA/SELECT/BUTTON) como parâmetros potenciais: True ou False
  • respParamMetaName † - Se o tipo MIME da resposta contiver HTML, se deve adicionar atributos NAME de quaisquer tags META como parâmetros potenciais: True ou False
  • wordsContentTypes - Uma lista separada por vírgulas de strings (ex.: text/html,text/plain) para especificar quais tipos de conteúdo de resposta serão pesquisados por palavras para compor a wordlist específica do alvo.
  • stopWords - Uma lista separada por vírgulas de strings (ex.: then,this,that) para especificar palavras que são excluídas da wordlist específica do alvo. Esta lista padrão é inicialmente composta por determinantes, conjunções coordenativas e preposições do inglês, além de uma lista de stop words do Scikit-Learn, uma biblioteca de aprendizado de máquina em Python.
  • commonTLDs - Uma lista separada por vírgulas dos TLDs mais comuns. A menos que o argumento -all/--all-tlds seja passado, apenas links com domínios que possuem um TLD nesta lista são retornados.
  • -op
    parameters.txt
    -ow
  • Se usar uma Profundidade (-d) alta, tenha cuidado com alguns sites que usam links dinâmicos, pois continuará a encontrar novos. Se não estiverem a ser encontrados novos links, o xnLinkFinder irá parar a pesquisa. Também deve considerar fornecer as flags de Paragem (s429, s403, sTO, sCE).
  • Se estiver a encontrar um grande número de links, especialmente se a Profundidade (valor -d) for alta, e tiver recursos limitados, o programa irá parar quando atingir o valor limite de memória (-m) e terminará de forma graciosa com os dados intactos antes de ser encerrado à força.
  • Se decidir cancelar o xnLinkFinder (usando Ctrl-C) a meio da execução, seja paciente e quaisquer dados recolhidos serão guardados antes de terminar de forma graciosa.
  • Usar a opção -orig mostrará o URL onde o link foi encontrado. Isto pode significar que tenha links duplicados na saída se o mesmo link foi encontrado em múltiplas fontes, mas será sufixado com o URL de origem entre parênteses retos.
  • Ao fazer pedidos, o xnLinkFinder usará um User-Agent aleatório do grupo atual, que por defeito é desktop (a menos que o argumento -uc/--user-agent-custom seja usado). Se tiver um alvo que possa ter links diferentes para diferentes grupos de user agent, especifique -u desktop mobile por exemplo (separe com um espaço). A opção mobile de user agent é uma combinação de mobile-apple, mobile-android e mobile-windows. Os valores possíveis são desktop, mobile, set-top-boxes e game-console.
  • Quando -i é definido para um diretório, o conteúdo dos ficheiros na raiz desse diretório será pesquisado por links. Ficheiros em subdiretórios não são pesquisados. Quaisquer ficheiros que excedam o tamanho definido por -mfs (padrão: 500 MB) serão ignorados.
  • Ao usar a opção -replay-proxy, por vezes os pedidos podem demorar mais. Se começar a ver mais erros de Request Timeout (verá erros se usar as opções -v ou -vv) então considere usar -t para aumentar o limite de timeout.
  • Se souber que um alvo terá apenas caracteres ASCII em links e parâmetros, então considere passar -ascii-only. Isto pode eliminar vários falsos positivos que por vezes são retornados de dados binários.
  • Se passar um diretório de resultados do waymore, vale a pena passar o argumento -d/--depth para pesquisar quaisquer links extras encontrados a partir de pedidos de URL e também o -u/--user-agent se achar que pode haver conteúdo diferente encontrado, por exemplo -u desktop mobile.
  • Passe sempre o nome do ficheiro -owl/--output-wordlist para guardar a wordlist específica do alvo. Esta lista pode ser muito útil ao fazer fuzzing num alvo.
  • As palavras para a wordlist específica do alvo são retiradas das seguintes fontes (qualquer uma com 3 ou mais caracteres), mas também são determinadas pelos outros argumentos da wordlist (veja a secção de Uso acima):
    • Todas as respostas com certas condições:
      • Apenas são pesquisadas respostas com tipos de conteúdo específicos definidos na secção wordsContentTypes do YML config. Os padrões são text/html,application/xml,application/json,text/plain
      • Palavras do conteúdo da tag <meta> onde:
        • Property é og:title ou og:description
        • Name é description,keywords,twitter:title ou twitter:description
      • Palavras de comentários HTML
      • Palavras do atributo alt de tags ``
      • Palavras do resto do HTML interior da página, excluindo tags <style>, <script> e <link>
    • Palavras encontradas a partir de palavras de caminho em links encontrados.
    • Parâmetros encontrados a partir de respostas e links.
    • Todas as palavras válidas terão também a versão singular/plural adicionada à wordlist, se possível.
    • Se a palavra original tiver caracteres maiúsculos, uma versão em minúsculas também será adicionada
  • Se as "Stop Words" padrão para uma wordlist específica do alvo não forem suficientemente boas, altere no ficheiro de configuração YML, ou forneça palavras de paragem adicionais usando a opção -swf/--stopwords-file. Pode querer incluir stop words noutro idioma, dependendo do alvo. Stop words são usadas em Processamento de Linguagem Natural (NLP) e muitas listas de stop words podem ser encontradas online para diferentes necessidades.