
Um scanner de host virtual que realiza buscas reversas, pode ser usado com ferramentas de pivô, detecta cenários catch-all, contorna curingas, aliases e páginas padrão dinâmicas.
Um scanner de hosts virtuais que pode ser usado com ferramentas de pivô, detectar cenários de catch-all, aliases e páginas padrão dinâmicas. Apresentado pela primeira vez no SecTalks BNE em setembro de 2017 (apresentação).
Esta é uma versão aprimorada do VHostScan original de Codingo, com melhorias adicionais, base de código modernizada e wordlists expandidas para melhor descoberta de hosts virtuais.
Em seguida, execute a aplicação `docker run --rm -it vhostscan -t´
O VHostScan requer Python 3.8 ou superior. Instale usando:
$ pip install VHostScan
Ou instale a partir do código fonte:
$ git clone https://github.com/codingo/VHostScan.git
$ cd VHostScan
$ pip install .
Para desenvolvimento:
$ pip install -e .
As dependências serão instaladas e o VHostScan será adicionado ao seu PATH.
Observe que vários desses exemplos referenciam 10.10.10.29. Este IP refere-se a BANK.HTB, uma máquina alvo aposentada do HackTheBox (https://www.hackthebox.eu/).
O exemplo mais direto executa a wordlist padrão contra example.com usando a porta padrão 80:
$ VHostScan -t example.com
Se sua conexão requer SSL, você pode usar:
$ VHostScan -t example.com --ssl

Digamos que você tenha um encaminhamento de porta SSH ouvindo na porta 4444 encaminhando tráfego para a porta 80 na máquina de desenvolvimento do example.com. Você poderia usar o seguinte para fazer o VHostScan conectar através do seu túnel SSH via localhost:4444 mas formatar as requisições de cabeçalho para se adequar à conexão direta à porta 80:
$ VHostScan -t localhost -b example.com -p 4444 -r 80
O VHostScan suporta pipe de outras aplicações e tratará as informações passadas ao VHostScan como dados de wordlist, por exemplo:
$ cat bank.htb | VHostScan -t 10.10.10.29

Você ainda pode especificar uma wordlist para usar junto com o stdin. Nesses casos, as informações da wordlist serão anexadas ao stdin. Por exemplo:
$ echo -e 'a.example.com\b.example.com' | VHostScan -t localhost -w ./wordlists/wordlist.txt
Aqui está um exemplo com lógica fuzzy ativada. Você pode ver que a última comparação é muito mais similar que as duas primeiras (está comparando o conteúdo, não os hashes reais):
O VHostScan agora inclui várias wordlists especializadas para diferentes cenários. As wordlists originais foram criadas por Codingo com base em experiência real em testes de penetração, e esta versão aprimorada inclui wordlists especializadas adicionais para infraestrutura moderna.
Para informações detalhadas sobre cada wordlist, consulte WORDLISTS.md.
Use a wordlist focada em pentest para avaliações de segurança:
$ VHostScan -t target.com -w ./wordlists/pentest-focused.txt
Combine várias wordlists para varredura abrangente:
$ VHostScan -t target.com -w "./wordlists/common-vhosts.txt,./wordlists/cloud-modern.txt"
Use a wordlist focada em nuvem para infraestrutura moderna:
$ VHostScan -t example.com -w ./wordlists/cloud-modern.txt --ssl
Este projeto inclui uma pequena bateria de testes. É muito simples executar os testes:
pip install -r test-requirements.txt
python3 setup.py test
Se você está pensando em adicionar um novo recurso ao projeto, considere também contribuir com alguns testes. Uma base de código bem testada é uma base de código saudável. :)
Esta versão aprimorada inclui:
O VHostScan foi originalmente criado por Codingo e apresentado pela primeira vez no SecTalks BNE em setembro de 2017. Esta versão aprimorada constrói sobre essa excelente base com melhorias adicionais para testes de penetração modernos e caça a bugs.
| Argumento | Descrição |
|---|
| -h, --help | Exibe mensagem de ajuda e sai |
| -t TARGET_HOSTS | Define o host alvo. |
| -b BASE_HOST | Define o host a ser usado durante a substituição na wordlist (padrão: TARGET). |
| -w WORDLISTS | Define a(s) wordlist(s) a usar. Você pode especificar várias wordlists em formato separado por vírgulas (ex.: -w "./wordlists/simple.txt, ./wordlists/hackthebox.txt" (padrão ./wordlists/virtual-host-scanning.txt). Wordlists disponíveis: simple.txt, hackthebox.txt, common-vhosts.txt, pentest-focused.txt, cloud-modern.txt, virtual-host-scanning.txt. |
| -p PORT | Define a porta a usar (padrão 80). |
| -r REAL_PORT | A porta real do servidor web a usar nos cabeçalhos quando não for 80 (veja RFC2616 14.23), útil ao fazer pivô via ssh/nc etc (padrão: PORT). |
| --ignore-http-codes IGNORE_HTTP_CODES | Lista separada por vírgulas de códigos HTTP a ignorar nas varreduras de host virtual (padrão 404). |
| --ignore-content-length IGNORE_CONTENT_LENGTH | Ignora comprimentos de conteúdo de valor específico. |
| --prefix PREFIX | Adiciona um prefixo a cada item na wordlist, para adicionar dev-<palavra>, test-<palavra> etc |
| --suffix SUFFIX | Adiciona um sufixo a cada item na wordlist, para adicionar <palavra>dev, <palavra>test |
| --first-hit | Retorna o primeiro resultado bem-sucedido. Use apenas em cenários onde você tem certeza que não há catch-all configurado (como um CTF). |
| --unique-depth UNIQUE_DEPTH | Mostra correspondências prováveis de conteúdo de página encontrado x vezes (padrão 1). |
| --ssl | Se definido, as conexões serão feitas via HTTPS em vez de HTTP. |
| --fuzzy-logic | Se definido, todas as respostas de conteúdo único são comparadas e uma taxa de similaridade é fornecida para cada par. Isso ajuda a isolar vhosts em situações onde uma página padrão não é estática (como ter a hora nela). |
| --no-lookups | Desabilita consultas reversas (identifica novos alvos e anexa à wordlist, ativado por padrão). |
| --rate-limit | Quantidade de tempo em segundos para atrasar entre cada varredura (padrão 0). |
| --random-agent | Se definido, cada varredura usará um user-agent aleatório de uma lista predefinida. |
| --user-agent | Especifica um user agent a ser usado nas varreduras. |
| --waf | Se definido, cabeçalhos simples de bypass de WAF serão enviados. |
| -oN OUTPUT_NORMAL | Saída normal gravada em um arquivo quando a opção -oN é especificada com um argumento de nome de arquivo. |
| -oG OUTPUT_GREPABLE | Saída grepável gravada em um arquivo quando a opção -oG é especificada com um argumento de nome de arquivo. |
| -oJ OUTPUT_JSON | Saída JSON gravada em um arquivo quando a opção -oJ é especificada com um argumento de nome de arquivo. |
| -v VERBOSE | Aumenta a saída da ferramenta para mostrar progresso |