WebStorはMITライセンスの下でPythonで実装されたツールで、組織のすべてのネットワーク上のすべてのWebサイトを迅速に列挙し、それらのレスポンスを保存し、ゼロデイ脆弱性を持つものなど、既知のWebテクノロジーとバージョンを問い合わせるためのものです。特に、分散管理が行われている中規模から大規模の組織において、異なる部門やネットワークに分散した様々な管理者によって展開されたすべてのWebテクノロジーを追跡することがほぼ不可能であるという特有の問題を解決することを目的としています。
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
<名前>,<正規表現>の形式でカスタムフィンガープリントを追加します
--DELETE-CUSTOM-FINGERPRINT FINGERPRINTNAMETODELETE, -cD FINGERPRINTNAMETODELETE
名前でカスタムフィンガープリントを削除します
--IMPORT-CUSTOM-FINGERPRINT IMPORTFINGERPRINTFILE, -cI IMPORTFINGERPRINTFILE
指定されたパスのカスタムフィンガープリントファイルをインポートします
--CLEAR-CUSTOM-FINGERPRINTS, -cC
DBに保存されているすべてのカスタムフィンガープリントをクリアします
--SHOW-CONFIG, -g 現在のWebStor設定を表示します(簡易)
--SHOW-CONFIG-FULL, -gF
現在のWebStor設定を表示します(詳細)
--RUN-MASSCAN, -m 設定されたすべてのHTTPおよびHTTPSのTCPポートに対して、設定されたすべての範囲と、DNSレコードからのIPアドレスで範囲外のものに対して、Masscanを使用して新しいポートスキャンを実行します
--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
DB内のURLレスポンスを更新します
--RESPONSES-ADD-FOR-PATH RESPONSESADDFORPATH, -rP RESPONSESADDFORPATH
現在のDB内のレスポンスとともに、1回限りのパスに対するURLレスポンスを追加します
--SEARCH-PATTERN SEARCHPATTERN, -sP SEARCHPATTERN
WebStorデータベースで文字列または正規表現を検索します
--SEARCH-CUSTOM-FINGERPRINT SEARCHFINGERPRINT, -sC SEARCHFINGERPRINT
ユーザー提供のカスタムフィンガープリントの名前でテクノロジーを検索します
--SEARCH-WAPPALYZER SEARCHWAPPALYZER, -sW SEARCHWAPPALYZER
Wappalyzer Tech DBからのテクノロジー名でWebStor DBを検索します
--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ファイルのみを使用します(フルパス)。DBに保存されたTSIGは使用しません。すべてのドメインに適用され、現在の実行ではWebStorがゾーン転送に1つのTSIGのみを使用するように制限します
--DOWNLOAD-NEW-WAPPALYZER, -w
GitHubから新しいWappalyzerフィンガープリントファイルを直接ダウンロードします。既存のWappalyzerフィンガープリントデータを上書きします
--LIST-WAPPALYZER-TECH-NAMES, -wL
データベース内のすべてのWappalyzerテクノロジーの名前を一覧表示します
--ZONE-XFER, -z DB内のすべてのドメイン、サーバー、および関連するTSIGキーを使用して新しいゾーン転送を強制します
--ADD-DOMAIN DOMAINDETAILS, -zA DOMAINDETAILS
<ドメイン名>,<サーバー>,<TSIGキー名>の形式でドメインを追加します
--DELETE-DOMAIN DOMAINTODELETE, -zD DOMAINTODELETE
名前でデータベースからDNSドメインを削除します
--IMPORT-ZONE-FILE IMPORTZONEFILE, -zI IMPORTZONEFILE
ファイルからゾーン転送用のドメインを追加します
--CLEAR-DOMAINS, -zC DBに保存されているすべてのDNSドメインをクリアします
--LIST-DOMAINS, -zL DBに保存されているすべてのDNSドメインを一覧表示します
--LIST-OUTSIDE, -e 定義されたネットワーク範囲外にあるゾーン転送からのすべての名前とIPのリストを表示します
--SQL-CREDS SQLCREDSFILE, -q SQLCREDSFILE
指定されたパスのファイル内のSQL認証情報を使用します
注意:これらの手順は、組織がゾーン転送に1つのTSIGキーのみを使用し、すべてのレコードが1つのDNSサーバーからクエリできることを前提としています。そうでない場合は、以下の「セキュア/特殊な使用例」セクションを参照してください。
# Webテクノロジーに関連する文字列/正規表現を検索:
./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
# Wappalyzer定義を使用してWordpressサイトを検索する場合:
./webstor.py -sW wordpress
# 組織のネットワーク上で到達可能なWordpressサイトのリストが返されます。注意:Wappalyzer検索は、検証するプロパティの数が多いため、パターン/正規表現検索よりも遅くなる可能性があります。
サイトは名前とIPアドレスの両方に対するレスポンスに基づいてクエリされます。これは、一部のWebサーバーが複数の名前で複数のサイトをホストしているため重要です。他のサーバーは、IPでリクエストされた場合(例:https://68.66.216.42)にデフォルトサイトまたはホスティングプロバイダーのデフォルトレスポンスのみを提供し、名前でクエリされた場合(例:https://www.seekerdlp.com)に実際の業務用サイトを提供する場合があります。このため、名前付きサイトがあり、それがWebサーバーのIPがリクエストされたときにも提供される場合、両方のクエリ結果が表示されます。
クエリ結果が常にネットワークの現在の状態を反映するように、cronジョブを設定してWebStorを毎日実行することをお勧めします。
デフォルトのMariaDB認証情報(root、空のパスワード)を使用したくない場合は、-qオプションを使用して認証情報を含むファイルのパスを指定できます。ファイルの1行目はサーバー(例:localhost)、2行目はSQLユーザー名、3行目はパスワードである必要があります。
TSIGキーをデータベースに保存したくない場合は、-tFオプションを使用してACLが適用されたTSIGキーファイルのパスを指定できます。
組織が複数のTSIGキーを使用する場合は、それらをデータベースに保存する必要があります。それぞれ-tIオプションで追加でき、ドメインは通常のオプションを通じて、適切なキーとサーバーを指定して追加できます。
WebStorは、事前に設定された名前インデックス付きテクノロジールックアップをWebStorの保存されたレスポンスに対して行うために、Wappalyzerのテクノロジーデータベースを使用しています。WappalyzerはMITライセンスの条件の下でライセンスされています。
WebStorはRoss Geerlings <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 fime-les (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.