
Перечисляет все веб-сайты в сетях организации через DNS zone transfers и masscan, сохраняет ответы и позволяет выполнять запросы для поиска известных уязвимых веб-технологий и пользовательских regex-шаблонов.
WebStor — это инструмент, реализованный на Python под лицензией MIT, предназначенный для быстрого перечисления всех веб-сайтов во всех сетях вашей организации, сохранения их ответов и поиска известных веб-технологий и версий, в том числе тех, которые имеют уязвимости нулевого дня. Он призван, в частности, решить уникальную проблему, возникающую в организациях среднего и крупного размера с децентрализованным администрированием, где практически невозможно отследить все веб-технологии, развернутые различными администраторами в разных подразделениях и сетях.
WebStor достигает своей цели, выполняя следующие действия:
В настоящее время WebStor работает в системах Linux. Поскольку он написан на Python, его адаптация для работы в Windows тривиальна и, вероятно, произойдет в будущем.
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 показать это справочное сообщение и выйти
--ADD-HTTP-PORT HTTPPORTTOADD, -a HTTPPORTTOADD
Добавить пользовательский HTTP-порт.
--CLEAR-HTTP, -aC Очистить все пользовательские HTTP-порты и вернуться к порту 80 по умолчанию.
--ADD-HTTPS-PORT HTTPSPORTTOADD, -b HTTPSPORTTOADD
Добавить пользовательский HTTPS-порт.
--CLEAR-HTTPS, -bC Очистить все пользовательские HTTPS-порты и вернуться к порту 443 по умолчанию.
--ADD-CUSTOM-FINGERPRINT FINGERPRINT, -c FINGERPRINT
Добавить пользовательский отпечаток в форме <Имя>,<RegEx>.
--DELETE-CUSTOM-FINGERPRINT FINGERPRINTNAMETODELETE, -cD FINGERPRINTNAMETODELETE
Удалить пользовательский отпечаток по имени.
--IMPORT-CUSTOM-FINGERPRINT IMPORTFINGERPRINTFILE, -cI IMPORTFINGERPRINTFILE
Импортировать файл пользовательских отпечатков по указанному пути.
--CLEAR-CUSTOM-FINGERPRINTS, -cC
Очистить все пользовательские отпечатки, хранящиеся в БД.
--SHOW-CONFIG, -g Показать текущую конфигурацию WebStor (кратко).
--SHOW-CONFIG-FULL, -gF
Показать текущую конфигурацию WebStor (полностью).
--RUN-MASSCAN, -m Запустить новое сканирование портов с помощью Masscan для всех настроенных TCP-портов HTTP и HTTPS, по всем настроенным диапазонам и любым IP-адресам из DNS-записей, которые находятся вне этих диапазонов.
--SET-MASSCAN-RANGES SETSCANRANGES, -mR SETSCANRANGES
Диапазон или диапазоны сканирования, заменяет существующие диапазоны в БД, разделённые запятыми, например: -s 10.10.0.0/16,10.13.0.0/16,192.168.1.0/24
--IMPORT-MASSCAN-RANGES IMPORTSCANRANGES, -mI IMPORTSCANRANGES
Импортировать диапазоны сканирования (блоки CIDR) из указанного файла.
--DELETE-RANGE RANGETODELETE, -mD RANGETODELETE
Удалить диапазон сканирования.
--ADD-PATH PATHTOADD, -p PATHTOADD
Добавить пути, для которых будут запрашиваться и сохраняться ответы, кроме '/'.
--DELETE-PATH PATHTODELETE, -pD PATHTODELETE
Удалить пути, для которых будут запрашиваться и сохраняться ответы, кроме '/'.
--CLEAR-PATHS, -pC Очистить все пользовательские пути запросов URL и вернуться к пути '/' по умолчанию.
--REFRESH-RESPONSES, -r
Обновить ответы URL в БД.
--RESPONSES-ADD-FOR-PATH RESPONSESADDFORPATH, -rP RESPONSESADDFORPATH
Добавить ответы URL для одноразового пути вместе с текущими ответами в БД.
--SEARCH-PATTERN SEARCHPATTERN, -sP SEARCHPATTERN
Поиск строки или регулярного выражения в базе данных WebStor.
--SEARCH-CUSTOM-FINGERPRINT SEARCHFINGERPRINT, -sC SEARCHFINGERPRINT
Поиск технологии по имени пользовательского отпечатка, предоставленного пользователем.
--SEARCH-WAPPALYZER SEARCHWAPPALYZER, -sW SEARCHWAPPALYZER
Поиск технологии по имени (из БД технологий Wappalyzer) в БД WebStor.
--NO-TSIG-KEY, -tN Не использовать ключ DNSSec TSIG, сохранённый в базе данных или файле, даже если он присутствует.
--TSIG-KEY-IMPORT IMPORTTSIGFILE, -tI IMPORTTSIGFILE
Импортировать указанный файл ключа TSIG в базу данных
--TSIG-KEY-REPLACE REPLACEMENTTSIGFILE, -tR REPLACEMENTTSIGFILE
Заменить ключ TSIG в базе данных указанным файлом
--DELETE-TSIG TSIGTODELETE, -dT TSIGTODELETE
Удалить ключ TSIG из базы данных по имени.
--USE-TSIG-FILE-ONLY USETSIGFILEONLY, -tF USETSIGFILEONLY
Использовать только указанный файл tsig (полный путь), не использовать TSIG, хранящиеся в БД. Применяется ко всем доменам, ограничивая WebStor одним TSIG для передачи зон в текущем сеансе.
--DOWNLOAD-NEW-WAPPALYZER, -w
Загрузить новый файл отпечатков Wappalyzer напрямую с GitHub. Перезаписывает существующие данные отпечатков Wappalyzer.
--LIST-WAPPALYZER-TECH-NAMES, -wL
Вывести список названий всех технологий Wappalyzer в базе данных.
--ZONE-XFER, -z Принудительно выполнить новую передачу зоны, используя все домены, серверы и связанные ключи TSIG в БД
--ADD-DOMAIN DOMAINDETAILS, -zA DOMAINDETAILS
Добавить домен в форме <Имя домена>,<Сервер>,<Имя ключа TSIG>.
--DELETE-DOMAIN DOMAINTODELETE, -zD DOMAINTODELETE
Удалить DNS-домен из базы данных по имени.
--IMPORT-ZONE-FILE IMPORTZONEFILE, -zI IMPORTZONEFILE
Добавить домены для передачи зон из файла.
--CLEAR-DOMAINS, -zC Очистить все DNS-домены, хранящиеся в БД.
--LIST-DOMAINS, -zL Вывести список всех DNS-доменов, хранящихся в БД.
--LIST-OUTSIDE, -e Вывести список всех имён и IP-адресов из наших передач зон, которые находятся за пределами определённых сетевых диапазонов.
--SQL-CREDS SQLCREDSFILE, -q SQLCREDSFILE
Использовать учётные данные SQL из файла по указанному пути.
ПРИМЕЧАНИЕ: Эти шаги предполагают, что ваша организация использует только один ключ TSIG для передачи зон и что все записи могут быть запрошены с одного DNS-сервера. Если это не так, см. раздел «Варианты безопасного/специфического использования» ниже.
# Поиск строки/регулярного выражения, связанного с веб-технологией:
./webstor.py -sP "content=\"wordpress 4.[7-9]"
# Будет возвращён список сайтов с этим регулярным выражением, ожидаемые ответы от сайтов Wordpress v4.7-9.
# Чтобы сохранить регулярное выражение из примера выше как пользовательский отпечаток, который можно запрашивать по имени (и не нужно запоминать регулярное выражение каждый раз):
./webstor.py -c "wordpress4.7-9,content=\"wordpress 4.[7-9]"
# После выполнения указанной выше команды запрос можно выполнить просто:
./webstor.py -sC wordpress4.7-9
# Использование WebStor для поиска сайтов Wordpress через определения Wappalyzer:
./webstor.py -sW wordpress
# Будет возвращён список доступных сайтов Wordpress в сетях вашей организации. ПРИМЕЧАНИЕ: поиск через Wappalyzer может быть медленнее, чем поиск по шаблону/регулярному выражению, из-за количества свойств, которые проверяются для подтверждения.
Сайты запрашиваются на основе ответов как по именам, так и по IP-адресам. Это важно, потому что некоторые веб-серверы хостят несколько сайтов под разными именами. Другие серверы могут отдавать только сайт по умолчанию или ответ хостинг-провайдера по умолчанию при запросе по IP (например, https://68.66.216.42) и реальный бизнес-сайт при запросе по имени (например, https://www.seekerdlp.com). По этой причине, если у вас есть именованный сайт, который также отдаётся при запросе IP-адреса веб-сервера, вы увидите результаты запроса для обоих.
Рекомендуется настроить cron-задачу для ежедневного запуска WebStor, чтобы результаты запросов всегда отражали текущее состояние вашей сети.
Если вы не хотите использовать учётные данные MariaDB по умолчанию (root, пустой пароль), вы можете использовать опцию -q для указания пути к файлу с учётными данными. Первая строка файла должна содержать сервер, например localhost. Вторая строка должна содержать имя пользователя SQL. Третья строка должна содержать пароль.
Если вы не хотите хранить свой ключ TSIG в базе данных, вы можете использовать опцию -tF для указания пути к файлу ключа TSIG, защищённому списками контроля доступа (ACL).
Если ваша организация использует несколько ключей TSIG, вам потребуется хранить их в базе данных. Каждый из них можно добавить с помощью опции -tI, а домены можно добавлять через обычные опции, указывая соответствующий ключ и сервер.
WebStor использует базу данных технологий Wappalyzer для предварительно заполненного поиска технологий по именам в сохранённых ответах WebStor. Wappalyzer распространяется на условиях лицензии MIT.
WebStor написан Россом Гирлингсом <rjgeer@umich.edu>, <ross@seekerdlp.com>.
WebStor распространяется на условиях лицензии MIT, воспроизведённой ниже.
The MIT License
Copyright (c) 2020-2024 The University of Michigan Board of Regents.
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.