
python3写的综合扫描工具,主要用来存活验证,敏感文件探测(目录扫描/js泄露接口/html注释泄露),WAF/CDN识别,端口扫描,指纹/服务识别,操作系统识别,POC扫描,SQL注入,绕过CDN,查询旁站等功能,主要用来甲方自测或乙方授权测试,请勿用来搞破坏。 Ein umfassendes Scan-Tool, geschrieben in Python3, hauptsächlich verwendet für: Überlebensvalidierung, Erkennung sensibler Dateien (Verzeichnisscanning / JS-Leck-Schnittstellen / HTML-Kommentarlecks), WAF/CDN-Identifikation, Port-Scanning, Fingerabdruck-/Dienst-Identifikation, Betriebssystem-Identifikation, POC-Scanning, SQL-Injection, Umgehung von CDN, Abfrage benachbarter Standorte usw. Hauptsächlich für interne Tests des Auftraggebers oder autorisierte Tests durch den Auftragnehmer bestimmt. Nicht für böswillige Zwecke verwenden.
English | 简体中文
Python3 umfassendes Scanning-Tool, hauptsächlich verwendet für die Erkennung sensibler Dateien (Verzeichnisscanning und JS-Leak-Schnittstelle), WAF/CDN-Identifikation, Port-Scanning, Fingerabdruck-/Dienstidentifikation, Betriebssystemidentifikation, Schwachstellen-Passwort-Erkennung, POC-Scanning, SQL-Injection, CDN-Bypass, Prüfung der nächsten Station
2019.8.19
Hinzugefügt das Verbot, .gov.cn- und .edu.cn-Domains zu scannen; das Programm erkennt dies und beendet sich sofort.
Die Ausgabe des Programms wurde auf Zeit + Plugin + Domain + Ergebnis geändert.
Das ursprüngliche SQL-Injection-Plugin wurde entfernt und durch ein Plugin zur Erkennung schwacher Passwörter (Mysql, Postgresql, SSH usw.) ersetzt.
Die Fingerabdruckbibliothek von Fofa wurde mit WEBEYE kombiniert. Über 2000 Fingerabdruckregeln.
2019.7.19
Globaler Socks5-Proxy hinzugefügt.
Requests wurden gepackt.
Verzeichnisstruktur optimiert.
Der ursprüngliche HTML-Bericht wurde entfernt und durch den aus Perun extrahierten HTML-Bericht ersetzt.
Die JSON-Ergebnisausgabe wurde entfernt und stattdessen in der sqllite3-Datenbank gespeichert. Beim Einfügen werden Duplikate entfernt; falls der Zielhost bereits in der DB-Datei vorhanden ist, wird er beim Scannen übersprungen.
Plugins zur Erkennung von phpinfo und häufigen Informationslecks hinzugefügt.
Pdns-Schnittstelle von viewdns.info hinzugefügt.
2019.7.1
Hosts, bei denen der Ping fehlgeschlagen ist, werden angezeigt.
Der -u-Befehl kann mehrere Ziele akzeptieren, die durch Kommas getrennt werden.
Fehler bei der Fingerabdruckerkennung behoben.
2019.6.18
Problem bei der Fingerabdruckerkennung von IIS-Websites behoben; apps.json angepasst.
Einige fehleranfällige Drittanbieterbibliotheken und Skripte entfernt.
Falls das Scannen sofort beendet wird: Dies liegt daran, dass das Programm zuerst die DNS-Auflösung und den Ping testet.
Bei der ersten Verwendung von Vxscan lädt fake_useragent die UA-Liste von https://fake-useragent.herokuapp.com/browsers/0.1.11; dabei kann ein Timeout-Fehler auftreten.
Python-Version > 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
Nach dem Entpacken die Datei GeoLite2-City.mmdb nach vxscan/data/GeoLite2-City.mmdb legen
wget https://geolite.maxmind.com/download/geoip/database/GeoLite2-ASN.tar.gz
Nach dem Entpacken die Datei GeoLite2-ASN.mmdb nach vxscan/data/GeoLite2-ASN.mmdb legen
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. Eine Website scannen
python3 vxscan.py -u http://www.xxx.com/
2. Websites aus einer Dateiliste scannen
python3 vxscan.py -f hosts.txt
3. CIDR z.B. 127.0.0.0/24
python3 vxscan.py -i 127.0.0.0/24
├─Vxscan.py Hauptdatei
├─data
│ ├─apps.json Web-Fingerabdruckinformationen
│ ├─apps.txt Web-Fingerabdruckinformationen (WEBEYE)
│ ├─GeoLite2-ASN.mmdb geoip
│ ├─GeoLite2-City.mmdb asn
├─doc Speicherort für Bilder oder Dokumente
├─report HTML-Berichtsinhalte
├─lib
│ ├─common.py CDN-Erkennung, Port-Scan, POC-Scan, etc.
│ ├─color.py Terminal-Farbausgabe
│ ├─cli_output.py Terminal-Ausgabe
│ ├─active.py DNS-Auflösung und Ping-Überprüfung
│ ├─save_html.py HTML-Berichte generieren
│ ├─waf.py WAF-Regeln
│ ├─options.py Optionseinstellungen
│ ├─iscdn.py Prüft anhand IP-Segment und ASN-Bereich, ob IP CDN ist
│ ├─osdetect.py Betriebssystemerkennung
│ ├─random_header.py Benutzerdefinierte Header
│ ├─settings.py Einstellungen
│ ├─vuln.py Batch-Aufruf von POC-Scans
│ ├─url.py Deduplizieren abgerufener Verbindungen
│ ├─verify.py Skript stellt Verifizierungsschnittstelle bereit
│ ├─sqldb.py Alles rund um sqlite3
│ ├─Requests.py Gepackte Requests-Bibliothek mit benutzerdefinierten Einstellungen
├─script
│ ├─Poc.py Poc-Skript
│ ├─......
├─Plugins
│ ├─ActiveReconnaissance
│ ├─active.py Host-Überlebensprüfung und DNS-Auflösungsverifikation
│ ├─check_waf.py WAF einer Website erkennen
│ ├─crawk.py Website-Links crawlen und testen
│ ├─osdetect.py Betriebssystemerkennung
│ ├─InformationGathering
│ ├─geoip.py Standortermittlung
│ ├─js_leaks.py JS-Informationslecks
│ ├─PassiveReconnaissance
│ ├─ip_history.py PDNS-Schnittstelle
│ ├─reverse_domain.py Nebenstellensuche
│ ├─virustotal.py VT-PDNS-Abfrage
│ ├─wappalyzer.py CMS-passive-Fingerabdruckerkennung
│ ├─Scanning
│ ├─dir_scan Verzeichnisscan
│ ├─port_scan Portscan
├─requirements.txt
├─report.py HTML-Berichtserstellung
├─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. POC basierend auf offenen Ports oder Fingerabdruckergebnissen aufrufen
Erstellen Sie eine neue Python-Datei im script-Verzeichnis, definieren Sie die check-Funktion. Die übergebenen Parameter sind hauptsächlich die IP-Adresse, die Portliste und die Fingerabdruckliste. Geben Sie dann das Ergebnis zurück:
import pymongo
from lib.verify import verify
timeout = 2
vuln = ['27017', 'Mongodb']
def check(ip, ports, apps):
# Verify wird verwendet, um zu prüfen, ob ein Mongodb-bezogenes Ergebnis in der Scanliste vorhanden ist. Wenn der Port nicht offen ist, wird nicht gescannt.
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. Über jeden HTTP-Port des Ziel-IPs iterieren
Generiere die zu scannende URL basierend auf der übergebenen Port-Dienst-Liste und besuche dann jeden Web-Port. Das folgende Skript holt den Titel jedes HTTP-Ports der 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
So fügen Sie Fingerabdruckerkennungsfunktionen hinzu
Ändern Sie den Inhalt der Datei data/apps.txt
1. HTTP-Header abgleichen
Cacti|headers|Set-Cookie|Cacti=
2. HTTP-Antwortbody abgleichen
ASP|index|index|<a[^>]?href=('|")[^http][^>]?.asp(?|#|\1)
3. Header in k oder v aufteilen und abgleichen
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
Nachfolgend die Ergebnisse des AWVS-Scannertests

Die Fingerabdruckerkennung verwendet hauptsächlich Wappalyzer und WebEye:
https://github.com/b4ubles/python3-Wappalyzer
https://github.com/zerokeeper/WebEye
Poc-Referenzen:
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
Referenz für Port-Scan und Dienstbestimmung:
https://raw.githubusercontent.com/AnthraX1/InsightScan/master/scanner.py
Reguläre Extraktion von JS-sensiblen Informationen in Anlehnung an:
https://github.com/nsonaniya2010/SubDomainizer
WAF-Erkennung verwendet die Erkennungsregeln von waf00f und whatwaf:
https://github.com/EnableSecurity/wafw00f
https://github.com/Ekultek/WhatWaf
Der HTML-Bericht verwendet:
https://github.com/WyAtu/Perun
https://github.com/ly1102