
Uno scanner di host virtuali che esegue ricerche inverse, può essere usato con strumenti di pivot, rileva scenari catch-all, aggira wildcard, alias e pagine predefinite dinamiche.
Uno scanner di host virtuali che può essere utilizzato con strumenti pivot, rileva scenari catch-all, alias e pagine dinamiche predefinite. Presentato per la prima volta a SecTalks BNE a settembre 2017 (slide).
Questa è una versione migliorata del VHostScan originale di Codingo con miglioramenti aggiuntivi, codebase modernizzato e wordlist ampliate per una migliore scoperta di host virtuali.
Quindi esegui l'applicazione `docker run --rm -it vhostscan -t´
VHostScan richiede Python 3.8 o superiore. Installa usando:
$ pip install VHostScan
Oppure installa dal sorgente:
$ git clone https://github.com/codingo/VHostScan.git
$ cd VHostScan
$ pip install .
Per sviluppo:
$ pip install -e .
Le dipendenze verranno quindi installate e VHostScan verrà aggiunto al tuo percorso.
Nota che molti di questi esempi fanno riferimento a 10.10.10.29. Questo IP si riferisce a BANK.HTB, una macchina target ritirata da HackTheBox (https://www.hackthebox.eu/).
L'esempio più semplice esegue la wordlist predefinita contro example.com usando la porta predefinita 80:
$ VHostScan -t example.com
Se la tua connessione richiede SSL, puoi usare:
$ VHostScan -t example.com --ssl

Supponiamo di avere un port forwarding SSH in ascolto sulla porta 4444 che inoltra il traffico alla porta 80 della macchina di sviluppo di example.com. Potresti usare il seguente comando per far connettere VHostScan attraverso il tuo tunnel SSH tramite localhost:4444 ma formattare le intestazioni delle richieste per adattarsi alla connessione diretta alla porta 80:
$ VHostScan -t localhost -b example.com -p 4444 -r 80
VHostScan supporta il piping da altre applicazioni e tratterà le informazioni passate a VHostScan come dati di wordlist, ad esempio:
$ cat bank.htb | VHostScan -t 10.10.10.29

Puoi comunque specificare una wordlist da usare insieme a stdin. In questi casi, le informazioni della wordlist verranno aggiunte a stdin. Ad esempio:
$ echo -e 'a.example.com\b.example.com' | VHostScan -t localhost -w ./wordlists/wordlist.txt
Ecco un esempio con la logica fuzzy abilitata. Puoi vedere che l'ultimo confronto è molto più simile dei primi due (confronta il contenuto, non gli hash effettivi):
VHostScan ora include diverse wordlist specializzate per diversi scenari. Le wordlist originali sono state create da Codingo basate sull'esperienza di penetration testing nel mondo reale, e questa versione potenziata include wordlist specializzate aggiuntive per infrastrutture moderne.
Per informazioni dettagliate su ogni wordlist, consulta WORDLISTS.md.
Usa la wordlist pentest-focused per valutazioni di sicurezza:
$ VHostScan -t target.com -w ./wordlists/pentest-focused.txt
Combina più wordlist per una scansione completa:
$ VHostScan -t target.com -w "./wordlists/common-vhosts.txt,./wordlists/cloud-modern.txt"
Usa la wordlist cloud-focused per infrastrutture moderne:
$ VHostScan -t example.com -w ./wordlists/cloud-modern.txt --ssl
Questo progetto include una piccola batteria di test. È molto semplice eseguire i test:
pip install -r test-requirements.txt
python3 setup.py test
Se stai pensando di aggiungere una nuova funzionalità al progetto, considera di contribuire anche con un paio di test. Un codebase ben testato è un codebase sano. :)
Questa versione potenziata include:
VHostScan è stato originariamente creato da Codingo e presentato per la prima volta a SecTalks BNE a settembre 2017. Questa versione potenziata si basa su quell'eccellente fondazione con ulteriori miglioramenti per il penetration testing moderno e la caccia ai bug bounty.
| Argomento | Descrizione |
|---|
| -h, --help | Mostra il messaggio di aiuto ed esce |
| -t TARGET_HOSTS | Imposta l'host di destinazione. |
| -b BASE_HOST | Imposta l'host da utilizzare durante la sostituzione nella wordlist (default a TARGET). |
| -w WORDLISTS | Imposta la/e wordlist da usare. Puoi specificare più wordlist in formato delimitato da virgole (es. -w "./wordlists/simple.txt, ./wordlists/hackthebox.txt" (default ./wordlists/virtual-host-scanning.txt). Wordlist disponibili: simple.txt, hackthebox.txt, common-vhosts.txt, pentest-focused.txt, cloud-modern.txt, virtual-host-scanning.txt. |
| -p PORT | Imposta la porta da usare (default 80). |
| -r REAL_PORT | La porta reale del server web da usare nelle intestazioni quando non è 80 (vedi RFC2616 14.23), utile durante il pivot attraverso ssh/nc ecc (default a PORT). |
| --ignore-http-codes IGNORE_HTTP_CODES | Elenco separato da virgole di codici http da ignorare nelle scansioni di host virtuali (default 404). |
| --ignore-content-length IGNORE_CONTENT_LENGTH | Ignora lunghezze di contenuti di una quantità specificata. |
| --prefix PREFIX | Aggiunge un prefisso a ogni elemento nella wordlist, per aggiungere dev-<parola>, test-<parola> ecc |
| --suffix SUFFIX | Aggiunge un suffisso a ogni elemento nella wordlist, per aggiungere <parola>dev, <parola>test |
| --first-hit | Restituisce il primo risultato positivo. Usa solo in scenari in cui sei sicuro che non sia configurato alcun catch-all (come in un CTF). |
| --unique-depth UNIQUE_DEPTH | Mostra corrispondenze probabili di contenuti di pagina trovati x volte (default 1). |
| --ssl | Se impostato, le connessioni verranno effettuate tramite HTTPS invece di HTTP. |
| --fuzzy-logic | Se impostato, tutte le risposte con contenuto unico vengono confrontate e viene fornito un rapporto di somiglianza per ogni coppia. Questo aiuta a isolare vhost in situazioni in cui una pagina predefinita non è statica (ad esempio quando mostra l'ora). |
| --no-lookups | Disabilita i reverse lookup (identifica nuovi target e li aggiunge alla wordlist, attivo per default). |
| --rate-limit | Quantità di tempo in secondi da attendere tra ogni scansione (default 0). |
| --random-agent | Se impostato, ogni scansione utilizzerà un user-agent casuale da un elenco predefinito. |
| --user-agent | Specifica un user agent da usare nelle scansioni. |
| --waf | Se impostato, verranno inviate semplici intestazioni per bypassare WAF. |
| -oN OUTPUT_NORMAL | Output normale stampato su file quando si specifica l'opzione -oN con un nome file. |
| -oG OUTPUT_GREPABLE | Output greppabile stampato su file quando si specifica -oG con un nome file. |
| -oJ OUTPUT_JSON | Output JSON stampato su file quando si specifica l'opzione -oJ con un nome file. |
| -v VERBOSE | Aumenta l'output dello strumento per mostrare l'avanzamento |