
Ermittelt alle Websites eines Unternehmensnetzwerks mittels DNS-Zonentransfers und Masscan, speichert Antworten und ermöglicht Abfragen nach bekannten anfälligen Webtechnologien sowie benutzerdefinierten Regex-Mustern.
WebStor ist ein unter der MIT-Lizenz in Python implementiertes Werkzeug, das darauf abzielt, schnell alle Websites in allen Netzwerken Ihrer Organisation zu erfassen, ihre Antworten zu speichern und nach bekannten Webtechnologien und -versionen zu durchsuchen, wie z. B. solchen mit Zero-Day-Schwachstellen. Es soll insbesondere das einzigartige Problem lösen, das in mittelgroßen bis großen Organisationen mit dezentraler Verwaltung auftritt, in denen es nahezu unmöglich sein kann, alle von verschiedenen Administratoren in verschiedenen Einheiten und Netzwerken eingesetzten Webtechnologien nachzuverfolgen.
WebStor erreicht sein Ziel durch die folgenden Aktionen:
WebStor läuft derzeit auf Linux-Systemen. Da es in Python geschrieben ist, wäre eine Anpassung zur Unterstützung von Windows trivial und wird wahrscheinlich in Zukunft erfolgen.
webstor.py [-h] [--ADD-HTTP-PORT HTTPPORTTOADD] [--CLEAR-HTTP]
[--ADD-HTTPS-PORT HTTPSPORTTOADD] [--CLEAR-HTTPS]
[--ADD-CUSTOM-FINGERPRINT FINGERPRINT]
[--DELETE-CUSTOM-FINGERPRINT FINGERPRINTNAMETODELETE]
[--IMPORT-CUSTOM-FINGERPRINT IMPORTFINGERPRINTFILE]
[--CLEAR-CUSTOM-FINGERPRINTS] [--SHOW-CONFIG]
[--SHOW-CONFIG-FULL] [--RUN-MASSCAN]
[--SET-MASSCAN-RANGES SETSCANRANGES]
[--ADD-RANGE RANGETOADD] [--DELETE-RANGE RANGETODELETE]
[--IMPORT-MASSCAN-RANGES IMPORTSCANRANGES]
[--ADD-PATH PATHTOADD] [--DELETE-PATH PATHTODELETE]
[--CLEAR-PATHS] [--REFRESH-RESPONSES]
[--RESPONSES-ADD-FOR-PATH RESPONSESADDFORPATH]
[--SEARCH-PATTERN SEARCHPATTERN]
[--SEARCH-CUSTOM-FINGERPRINT SEARCHFINGERPRINT]
[--SEARCH-WAPPALYZER SEARCHWAPPALYZER] [--NO-TSIG-KEY]
[--TSIG-KEY-IMPORT IMPORTTSIGFILE]
[--TSIG-KEY-REPLACE REPLACEMENTTSIGFILE]
[--DELETE-TSIG TSIGTODELETE]
[--USE-TSIG-FILE-ONLY USETSIGFILEONLY]
[--DOWNLOAD-NEW-WAPPALYZER] [--LIST-WAPPALYZER-TECH-NAMES]
[--ZONE-XFER] [--ADD-DOMAIN DOMAINDETAILS]
[--DELETE-DOMAIN DOMAINTODELETE]
[--IMPORT-ZONE-FILE IMPORTZONEFILE] [--CLEAR-DOMAINS]
[--LIST-DOMAINS] [--LIST-OUTSIDE] [--SQL-CREDS SQLCREDSFILE]
optional arguments:
-h, --help show this help message and exit
--ADD-HTTP-PORT HTTPPORTTOADD, -a HTTPPORTTOADD
Add a custom HTTP port.
--CLEAR-HTTP, -aC Clear any custom HTTP ports and revert to default of
80.
--ADD-HTTPS-PORT HTTPSPORTTOADD, -b HTTPSPORTTOADD
Add a custom HTTPS port.
--CLEAR-HTTPS, -bC Clear any custom HTTPS ports and revert to default of
443.
--ADD-CUSTOM-FINGERPRINT FINGERPRINT, -c FINGERPRINT
Add a custom fingerprint in the form <Name>,<RegEx>.
--DELETE-CUSTOM-FINGERPRINT FINGERPRINTNAMETODELETE, -cD FINGERPRINTNAMETODELETE
Delete a custom fingerprint by name.
--IMPORT-CUSTOM-FINGERPRINT IMPORTFINGERPRINTFILE, -cI IMPORTFINGERPRINTFILE
Import a custom fingerprint file with the path
specified.
--CLEAR-CUSTOM-FINGERPRINTS, -cC
Clears all custom fingerprints stored in DB.
--SHOW-CONFIG, -g Show current WebStor configuration (brief).
--SHOW-CONFIG-FULL, -gF
Show current WebStor configuration (full).
--RUN-MASSCAN, -m Runs a new port scan with Masscan on all configured
TCP ports for HTTP and HTTPS, against all configured
ranges and any IP addresses from DNS records that are
outside those ranges.
--SET-MASSCAN-RANGES SETSCANRANGES, -mR SETSCANRANGES
Scan range or ranges, replaces existing ranges in DB,
comma separated, such as: -s
10.10.0.0/16,10.13.0.0/16,192.168.1.0/24
--IMPORT-MASSCAN-RANGES IMPORTSCANRANGES, -mI IMPORTSCANRANGES
Import scan ranges (CIDR blocks) from a specified
file.
--DELETE-RANGE RANGETODELETE, -mD RANGETODELETE
Delete scan range.
--ADD-PATH PATHTOADD, -p PATHTOADD
Add paths for which to request and store responses
besides '/'.
--DELETE-PATH PATHTODELETE, -pD PATHTODELETE
Delete paths for which to request and store responses
besides '/'.
--CLEAR-PATHS, -pC Clear any custom URL request paths and revert to
default of '/'.
--REFRESH-RESPONSES, -r
Refresh URL responses in DB.
--RESPONSES-ADD-FOR-PATH RESPONSESADDFORPATH, -rP RESPONSESADDFORPATH
Add URL responses for a one-time path in with the
current responses in the DB.
--SEARCH-PATTERN SEARCHPATTERN, -sP SEARCHPATTERN
Search for string or regular expression in WebStor
database.
--SEARCH-CUSTOM-FINGERPRINT SEARCHFINGERPRINT, -sC SEARCHFINGERPRINT
Search for technology by name of user-provided custom
fingerprint.
--SEARCH-WAPPALYZER SEARCHWAPPALYZER, -sW SEARCHWAPPALYZER
Search for technology by name (from Wappalyzer Tech
DB) in WebStor DB.
--NO-TSIG-KEY, -tN Do not use DNSSec TSIG key stored in database or a
file, even if present.
--TSIG-KEY-IMPORT IMPORTTSIGFILE, -tI IMPORTTSIGFILE
Import a specified TSIG key file into the database
--TSIG-KEY-REPLACE REPLACEMENTTSIGFILE, -tR REPLACEMENTTSIGFILE
Replace a TSIG key in the database with a specified
file
--DELETE-TSIG TSIGTODELETE, -dT TSIGTODELETE
Delete a TSIG key from the database by name.
--USE-TSIG-FILE-ONLY USETSIGFILEONLY, -tF USETSIGFILEONLY
Only use tsig file specified (full path), do not use
TSIGs stored in the DB. Applies to all domains,
limiting WebStor to one TSIG for zone transfers in the
current execution.
--DOWNLOAD-NEW-WAPPALYZER, -w
Download a new Wappalyzer fingerprints file directly
from GitHub. Overwrites existing Wappalyzer
fingerprint data.
--LIST-WAPPALYZER-TECH-NAMES, -wL
List the names of all Wappalyzer technologies in the
database.
--ZONE-XFER, -z Forces a new zone transfer using all domains, servers,
and associated TSIG keys in DB
--ADD-DOMAIN DOMAINDETAILS, -zA DOMAINDETAILS
Add a domain in the form <Domain name>,<Server>,<TSIG
Key Name>.
--DELETE-DOMAIN DOMAINTODELETE, -zD DOMAINTODELETE
Delete a DNS domain from the database by name.
--IMPORT-ZONE-FILE IMPORTZONEFILE, -zI IMPORTZONEFILE
Add domains for zone transfers from a file.
--CLEAR-DOMAINS, -zC Clears all DNS domains stored in DB.
--LIST-DOMAINS, -zL Lists all DNS domains stored in DB.
--LIST-OUTSIDE, -e Prints a list of all names and IPs from our zone
transfers that are outside defined net ranges.
--SQL-CREDS SQLCREDSFILE, -q SQLCREDSFILE
Use SQL credentials in file at specified path.
HINWEIS: Diese Schritte gehen davon aus, dass Ihre Organisation nur einen TSIG-Schlüssel für Zonentransfers verwendet und dass alle Einträge von einem DNS-Server abgefragt werden können. Falls dies nicht der Fall ist, siehe den Abschnitt „Sichere/spezielle Anwendungsfälle“ weiter unten.
# Suche nach einem String/Regex, der mit einer Webtechnologie verbunden ist:
./webstor.py -sP "content=\"wordpress 4.[7-9]"
# Eine Liste von Websites mit diesem Regex, erwartete Antworten von WordPress v4.7-9-Seiten,
# wird zurückgegeben.
# Um den Regex aus dem obigen Beispiel als benutzerdefinierten Fingerabdruck zu speichern, den Sie nach
# Namen abfragen können (und sich den Regex nicht jedes Mal merken müssen):
./webstor.py -c "wordpress4.7-9,content=\"wordpress 4.[7-9]"
# Nachdem der obige Befehl ausgeführt wurde, kann die Abfrage einfach mit folgendem Befehl durchgeführt werden:
./webstor.py -sC wordpress4.7-9
# Verwendung von WebStor zur Suche nach WordPress-Seiten über Wappalyzer-Definitionen:
./webstor.py -sW wordpress
# Eine Liste erreichbarer WordPress-Seiten in den Netzwerken Ihrer Organisation wird
# zurückgegeben. HINWEIS: Wappalyzer-Suchen können aufgrund der Anzahl der zu überprüfenden Eigenschaften
# langsamer sein als Muster-/Regex-Suchen.
Seiten werden basierend auf Antworten sowohl auf Namen als auch auf IP-Adressen abgefragt. Dies ist wichtig, da einige Webserver mehrere Websites unter mehreren Namen hosten. Andere Server liefern möglicherweise nur eine Standardseite oder eine Standardantwort des Hosting-Anbieters, wenn sie per IP aufgerufen werden (z. B. https://68.66.216.42), und eine tatsächliche geschäftskritische Website, wenn sie per Name aufgerufen wird (z. B. https://www.seekerdlp.com). Aus diesem Grund sehen Sie Abfrageergebnisse für beide, wenn Sie eine benannte Website haben, die auch ausgeliefert wird, wenn die IP des Webservers angefordert wird.
Es wird empfohlen, einen Cron-Job einzurichten, der WebStor täglich ausführt, sodass Ihre Abfrageergebnisse stets den aktuellen Zustand Ihres Netzwerks widerspiegeln.
Wenn Sie nicht die standardmäßigen MariaDB-Anmeldedaten (root, leeres Passwort) verwenden möchten, können Sie die Option -q verwenden, um den Pfad zu einer Datei mit Anmeldedaten anzugeben. Die erste Zeile der Datei muss der Server sein, z. B. localhost. Die zweite Zeile muss der SQL-Benutzername sein. Die dritte Zeile muss das Passwort sein.
Wenn Sie Ihren TSIG-Schlüssel nicht in der Datenbank speichern möchten, können Sie die Option -tF verwenden, um den Pfad zu einer ACL-geschützten TSIG-Schlüsseldatei anzugeben.
Wenn Ihre Organisation mehrere TSIG-Schlüssel verwendet, müssen Sie diese in der Datenbank speichern. Sie können jeweils mit der Option -tI hinzugefügt werden, und Domänen können über die normalen Optionen hinzugefügt werden, wobei der entsprechende Schlüssel und Server angegeben werden.
WebStor verwendet die Wappalyzer-Technologiedatenbank für vorab ausgefüllte, nach Namen indizierte Technologiesuchen in den gespeicherten Antworten von WebStor. Wappalyzer ist unter den Bedingungen der MIT-Lizenz lizenziert.
WebStor wurde geschrieben von Ross Geerlings <rjgeer@umich.edu>, <ross@seekerdlp.com>.
WebStor ist unter den Bedingungen der MIT-Lizenz lizenziert, die unten wiedergegeben ist.
Die MIT-Lizenz
Copyright (c) 2020-2024 The University of Michigan Board of Regents.
Hiermit wird jeder Person, die eine Kopie dieser Software und der zugehörigen Dokumentationsdateien (die "Software") erhält, kostenlos die Erlaubnis erteilt, die Software ohne Einschränkung zu nutzen, einschließlich und ohne Beschränkung der Rechte zur Verwendung, Vervielfältigung, Änderung, Zusammenführung, Veröffentlichung, Verteilung, Unterlizenzierung und/oder zum Verkauf von Kopien der Software, und Personen, denen die Software zur Verfügung gestellt wird, dies unter den folgenden Bedingungen zu gestatten:
Der obige Urheberrechtshinweis und dieser Genehmigungshinweis müssen in allen Kopien oder wesentlichen Teilen der Software enthalten sein.
DIE SOFTWARE WIRD OHNE MÄNGELGEWÄHR BEREITGESTELLT, AUSSCHLIESSLICH ODER STILLSCHWEIGEND, EINSCHLIESSLICH, ABER NICHT BESCHRÄNKT AUF DIE GEWÄHRLEISTUNG DER MARKTGÄNGIGKEIT, DER EIGNUNG FÜR EINEN BESTIMMTEN ZWECK UND DER NICHTVERLETZUNG VON RECHTEN. IN KEINEM FALL SIND DIE AUTOREN ODER URHEBERRECHTSINHABER HAFTBAR FÜR JEGLICHE ANSPRÜCHE, SCHÄDEN ODER ANDERE VERPFLICHTUNGEN, SEI ES AUS VERTRAG, UNERLAUBTER HANDLUNG ODER ANDERWEITIG, DIE AUS ODER IM ZUSAMMENHANG MIT DER SOFTWARE ODER DER NUTZUNG ODER ANDEREN GESCHÄFTEN MIT DER SOFTWARE ENTSTEHEN.