
Outil de scan complet écrit en python3, principalement utilisé pour la vérification de l'état de fonctionnement (survie), la détection de fichiers sensibles (scan de répertoires / fuites d'interfaces JS / fuites de commentaires HTML), l'identification WAF/CDN, le scan de ports, la reconnaissance d'empreintes/services, l'identification du système d'exploitation, le scan POC, l'injection SQL, le contournement de CDN, la consultation de sites voisins, etc. Il est principalement destiné aux tests internes des clients ou aux tests autorisés par les fournisseurs, ne l'utilisez pas pour causer des dommages.
Anglais | Chinois simplifié
Outil de scan complet en Python3, principalement utilisé pour la détection de fichiers sensibles (scan de répertoires et fuites d'interfaces JS), identification WAF/CDN, scan de ports, identification d'empreintes/services, identification du système d'exploitation, détection de mots de passe faibles, scan POC, injection SQL, contournement du CDN, vérification des sites voisins
2019.8.19
Ajout de l'interdiction de scanner les domaines gov.cn et edu.cn ; le programme se termine immédiatement s'il les détecte.
Modification de l'interface de sortie du programme : format temps + plugin + domaine + résultat.
Suppression de l'ancien plugin d'injection SQL et ajout d'un plugin de détection de mots de passe faibles (Mysql, Postgresql, SSH, etc.).
Fusion de la bibliothèque d'identification d'empreintes de Fofa avec WEBEYE. Règle d'empreinte 2000+.
2019.7.19
Ajout d'un proxy global socks5.
Emballage de requests.
Optimisation de la structure des répertoires.
Suppression de l'ancien rapport HTML, utilisation du rapport HTML extrait de Perun.
Suppression de la sortie JSON, ajustement pour stocker dans la base de données sqllite3, dédoublonnage lors de l'importation ; si l'hôte cible existe déjà dans le fichier db, il est ignoré lors du scan.
Ajout d'un plugin de détection des fuites d'informations courantes (phpinfo, leaves).
Ajout de l'interface viewdns.info pour PDNS.
2019.7.1
Affichage des hôtes dont le test ping a échoué.
La commande -u peut accepter plusieurs cibles, séparées par des virgules.
Correction d'une erreur de reconnaissance d'empreinte.
2019.6.18
Correction du problème de reconnaissance d'empreinte des sites IIS ; modification de apps.json.
Suppression de certaines bibliothèques et scripts tiers sujets aux erreurs.
Si le scan se termine immédiatement, c'est parce que le programme effectue d'abord une résolution DNS et un ping.
Lors de la première utilisation de Vxscan, fake_useragent charge la liste des UA depuis https://fake-useragent.herokuapp.com/browsers/0.1.11 ; une erreur de délai d'attente peut survenir.
Version 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
Après décompression, placez GeoLite2-City.mmdb dans vxscan/data/GeoLite2-City.mmdb
wget https://geolite.maxmind.com/download/geoip/database/GeoLite2-ASN.tar.gz
Après décompression, placez GeoLite2-ASN.mmdb dans 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. Scanner un site web
python3 vxscan.py -u http://www.xxx.com/
2. Scanner un site web à partir d'une liste de fichiers
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 master file
├─data
│ ├─apps.json Web fingerprint information
│ ├─apps.txt Web fingerprint information (WEBEYE)
│ ├─GeoLite2-ASN.mmdb geoip
│ ├─GeoLite2-City.mmdb asn
├─doc to store some image or document resources
├─report html report related content
├─lib
│ ├─common.py Determine CDN, port scan, POC scan, etc.
│ ├─color.py terminal color output
│ ├─cli_output.py terminal output
│ ├─active.py to judge dns resolution and ping ip survival
│ ├─save_html.py Generate html reports
│ ├─waf.py waf rules
│ ├─options.py option settings
│ ├─iscdn.py Determine whether IP is CDN based on ip segment and asn range
│ ├─osdetect.py OS version identification
│ ├─random_header.py custom header header
│ ├─settings.py setting script
│ ├─vuln.py Batch call POC scan
│ ├─url.py Deduplicate the fetched connection
│ ├─verify.py script provides verification interface
│ ├─sqldb.py All related to sqlite3 are here
│ ├─Requests.py packaged requests library, do some custom settings
├─script
│ ├─Poc.py Poc script
│ ├─......
├─Plugins
│ ├─ActiveReconnaissance
│ ├─active.py to determine host survival and verify dns resolution
│ ├─check_waf.py judge website waf
│ ├─crawk.py Crawl website links and test
│ ├─osdetect.py Operating System Identification
│ ├─InformationGathering
│ ├─geoip.py Location Search
│ ├─js_leaks.py js information disclosure
│ ├─PassiveReconnaissance
│ ├─ip_history.py pdns interface
│ ├─reverse_domain.py side station query
│ ├─virustotal.py VT Pdns query
│ ├─wappalyzer.py CMS passive fingerprint recognition
│ ├─Scanning
│ ├─dir_scan directory scan
│ ├─port_scan port scan
├─requirements.txt
├─report.py html report generation
├─logo.jpg
├─error.log
# coding=utf-8
# global timeout
TIMEOUT = 5
# Is the status to be excluded
BLOCK_CODE = [
301, 403, 308, 404, 405, 406, 408, 411, 417, 429, 493, 502, 503, 504, 999
]
# Set scan thread
THREADS = 100
# Content type to exclude
BLOCK_CONTYPE = [
'image/jpeg', 'image/gif', 'image/png', 'application/javascript',
'application/x-javascript', 'text/css', 'application/x-shockwave-flash',
'text/javascript', 'image/x-icon'
]
# Whether to skip directory scanning
SCANDIR = True
# Whether to start the POC plugin
POC = True
# Skip if it exists in the result db
CHECK_DB = False
# invalid 404 page
PAGE_404 = [
'page_404"', "404.png", '找不到页面', '页面找不到', "Not Found", "访问的页面不存在",
"page does't exist", 'notice_404', '404 not found'
]
# ping
PING = True
# socks5 proxy
# SOCKS5 = ('127.0.0.1', 1080)
SOCKS5 = ()
# shodan
SHODAN_API = ''
# VT
VIRUSTOTAL_API = ''
# cookie
COOKIE = {'Cookie': 'test'}
1. Appeler un POC basé sur l'ouverture de port ou les résultats de reconnaissance d'empreintes
Créez un nouveau fichier Python dans le répertoire script, définissez la fonction check. Les paramètres passés sont principalement l'adresse IP, la liste des ports, la liste des identifications d'empreintes, puis retournez le résultat :
import pymongo
from lib.verify import verify
timeout = 2
vuln = ['27017', 'Mongodb']
def check(ip, ports, apps):
# Verify is used to verify if there is a Mongodb related result in the scan list. If the port is not open, it will not be scanned.
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. Parcourir chaque port HTTP ouvert de l'IP cible
Générez l'URL à scanner selon la liste des services de ports passés, puis visitez chaque port web. Le script suivant récupère le titre de chaque port HTTP de l'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
Comment ajouter des fonctionnalités de reconnaissance d'empreintes
Modifiez le contenu du fichier data/apps.txt
1. Correspondance dans l'en-tête HTTP
Cacti|headers|Set-Cookie|Cacti=
2. Correspondance dans le corps de la réponse HTTP
ASP|index|index|<a[^>]?href=('|")[^http][^>]?.asp(?|#|\1)
3. Diviser les en-têtes pour correspondre dans 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
Voici les résultats du site de test du scanner AWVS

La reconnaissance d'empreintes fait principalement appel à Wappalyzer et WebEye :
https://github.com/b4ubles/python3-Wappalyzer
https://github.com/zerokeeper/WebEye
Poc référencés :
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
Référence pour le scan de ports et le jugement de services d'Anthx :
https://raw.githubusercontent.com/AnthraX1/InsightScan/master/scanner.py
Extraction d'expressions régulières pour les informations sensibles JS :
https://github.com/nsonaniya2010/SubDomainizer
Règles de jugement WAF utilisant waf00f et whatwaf :
https://github.com/EnableSecurity/wafw00f
https://github.com/Ekultek/WhatWaf
Le rapport HTML utilise :
https://github.com/WyAtu/Perun
https://github.com/ly1102