Skip to content
KitploitKITPLOIT
ツールブログ
Log in
提出
ツールブログ
提出

ハッキング、侵入テスト、サイバーセキュリティツールをあなたのセキュリティアーセナルに!

Kitploitはハッキング、サイバーセキュリティ、ペネトレーションテストのツールディレクトリです。最新のプロジェクトアップデートを見つけて、脆弱性の発見、システム分析、テストの自動化、セキュリティの強化を行いましょう。

フィードお問い合わせプライバシー© 2026 Kitploit

ツールディレクトリ

カテゴリ

すべてのカテゴリを見る
Loading categories
ツール/GitHubGitHub/bickzero93/cve-2026-76904
脆弱性分析エクスプロイトウェブアプリケーション悪用情報収集ペネトレーションテスト
GitHubbickzero93/cve-2026-76904

CVE-2026-76904

Pythonスクリプトで、GeoServer WFSエンドポイントのインベントリ化と、PostGIS/GeoToolsにおける時間ベースのSQLインジェクション脆弱性の検証を行います。認可されたテスト専用のPoCモードを備えています。

リポジトリを見る
1191ヶ月前未レビュー

人気

すべて見る →

コミュニティで最も使われているツールを見つけましょう。

すべてのツールを探索

ツールコレクションを閲覧

すべてのツールを見る →
共有

GeoServer WFS インベントリと認可済み検証

このリポジトリには、GeoServer WFS エンドポイントを調査するための2つのPythonスクリプトが含まれています。

概要

wfs_inventory.py

目的: レイヤー、XSDフィールド、WFS値をインベントリし、候補をオプションで時間ベースのチェックにより検証します。

実行例:

python3 wfs_inventory.py --url https://HOST --valid-fields 4
python3 wfs_inventory.py --url https://HOST --valid-fields 4 --sleep 1 --confirm-sleep 5 --candidate-scope auto --timing-result-type auto
python3 wfs_inventory.py --url https://HOST --layer namespace:layer --sleep 1 --confirm-sleep 5 --valid-diagnose output.txt

geoserver_sqli_working.py

目的: インベントリのための統合エントリポイント、および独立したPoCモード。

実行例:

python3 geoserver_sqli_working.py --target https://HOST --valid-fields 4 --sleep 1 --confirm-sleep 5
python3 geoserver_sqli_working.py --target https://HOST/geoserver/wfs --typename namespace:layer --field_name FIELD --sleep 5
python3 geoserver_sqli_working.py --target https://HOST/geoserver/wfs --typename namespace:layer --field_name FIELD --sleep 5 --query "SELECT current_database()"

重要な注意: 時間ベースのチェックとPoCモードは、明示的なテスト許可が存在するシステムに対してのみ使用してください。通常のインベントリモードでは、通常のWFS操作のみを使用します。

前提条件

  • Python 3.10以降
  • 追加のPythonパッケージは不要。両スクリプトは標準ライブラリのみを使用
  • WFSエンドポイントへのネットワークアクセス

オプションで実行可能にする場合:

chmod +x wfs_inventory.py geoserver_sqli_working.py

クイックスタート

通常のWFSクエリで候補を検索

python3 wfs_inventory.py \
  --url https://HOST \
  --valid-fields 4

デフォルトのパス /geoserver/wfs が自動的に追加されます。したがって、以下の指定は同等です:

https://HOST
https://HOST/geoserver
https://HOST/geoserver/wfs

異なるインストールの場合は、完全なWFSパスを指定する必要があります。

時間ベースのチェックで候補を検証

明示的に認可されたシステムのみ:

python3 wfs_inventory.py \
  --url https://HOST \
  --valid-fields 4 \
  --sleep 1

チェック中、候補ごとに測定結果が stderr に表示されます:

[sleep-check] phase=screen typeName=namespace:layer field_name=FIELD resultType=hits baseline=0.120s test=1.128s delta=1.008s passed=true
[sleep-check] phase=confirm typeName=namespace:layer field_name=FIELD resultType=hits requested=3s baseline=0.118s test=3.125s delta=3.007s vulnerable=true

スクリーンに合格しただけでは陽性の所見ではありません。2番目のより長い測定も合格した場合のみ、パラメータブロックが出力されます。

診断をファイルに書き込む

python3 wfs_inventory.py \
  --url https://HOST \
  --valid-fields 4 \
  --sleep 1 \
  --valid-diagnose output.txt

--valid-diagnose FILE は詳細な診断を自動的に有効にし、指定されたファイルに書き込みます。

オートモードの流れ

デフォルトモード auto は、WFS情報を次の順序で処理します:

  1. GetCapabilities が一度開かれます:

    /geoserver/wfs?service=WFS&acceptVersions=2.0.0&request=GetCapabilities
    
  2. XMLレスポンスがストリーミングされます。FeatureType/Name が見つかるとすぐに、次の typeName が確定します。

  3. このレイヤーに対して、version=2.0.0 で直ちに DescribeFeatureType が実行されます。

  4. スクリプトはXSD要素を抽出し、IDまたは番号に似た名前を持つ文字列/JSONフィールドを選択します。

  5. 候補は呼び出しに応じてチェックされます:

    • --sleep なし: サンプル値が構文的に有効なJSONである必要があります。
    • --sleep N あり: コントロールリクエストと時間ベースのチェックリクエストが測定されます。JSON値チェックはスキップされます。
  6. 結果は即座に出力され、フラッシュされます。

  7. その後、実行中の GetCapabilities レスポンスから次の typeName が読み取られます。

これにより、最初の結果が表示される前に大きな GetCapabilities レスポンスを完全に処理する必要がなくなります。

フィールド候補の基準

--sleep なしの場合、自動モードはデフォルトでIDまたは番号に似た名前を持つ文字列/JSONフィールドを考慮します。

一方、--sleep ありの場合、--candidate-scope auto はすべての単純な非ジオメトリフィールドを使用します。XSDタイプとID名パターンは、タイミングチェックをブロックしなくなります。これにより、数値、日付/ブール、またはベンダー固有のXSDタイプでの偽陰性が防止されます。

認識される名前パターンには以下が含まれます:

id
*_id
*_fid
nr_*
*_nr
*nummer*
fid
uuid
guid
key
objectid

時間ベースのチェックでは、フィールド名はさらに [A-Za-z_][A-Za-z0-9_]* 形式の単純な識別子である必要があります。

JSONチェックとスリープチェックの違い

--sleep なしの場合、観測された値が構文的にJSONとして解釈できるかどうかがチェックされます。したがって、例えば文字列 "383205" も候補と見なされます。その内容が有効なJSON数値を表すためです。このチェックはヒューリスティックであり、脆弱性の証明ではありません。

--sleep 1 ありの場合、時間測定のみが決定します。候補は、チェックリクエストがコントロールリクエストに対して要求されたスリープ時間の少なくとも70パーセントを追加で必要とする場合、デフォルトで陽性と見なされます。--timing-result-type auto は最初に resultType=hits をチェックし、陰性の結果の場合は続いて resultType=results をチェックします。

暫定的に陽性の測定は、必ずより長いスリープ時間で確認されます。明示的な --confirm-sleep がない場合、スクリプトは max(3, --sleep * 3) を使用し、10秒に制限されます。これにより、--sleep 1 での単一のレイテンシスパイクが vulnerable=true につながらなくなります。

コンパクトな出力

標準出力には、有効なレイヤーごとに1つのブロックが含まれます:

typeName=namespace:layer
field_name1=FIELD_A
parameter_string1=https://HOST/geoserver/wfs --typename namespace:layer --field_name FIELD_A
field_name2=FIELD_B
parameter_string2=https://HOST/geoserver/wfs --typename namespace:layer --field_name FIELD_B

parameter_stringN には、正規化されたWFSエンドポイントと、--typename および --field_name の適切な値が含まれます。

--valid-fields N は、個々のフィールドではなくレイヤーブロックをカウントします。N 個未満の有効なレイヤーが存在する場合、残りのカタログが引き続き調査されます。--max-layers を使用すると、最大実行時間を制限できます。

詳細な診断

--diagnose または --valid-diagnose FILE オプションは、以下を追加します:

  • 正規化されたWFSエンドポイント、
  • 使用された GetCapabilities URL、
  • DescribeFeatureType URL、
  • XSDフィールドタイプ、
  • IDおよび使用可能性フラグ、
  • チェックされたサンプル数、
  • JSON互換性またはタイミング測定値、
  • 生成された GetFeature URL、および
  • コピー可能なパラメータ文字列。

例:

python3 wfs_inventory.py \
  --url https://HOST \
  --valid-fields 10 \
  --valid-diagnose diagnose.txt

その他のインベントリモード

すべてのレイヤーを一覧表示

python3 wfs_inventory.py \
  --url https://HOST \
  --mode layers

ネームスペースに制限:

python3 wfs_inventory.py \
  --url https://HOST \
  --mode layers \
  --namespace fink

レイヤーのXSDフィールドを表示

python3 wfs_inventory.py \
  --url https://HOST \
  --mode fields \
  --layer namespace:layer

各フィールドは、名前、XSDタイプ、nillable、id_candidate、usable_property を含むJSONオブジェクトとして出力されます。

選択したフィールドの値をエクスポート

python3 wfs_inventory.py \
  --url https://HOST \
  --mode values \
  --layer namespace:layer \
  --field FIELD_A \
  --field FIELD_B \
  --max-features 100 \
  --format jsonl \
  --output values.jsonl

すべてのプロパティをエクスポート:

python3 wfs_inventory.py \
  --url https://HOST \
  --mode values \
  --layer namespace:layer \
  --all-properties \
  --max-features 100

--unique を使用すると、選択したフィールド値の同一の組み合わせが一度だけ出力されます。

wfs_inventory.py のパラメータ

パラメータデフォルト意味
--url URL必須ホスト、GeoServerベース、または完全なWFSエンドポイント
--mode auto|layers|fields|valuesauto実行する操作モード
--layer NAMESPACE:LAYER–オートモードを1つのフィーチャータイプに制限。fields と values には必須
--namespace PREFIX–このネームスペースプレフィックスのレイヤーのみを考慮
--capabilities-file FILE–ダウンロードの代わりにローカルのGetCapabilitiesレスポンスを使用
--field NAME繰り返し可能values モードでエクスポートするプロパティ
--all-propertiesオフvalues モードですべてのプロパティをエクスポート
--uniqueオフ重複するフィールド値の組み合わせを抑制
--page-size N500GetFeatureページあたりのフィーチャー数。範囲は1〜5000
--sample-size N5JSON構文チェック用のレイヤーあたりのサンプル値数。範囲は1〜100
--sleep SECONDS0時間ベースの検証を有効化。0 または1〜10秒が許可
--candidate-scope auto|id|allauto候補選択。auto はスリープなしでIDフィールド、スリープありですべての非ジオメトリフィールドを使用
--timing-result-type auto|hits|resultsautoタイミングチェックのクエリパス。auto は hits を試し、その後 results を試す
--sleep-threshold RATIO0.7必要なスリープ時間の割合。範囲は0.5〜1.0
--confirm-sleep SECONDS0/自動確認スリープ。0 は最初のスリープ時間の少なくとも3倍を使用。範囲は1〜10
--start-layer-index N0最初のN個のストリーミングされたレイヤーをスキップ
--max-layers N0最大Nレイヤーを処理。0 は無制限
--valid-fields N0N個の有効なレイヤーブロック後に停止。0 は無制限
--valid Nエイリアス--valid-fields の後方互換エイリアス
--max-features N0values モードでNフィーチャー後に停止。0 は無制限
--format jsonl|csv|textjsonlvalues モードの出力形式
--output FILEstdoutレポートまたは値をファイルに書き込む
--report-format blocks|jsonlblocksオートレポートの形式
--diagnoseオフURL、タイプ、選択フラグ、チェック統計を追加
--valid-diagnose FILE–診断を有効にし、FILEに直接書き込む
--delay SECONDS0.1結果/チェックステップ間の一時停止
--timeout SECONDS30HTTPリクエストあたりのタイムアウト
--retries N2タイムアウトまたはネットワークエラー後の再試行。範囲は0〜10
--proxy URL–HTTP(S)プロキシ。例: http://127.0.0.1:8080
--proxy-ca FILE–プロキシ証明書を信頼するためのPEM CA証明書
--insecureオフTLS証明書検証を無効化
--authorization TEXTI_AM_AUTHORIZEDセキュリティ確認。正確に I_AM_AUTHORIZED である必要があります

統合エントリポイント

ツールをダウンロード