
Ferramenta de varredura abrangente escrita em Python3, usada principalmente para verificação de sobrevivência, detecção de arquivos sensíveis (varredura de diretórios/interface de vazamento JS/vazamento de comentários HTML), identificação de WAF/CDN, varredura de portas, reconhecimento de impressão digital/serviço, identificação de sistema operacional, varredura de POC, injeção SQL, bypass de CDN, consulta de sites vizinhos, etc. Principalmente usada para autoavaliação do cliente ou testes autorizados pelo contratado. Não use para causar danos.
English | 简体中文
Ferramenta de varredura abrangente em Python3, usada principalmente para detecção de arquivos sensíveis (varredura de diretórios e vazamento de interfaces JS), identificação de WAF/CDN, varredura de portas, identificação de impressões digitais/serviços, identificação de sistema operacional, detecção de senhas fracas, varredura de POC, injeção SQL, contorno de CDN, verificação de sites vizinhos.
2019.8.19
Adicionada proibição de varrer domínios gov.cn e edu.cn; o programa detecta e termina imediatamente.
Modificada a interface de saída do programa para o formato: tempo + plugin + domínio + resultado.
Removido o plugin de injeção SQL original e adicionado um plugin de detecção de senhas fracas (Mysql, Postgresql, SSH, etc.).
Combinada a biblioteca de impressões digitais do Fofa com o WEBEYE. Regras de impressão digital: 2000+.
2019.7.19
Adicionado proxy global socks5.
Empacotado requests.
Otimizada a estrutura de diretórios.
Removido o relatório HTML original, usando o relatório HTML extraído do Perun.
Removida a saída de resultados em JSON, ajustada para armazenamento no banco de dados SQLite3, com deduplicação ao inserir; se o host alvo já existir no arquivo db durante a varredura, ele é ignorado.
Adicionado plugin de detecção de vazamento de informações comuns (phpinfo, etc.).
PDNS: interface viewdns.info adicionada.
2019.7.1
Exibe hosts cuja verificação de ping falhou.
O comando -u pode aceitar vários alvos separados por vírgulas.
Corrigido erro de reconhecimento de impressão digital.
2019.6.18
Corrigido problema de reconhecimento de impressão digital em sites IIS; modificado apps.json.
Removidas algumas bibliotecas de terceiros e scripts propensos a erros.
Se a varredura terminar rapidamente, é porque o programa primeiro realiza a verificação de resolução DNS e ping.
Ao usar Vxscan pela primeira vez, o fake_useragent carregará a lista de UA de https://fake-useragent.herokuapp.com/browsers/0.1.11 e pode ocorrer erro de timeout de carregamento.
Versão do Python > 3.6
requests
pyfiglet
fake-useragent
beautifulsoup4
tldextract
python-nmap
geoip2
lxml
pymongo
virustotal_python
dnspython
pysocks
wget https://geolite.maxmind.com/download/geoip/database/GeoLite2-City.tar.gz
Após descompactar, coloque GeoLite2-City.mmdb em vxscan/data/GeoLite2-City.mmdb
wget https://geolite.maxmind.com/download/geoip/database/GeoLite2-ASN.tar.gz
Após descompactar, coloque GeoLite2-ASN.mmdb em vxscan/data/GeoLite2-ASN.mmdb
pip3 install -r requirements.txt
python3 Vxscan.py -h
argumentos opcionais:
-h, --help mostra esta mensagem de ajuda e sai
-u URL, --url URL Inicia a varredura nesta URL -u xxx.com
-i INET, --inet INET cidr ex. 1.1.1.1 ou 1.1.1.0/24
-f FILE, --file FILE lê a URL do arquivo
1. Escanear um site
python3 vxscan.py -u http://www.xxx.com/
2. Escanear sites a partir de um arquivo
python3 vxscan.py -f hosts.txt
3. cidr ex. 127.0.0.0/24
python3 vxscan.py -i 127.0.0.0/24
├─Vxscan.py arquivo principal
├─data
│ ├─apps.json Informações de impressão digital web
│ ├─apps.txt Informações de impressão digital web (WEBEYE)
│ ├─GeoLite2-ASN.mmdb geoip
│ ├─GeoLite2-City.mmdb asn
├─doc Armazena imagens ou recursos de documento
├─report Conteúdo relacionado ao relatório HTML
├─lib
│ ├─common.py Determina CDN, varredura de portas, varredura POC, etc.
│ ├─color.py Saída colorida no terminal
│ ├─cli_output.py Saída no terminal
│ ├─active.py Verifica a resolução DNS e sobrevivência do IP via ping
│ ├─save_html.py Gera relatórios HTML
│ ├─waf.py Regras de WAF
│ ├─options.py Configurações de opções
│ ├─iscdn.py Determina se IP é CDN baseado em segmento de IP e faixa ASN
│ ├─osdetect.py Identificação de versão do SO
│ ├─random_header.py Cabeçalho personalizado
│ ├─settings.py Script de configuração
│ ├─vuln.py Chamada em lote de varredura POC
│ ├─url.py Deduplicação de conexões coletadas
│ ├─verify.py Script fornece interface de verificação
│ ├─sqldb.py Tudo relacionado ao sqlite3 está aqui
│ ├─Requests.py Biblioteca requests encapsulada com configurações personalizadas
├─script
│ ├─Poc.py Script POC
│ ├─......
├─Plugins
│ ├─ActiveReconnaissance
│ ├─active.py Verifica sobrevivência do host e valida resolução DNS
│ ├─check_waf.py Determina WAF do site
│ ├─crawk.py Coleta links do site e testa
│ ├─osdetect.py Identificação de sistema operacional
│ ├─InformationGathering
│ ├─geoip.py Pesquisa de localização
│ ├─js_leaks.py js Vazamento de informações
│ ├─PassiveReconnaissance
│ ├─ip_history.py Interface PDNS
│ ├─reverse_domain.py Consulta de sites vizinhos
│ ├─virustotal.py Consulta PDNS no VT
│ ├─wappalyzer.py Reconhecimento passivo de impressão digital CMS
│ ├─Scanning
│ ├─dir_scan Varredura de diretórios
│ ├─port_scan Varredura de portas
├─requirements.txt
├─report.py html Geração de relatório
├─logo.jpg
├─error.log
# coding=utf-8
# timeout global
TIMEOUT = 5
# Status a serem excluídos
BLOCK_CODE = [
301, 403, 308, 404, 405, 406, 408, 411, 417, 429, 493, 502, 503, 504, 999
]
# Definir threads de varredura
THREADS = 100
# Content-Type a serem excluídos
BLOCK_CONTYPE = [
'image/jpeg', 'image/gif', 'image/png', 'application/javascript',
'application/x-javascript', 'text/css', 'application/x-shockwave-flash',
'text/javascript', 'image/x-icon'
]
# Se deve ignorar a varredura de diretórios
SCANDIR = True
# Se deve iniciar o plugin POC
POC = True
# Ignorar se já existir no db de resultados
CHECK_DB = False
# página 404 inválida
PAGE_404 = [
'page_404"', "404.png", '找不到页面', '页面找不到', "Not Found", "访问的页面不存在",
"page does't exist", 'notice_404', '404 not found'
]
# ping
PING = True
# proxy socks5
# SOCKS5 = ('127.0.0.1', 1080)
SOCKS5 = ()
# shodan
SHODAN_API = ''
# VT
VIRUSTOTAL_API = ''
# cookie
COOKIE = {'Cookie': 'test'}
1. Chamar POC baseado na abertura de porta ou resultados de reconhecimento de impressão digital
Crie um novo arquivo python no diretório script, defina a função check; os parâmetros passados são principalmente endereço IP, lista de portas, lista de impressões digitais, e então retorna o resultado:
import pymongo
from lib.verify import verify
timeout = 2
vuln = ['27017', 'Mongodb']
def check(ip, ports, apps):
# verify é usado para verificar se existe um resultado relacionado ao Mongodb na lista de varredura. Se a porta não estiver aberta, não será escaneada.
if verify(vuln, ports, apps):
try:
conn = pymongo.MongoClient(host=ip, port=27017, serverSelectionTimeoutMS=timeout)
database_list = conn.list_database_names()
if not database_list:
conn.close()
return
conn.close()
return '27017 MongoDB Unauthorized Access'
except Exception as e:
pass
2. Percorrer cada porta HTTP aberta do IP alvo
Gera a URL a ser escaneada de acordo com a lista de serviços de porta fornecida e visita cada porta web. O script abaixo obtém o título de cada porta HTTP do IP.
from lib.verify import get_list
from lib.random_header import HEADERS
from lxml import etree
import requests
def get_title(url):
try:
r = requests.get(url, headers=HEADERS, timeout=3, verify=False)
html = etree.HTML(r.text)
title = html.xpath('//title/text()')
return url + ' | ' + title[0]
except:
pass
def check(ip, ports, apps):
result = []
probe = get_list(ip, ports)
for i in probe:
out = get_title(i)
if out:
result.append(out)
return result
Como adicionar recursos de reconhecimento de impressão digital
Modifique o conteúdo do arquivo data/apps.txt
1. Corresponder cabeçalho HTTP
Cacti|headers|Set-Cookie|Cacti=
2. Corresponder corpo da resposta HTTP
ASP|index|index|<a[^>]?href=('|")[^http][^>]?.asp(?|#|\1)
3. Dividir cabeçalhos para corresponder em k ou v
ThinkSNS|match|match|T3_lang
360
360wzws
Anquanbao
Armor
BaiduYunjiasu
AWS WAF
AdNovum
Airee CDN
Art of Defence HyperGuard
ArvanCloud
Barracuda NG
Beluga CDN
BinarySEC
BlockDoS
Bluedon IST
CacheFly CDN
ChinaCache CDN
Cisco ACE XML Gateway
CloudFlare CDN
Cloudfront CDN
Comodo
CompState
DenyALL WAF
DenyAll
Distil Firewall
DoSArrest Internet Security
F5 BIG-IP APM
F5 BIG-IP ASM
F5-TrafficShield
Fastly CDN
FortiWeb
FortiWeb Firewall
GoDaddy
GreyWizard Firewall
HuaweiCloudWAF
HyperGuard Firewall
IBM DataPower
ISAServer
Immunify360
Imperva SecureSphere
Incapsula CDN
Jiasule
KONA
KeyCDN
ModSecurity
NGENIX CDN
NSFOCUS
Naxsi
NetContinuum
NetContinuum WAF
Neusoft SEnginx
Newdefend
Palo Alto Firewall
PerimeterX Firewall
PowerCDN
Profense
Qiniu CDN
Reblaze Firewall
SDWAF
Safe3
Safedog
SiteLock TrueShield
SonicWALL
SonicWall
Sophos UTM Firewall
Stingray
Sucuri
Teros WAF
Usp-Sec
Varnish
Wallarm
WatchGuard
WebKnight
West263CDN
Yundun
Yunsuo
ZenEdge Firewall
aesecure
aliyun
azion CDN
cloudflare CDN
dotDefender
limelight CDN
maxcdn CDN
mod_security
yunsuo
Abaixo estão os resultados do site de teste do scanner AWVS

O reconhecimento de impressão digital utiliza principalmente Wappalyzer e WebEye:
https://github.com/b4ubles/python3-Wappalyzer
https://github.com/zerokeeper/WebEye
Poc referenciados:
BBscan scanner https://github.com/lijiejie/BBScan
POC-T https://github.com/Xyntax/POC-T/tree/2.0/script
Perun https://github.com/WyAtu/Perun
Referência para varredura de portas e verificação de serviços:
https://raw.githubusercontent.com/AnthraX1/InsightScan/master/scanner.py
Extração de expressões regulares para informações sensíveis em JS:
https://github.com/nsonaniya2010/SubDomainizer
Detecção de WAF usando regras do waf00f e whatwaf:
https://github.com/EnableSecurity/wafw00f
https://github.com/Ekultek/WhatWaf
Relatório HTML utiliza:
https://github.com/WyAtu/Perun
https://github.com/ly1102