
Un escáner de hosts virtuales que realiza búsquedas inversas, puede usarse con herramientas de pivote, detecta escenarios de captura total, sortea comodines, alias y páginas predeterminadas dinámicas.
Un escáner de hosts virtuales que puede usarse con herramientas de pivote, detectar escenarios de catch-all, alias y páginas predeterminadas dinámicas. Presentado por primera vez en SecTalks BNE en septiembre de 2017 (presentación).
Esta es una versión mejorada del VHostScan original de Codingo con mejoras adicionales, una base de código modernizada y listas de palabras ampliadas para un mejor descubrimiento de hosts virtuales.
Luego ejecute la aplicación `docker run --rm -it vhostscan -t´
VHostScan requiere Python 3.8 o superior. Instálelo usando:
$ pip install VHostScan
O instale desde el código fuente:
$ git clone https://github.com/codingo/VHostScan.git
$ cd VHostScan
$ pip install .
Para desarrollo:
$ pip install -e .
Las dependencias se instalarán y VHostScan se agregará a su PATH.
Tenga en cuenta que varios de estos ejemplos hacen referencia a 10.10.10.29. Esta IP se refiere a BANK.HTB, una máquina objetivo retirada de HackTheBox (https://www.hackthebox.eu/).
El ejemplo más directo ejecuta la lista de palabras predeterminada contra example.com usando el puerto 80 por defecto:
$ VHostScan -t example.com
Si su conexión requiere SSL, puede usar:
$ VHostScan -t example.com --ssl

Supongamos que tiene un reenvío de puertos SSH escuchando en el puerto 4444 que reenvía tráfico al puerto 80 de la máquina de desarrollo de example.com. Podría usar lo siguiente para que VHostScan se conecte a través de su túnel SSH a localhost:4444 pero formatee las solicitudes de encabezado para que sean adecuadas para conectarse directamente al puerto 80:
$ VHostScan -t localhost -b example.com -p 4444 -r 80
VHostScan admite la tubería desde otras aplicaciones y tratará la información pasada a VHostScan como datos de lista de palabras, por ejemplo:
$ cat bank.htb | VHostScan -t 10.10.10.29

Aún puede especificar una lista de palabras para usar junto con stdin. En estos casos, la información de la lista de palabras se agregará a stdin. Por ejemplo:
$ echo -e 'a.example.com\b.example.com' | VHostScan -t localhost -w ./wordlists/wordlist.txt
Aquí hay un ejemplo con la lógica difusa habilitada. Puede ver que la última comparación es mucho más similar que las dos primeras (está comparando el contenido, no los hashes reales):
VHostScan ahora incluye varias listas de palabras especializadas para diferentes escenarios. Las listas de palabras originales fueron creadas por Codingo basadas en la experiencia de pruebas de penetración del mundo real, y esta versión mejorada incluye listas de palabras adicionales especializadas para infraestructura moderna.
Para obtener información detallada sobre cada lista de palabras, consulte WORDLISTS.md.
Use la lista de palabras enfocada en pruebas de penetración para evaluaciones de seguridad:
$ VHostScan -t target.com -w ./wordlists/pentest-focused.txt
Combine múltiples listas de palabras para un escaneo exhaustivo:
$ VHostScan -t target.com -w "./wordlists/common-vhosts.txt,./wordlists/cloud-modern.txt"
Use la lista de palabras enfocada en la nube para infraestructura moderna:
$ VHostScan -t example.com -w ./wordlists/cloud-modern.txt --ssl
Este proyecto incluye una pequeña batería de pruebas. Es muy sencillo ejecutar las pruebas:
pip install -r test-requirements.txt
python3 setup.py test
Si está pensando en agregar una nueva característica al proyecto, considere también contribuir con un par de pruebas. ¡Una base de código bien probada es una base de código sensata. :)
Esta versión mejorada incluye:
VHostScan fue creado originalmente por Codingo y presentado por primera vez en SecTalks BNE en septiembre de 2017. Esta versión mejorada se basa en esa excelente base con mejoras adicionales para pruebas de penetración modernas y caza de bugs.
| Argumento | Descripción |
|---|
| -h, --help | Muestra el mensaje de ayuda y sale. |
| -t TARGET_HOSTS | Establece el host objetivo. |
| -b BASE_HOST | Establece el host que se usará durante la sustitución en la lista de palabras (por defecto TARGET). |
| -w WORDLISTS | Establece la(s) lista(s) de palabras a usar. Puede especificar múltiples listas de palabras en formato separado por comas (ej. -w "./wordlists/simple.txt, ./wordlists/hackthebox.txt" (por defecto ./wordlists/virtual-host-scanning.txt). Listas disponibles: simple.txt, hackthebox.txt, common-vhosts.txt, pentest-focused.txt, cloud-modern.txt, virtual-host-scanning.txt. |
| -p PORT | Establece el puerto a usar (por defecto 80). |
| -r REAL_PORT | El puerto real del servidor web para usar en los encabezados cuando no es 80 (ver RFC2616 14.23), útil al pivotar a través de ssh/nc etc (por defecto a PORT). |
| --ignore-http-codes IGNORE_HTTP_CODES | Lista separada por comas de códigos http a ignorar en los escaneos de hosts virtuales (por defecto 404). |
| --ignore-content-length IGNORE_CONTENT_LENGTH | Ignora longitudes de contenido de una cantidad específica. |
| --prefix PREFIX | Agrega un prefijo a cada elemento de la lista de palabras, para agregar dev-<palabra>, test-<palabra> etc. |
| --suffix SUFFIX | Agrega un sufijo a cada elemento de la lista de palabras, para agregar <palabra>dev, <palabra>dev. |
| --first-hit | Devuelve el primer resultado exitoso. Úselo solo en escenarios donde esté seguro de que no hay un catch-all configurado (como un CTF). |
| --unique-depth UNIQUE_DEPTH | Muestra las coincidencias probables del contenido de la página que se encuentra x veces (por defecto 1). |
| --ssl | Si se establece, las conexiones se realizarán a través de HTTPS en lugar de HTTP. |
| --fuzzy-logic | Si se establece, todas las respuestas de contenido único se comparan y se proporciona una relación de similitud para cada par. Esto ayuda a aislar vhosts en situaciones donde una página predeterminada no es estática (como cuando tiene la hora). |
| --no-lookups | Deshabilita las consultas inversas (identifica nuevos objetivos y los agrega a la lista de palabras, activado por defecto). |
| --rate-limit | Cantidad de tiempo en segundos para retrasar entre cada escaneo (por defecto 0). |
| --random-agent | Si se establece, cada escaneo usará un user-agent aleatorio de una lista predefinida. |
| --user-agent | Especifica un user-agent a usar para los escaneos. |
| --waf | Si se establece, se enviarán encabezados simples de evasión de WAF. |
| -oN OUTPUT_NORMAL | Salida normal impresa en un archivo cuando se especifica la opción -oN con un argumento de nombre de archivo. |
| -oG OUTPUT_GREPABLE | Salida grepeable impresa en un archivo cuando se especifica -oG con un argumento de nombre de archivo. |
| -oJ OUTPUT_JSON | Salida JSON impresa en un archivo cuando se especifica la opción -oJ con un argumento de nombre de archivo. |
| -v VERBOSE | Aumenta la salida de la herramienta para mostrar el progreso. |