
Strumento di scansione completo scritto in Python3, utilizzato principalmente per verifica di sopravvivenza, rilevamento di file sensibili (scansione directory, esposizione di API in JS, commenti HTML), identificazione WAF/CDN, scansione porte, rilevamento impronte digitali/servizi, identificazione sistema operativo, scansione POC, SQL injection, bypass CDN, query su siti vicini, ecc. È principalmente per autotest da parte del committente o test autorizzati da parte del fornitore. Non utilizzarlo per scopi dannosi.
Inglese | 简体中文
Strumento di scansione completo per Python3, utilizzato principalmente per il rilevamento di file sensibili (scansione directory e interfacce di leak da JS), identificazione WAF/CDN, scansione porte, identificazione impronte digitali/servizi, identificazione sistema operativo, rilevamento password deboli, scansione POC, SQL injection, bypass CDN, verifica siti correlati.
2019.8.19
Aggiunta la proibizione di scansione dei domini gov.cn e edu.cn, il programma rileva e termina immediatamente
Modificata l'interfaccia di output del programma in stile tempo + plugin + dominio + risultato
Rimosso il plugin originale di SQL injection e aggiunto un plugin di rilevamento password deboli (Mysql, Postgresql, SSH, ecc.)
Combinata la libreria di identificazione delle impronte digitali di Fofa con WEBEYE. Regole impronte digitali 2000+
2019.7.19
Aggiunto proxy globale socks5
Pacchettizzate le richieste
Ottimizzata la struttura delle directory
Cancellato il report html originale, utilizzato il report html estratto da Perun
Rimossa l'output dei risultati in json, regolato per l'archiviazione nel database sqllite3, deduplicazione durante l'inserimento, salta se l'host target esiste già nel file db durante la scansione
Aggiunto plugin per la rilevazione di perdite di informazioni comuni come phpinfo, leaves
Pdns aggiunge l'interfaccia viewdns.info
2019.7.1
Visualizza l'host il cui ping è fallito.
Il comando -u può aggiungere più target, separati da virgole
Corretto errore di riconoscimento impronte digitali
2019.6.18
Risolto il problema di errore nel riconoscimento delle impronte digitali dei siti iis, modificato apps.json
Rimossi alcuni script e librerie di terze parti soggetti a errori
Se la scansione termina subito, è perché il programma prima rileva la risoluzione DNS e l'operazione ping.
La prima volta che si usa Vxscan, fake_useragent carica la lista ua di https://fake-useragent.herokuapp.com/browsers/0.1.11, e potrebbe verificarsi un errore di timeout nel caricamento.
Versione 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
Dopo aver decompresso, posiziona GeoLite2-City.mmdb in vxscan/data/GeoLite2-City.mmdb
wget https://geolite.maxmind.com/download/geoip/database/GeoLite2-ASN.tar.gz
Dopo aver decompresso, posiziona GeoLite2-ASN.mmdb in vxscan/data/GeoLite2-ASN.mmdb
pip3 install -r requirements.txt
python3 Vxscan.py -h
optional arguments:
-h, --help show this help message and exit
-u URL, --url URL Start scanning this url -u xxx.com
-i INET, --inet INET cidr eg. 1.1.1.1 or 1.1.1.0/24
-f FILE, --file FILE read the url from the file
1. Scansiona un sito web
python3 vxscan.py -u http://www.xxx.com/
2. Scansiona un sito web da un file di elenco
python3 vxscan.py -f hosts.txt
3. cidr es. 127.0.0.0/24
python3 vxscan.py -i 127.0.0.0/24
├─Vxscan.py file principale
├─data
│ ├─apps.json Informazioni impronte digitali web
│ ├─apps.txt Informazioni impronte digitali web (WEBEYE)
│ ├─GeoLite2-ASN.mmdb geoip
│ ├─GeoLite2-City.mmdb asn
├─doc Archivia alcune immagini o risorse documentali
├─report Contenuti relativi al report html
├─lib
│ ├─common.py Determina CDN, scansione porte, scansione POC, ecc.
│ ├─color.py Output colore terminale
│ ├─cli_output.py Output terminale
│ ├─active.py Per determinare risoluzione DNS e sopravvivenza IP con ping
│ ├─save_html.py Genera report html
│ ├─waf.py Regole WAF
│ ├─options.py Impostazioni opzioni
│ ├─iscdn.py Determina se IP è CDN basato su segmento IP e intervallo ASN
│ ├─osdetect.py Identificazione versione OS
│ ├─random_header.py Intestazione personalizzata
│ ├─settings.py Script di impostazione
│ ├─vuln.py Chiamata batch di scansione POC
│ ├─url.py Deduplicazione delle connessioni recuperate
│ ├─verify.py Script fornisce interfaccia di verifica
│ ├─sqldb.py Tutto ciò che riguarda sqlite3 è qui
│ ├─Requests.py Libreria requests pacchettizzata, con alcune impostazioni personalizzate
├─script
│ ├─Poc.py Script POC
│ ├─......
├─Plugins
│ ├─ActiveReconnaissance
│ ├─active.py Per determinare sopravvivenza host e verificare risoluzione DNS
│ ├─check_waf.py Verifica WAF del sito
│ ├─crawk.py Crawl dei collegamenti del sito e test
│ ├─osdetect.py Identificazione sistema operativo
│ ├─InformationGathering
│ ├─geoip.py Ricerca posizione
│ ├─js_leaks.py Perdita di informazioni JS
│ ├─PassiveReconnaissance
│ ├─ip_history.py Interfaccia PDNS
│ ├─reverse_domain.py Query sito correlato
│ ├─virustotal.py Query VT Pdns
│ ├─wappalyzer.py Riconoscimento passivo impronte digitali CMS
│ ├─Scanning
│ ├─dir_scan Scansione directory
│ ├─port_scan Scansione porte
├─requirements.txt
├─report.py Generazione report html
├─logo.jpg
├─error.log
# coding=utf-8
# timeout globale
TIMEOUT = 5
# Stato da escludere
BLOCK_CODE = [
301, 403, 308, 404, 405, 406, 408, 411, 417, 429, 493, 502, 503, 504, 999
]
# Imposta thread di scansione
THREADS = 100
# Content-Type da escludere
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 saltare la scansione directory
SCANDIR = True
# Se avviare il plugin POC
POC = True
# Salta se presente nel database dei risultati
CHECK_DB = False
# Pagina 404 non valida
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. Chiamata POC basata su porte aperte o risultati di riconoscimento impronte digitali
Crea un nuovo file python nella directory script, definisci la funzione check, i parametri passati sono principalmente l'indirizzo IP, l'elenco delle porte, l'elenco delle impronte digitali riconosciute, poi restituisci il risultato:
import pymongo
from lib.verify import verify
timeout = 2
vuln = ['27017', 'Mongodb']
def check(ip, ports, apps):
# Verify viene utilizzato per verificare se c'è un risultato correlato a Mongodb nella lista di scansione. Se la porta non è aperta, non verrà scansionata.
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 Accesso non autorizzato'
except Exception as e:
pass
2. Iterazione su ogni porta HTTP aperta dell'IP target
Genera l'url da scansionare in base all'elenco dei servizi porta passato, poi visita ciascuna porta web. Il seguente script otterrà il titolo di ogni porta http dell'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
Come aggiungere funzionalità di riconoscimento delle impronte digitali
Modifica il contenuto del file data/apps.txt
1. Corrispondenza con l'intestazione HTTP
Cacti|headers|Set-Cookie|Cacti=
2. Corrispondenza con il corpo della risposta HTTP
ASP|index|index|<a[^>]?href=('|")[^http][^>]?.asp(?|#|\1)
3. Suddivide le intestazioni Headers per corrispondere in k o 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
Quello che segue è il risultato del sito di test dello scanner AWVS

Il riconoscimento delle impronte digitali utilizza principalmente Wappalyzer e WebEye:
https://github.com/b4ubles/python3-Wappalyzer
https://github.com/zerokeeper/WebEye
I POC fanno riferimento a:
Scanner BBscan https://github.com/lijiejie/BBScan
POC-T https://github.com/Xyntax/POC-T/tree/2.0/script
Perun https://github.com/WyAtu/Perun
Riferimenti allo scan porte di anthx, giudizio del servizio:
https://raw.githubusercontent.com/AnthraX1/InsightScan/master/scanner.py
Estrazione regolare delle informazioni sensibili da JS:
https://github.com/nsonaniya2010/SubDomainizer
Le regole di giudizio WAF utilizzano waf00f e whatwaf:
https://github.com/EnableSecurity/wafw00f
https://github.com/Ekultek/WhatWaf
Il report html utilizza:
https://github.com/WyAtu/Perun
https://github.com/ly1102