Skip to content
KitploitKITPLOIT
ツールエクスプロイトブログ
Log in
提出
ツールエクスプロイトブログ
提出

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

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

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

ツールディレクトリ

カテゴリ

すべてのカテゴリを見る
Loading categories
arcgis-web-shell — ArcGIS Enterprise のジオプロセシング サービスで、コマンド実行用の Python ツールボックスを公開します。 | Kitploit
ツール/GitHubGitHub/ryanpohlner/arcgis-web-shell
特権昇格エクスプロイトウェブアプリケーション悪用ポストエクスプロイトペネトレーションテストレッドチーミングリモートアクセスツールペイロード開発
GitHubryanpohlner/arcgis-web-shell

arcgis-web-shell

ArcGIS Enterprise のジオプロセシング サービスで、コマンド実行用の Python ツールボックスを公開します。

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

人気

すべて見る →

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

すべてのツールを探索

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

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

Geoprocessing サービス経由の ArcGIS Web Shell

このリポジトリには、Python ツールボックスをコマンド実行タスクとして公開する ArcGIS ジオプロセシング サービスの定義が含まれています。これは、許可されたセキュリティ テストを目的としています。

明示的な許可を得ていないシステムでは、このサービスを公開したり使用したりしないでください。ジオプロセシング サービスは、ArcGIS Server のサービス アカウントとしてサーバー側のコードを実行するため、このプロジェクトはホストへの Web シェルのようなインターフェースを作成できます。

これは何か

主要な成果物は ArcGIS_Shell です。これは、1 つの入力パラメーターを持つ Python ツールボックス タスクです:

command

タスクが実行されると、サーバーはオペレーティングシステムのシェルを介してそのコマンドを実行し、通常のコンソール出力をArcGISタスクの結果として返します。

リポジトリには、事前にビルドされた2つのArcGISサービス定義ファイルが含まれています:

ArcGIS_Shell_10.9.1_and_earlier.sd
ArcGIS_Shell_11_or_later.sd

サービス定義フォルダも含まれています:

ArcGIS_Shell_10.9.1_and_earlier/
ArcGIS_Shell_11_or_later/

これらのフォルダには、ArcGIS が .sd アーカイブにパッケージ化するファイルが含まれており、埋め込まれた ArcGIS_Shell.pyt ファイルも含まれます。サービス定義を変更する場合は、展開されたフォルダを編集し、その後 package_sd.py で .sd ファイルを再ビルドしてください。

サービス定義

ArcGIS サービス定義 (.sd) は、パッケージ化されたデプロイメント成果物です。これには、サービスのメタデータ、構成、ツールボックスまたはマップのリソース、および ArcGIS Server がサービスを公開するために必要なサポートファイルが含まれています。

このリポジトリでは、各 .sd は ArcGIS 互換の圧縮設定を使用した 7-Zip アーカイブです:

-ms=off
-m0=LZMA:d=14

2つのサービス定義フォルダは、主にArcGISのパッケージングバージョンによって異なります:

10.9.1 and earlier: p20 paths, offlineSDVersion10x, ArcGIS 2.9 schema
11 or later:        p30 paths, offlineSDVersion11,  ArcGIS 3.1 schema

埋め込まれた Python ツールボックスのロジックは両方とも同じです。

ジオプロセシングサービス

ArcGIS ジオプロセシングサービスは、通常、GIS 解析ワークフローを HTTP 経由で公開するために使用されます。一般的なワークフローは次のとおりです:

  1. ArcGIS Pro で Python ツールボックス、モデル、またはスクリプトツールを作成します。
  2. それをジオプロセシングサービスとして公開します。
  3. ArcGIS クライアント、Web アプリ、または REST クライアントからサービスを呼び出します。
  4. ArcGIS Server にツールを実行させ、結果を返します。

正当な例としては、フィーチャのクリップ、ネットワーク解析の実行、ラスタの処理、レポートの生成、バッチ GIS 変換の実行などがあります。

重要なセキュリティ上の特性は、ジオプロセシングタスクがサーバー側の Python を実行するという点です。公開されたタスクがユーザー制御の入力を受け入れ、それを subprocess.run(..., shell=True) のような危険なプリミティブに渡す場合、そのジオプロセシングタスクはコマンド実行インターフェースになります。これがこのプロジェクトで実証している内容です。

なぜこれが悪用されうるのか

Shell タスクは command という名前の文字列パラメータを受け入れます。Python ツールボックスはそのコマンドを ArcGIS Server ホスト上で実行し、stdout/stderr をタスク結果として返します。

つまり、ArcGIS ジオプロセシングサービスの公開または管理権限を持つオペレーターは、通常の ArcGIS 機能を通じて Web シェルのようなサービスを作成できます。コマンドは ArcGIS Server プロセスアカウントのセキュリティコンテキストで実行されます。

このサービスは ArcGIS の Uploads 機能も有効にします。これにより、サービスのアップロードエンドポイントが公開されます:

/arcgis/rest/services/ArcGIS_Shell/GPServer/uploads
/arcgis/rest/services/ArcGIS_Shell/GPServer/uploads/upload

アップロードはArcGIS Serverによってサイトシステムディレクトリに保存され、通常は次のようなパスの下に置かれます:

<arcgisserver>/directories/arcgissystem/arcgisuploads/<itemID>

アップロードされたアイテムの正確なパスは、ArcGIS Server のディレクトリ設定によって異なります。管理者は次の方法でアップロードされたアイテムを確認できます。

https://<server>/arcgis/admin/uploads?f=pjson

arcgissystem 内のファイルを手動で変更または削除しないでください。アップロード項目は REST または Administrator Directory を通じて削除してください。

ArcGIS Server Manager を使用した公開

対象の ArcGIS バージョンに対応する .sd ファイルを使用してください:

ArcGIS_Shell_10.9.1_and_earlier.sd
ArcGIS_Shell_11_or_later.sd

典型的な Server Manager の流れ:

  1. ArcGIS Server Manager を開く:

    https://<server>/arcgis/manager
    
  2. サービスを公開する権限を持つアカウントでサインインします。通常、これには portaladmin が含まれます。

  3. Services に移動します。

  4. Publish Service をクリックします。

  5. ArcGIS のバージョンに適した .sd ファイルをアップロードします。Next をクリックします。

  6. 「Specify properties for your new service」ページで、必要に応じてサービス名を変更します。Next をクリックします。

  7. 「Share your services with」ページでは、チェックボックスをオンにする必要はありません。Publish をクリックします。

  8. サービスが自動的に起動します。サービス名をクリックし、次に Capabilities、続いて REST URL をクリックします。

サービスを削除するには、サービス名の横にある「X」をクリックします。

ビルド済みの .sd ファイルには、すでに以下が含まれています:

"capabilities": "Uploads"

アップロード設定もテスト用に幅広く用意されています:

"maxUploadFileSize": "2048",
"allowedUploadFileTypes": "<broad explicit extension list>"

maxUploadFileSize は MB 単位です。拡張子リストは評価作業向けに意図的に広範に設定されていますが、それでも明示的な許可リストであり、真の「すべてを許可する」ワイルドカードではありません。

REST Web GUI の使用

公開後、ArcGIS REST Services Directory でサービスを開きます:

https://<server>/arcgis/rest/services/ArcGIS_Shell/GPServer

サービスがフォルダ内で公開されている場合は、フォルダ名を含めてください:

https://<server>/arcgis/rest/services/<folder>/ArcGIS_Shell/GPServer

タスクを開きます:

https://<server>/arcgis/rest/services/ArcGIS_Shell/GPServer/Shell

Execute Task をクリックします。

コマンドを設定してフォームを送信します。タスクの結果にはコマンドの出力が含まれているはずです。

出力は JSON 形式であるため、改行はエスケープされています(\r\n)。複数行の出力は後処理する必要があります。

タスクはオペレーティングシステムのシェルを使用するため、シェルのビルトインが機能します:

dir
echo test
whoami /groups

Linux ターゲットでは、Linux コマンドを使用します:

id
uname -a
pwd

ファイルのアップロード

uploads リソースを開きます:

https://<server>/arcgis/rest/services/ArcGIS_Shell/GPServer/uploads

Upload Item をクリックするか、直接次へ移動します:

https://<server>/arcgis/rest/services/ArcGIS_Shell/GPServer/uploads/upload

REST Web GUI では、アップロードが有効になっている場合、ファイルピッカーが表示されるはずです。

フォームを使用してファイルを選択し、アップロードを送信します。レスポンスには itemID が含まれます。

アップロードされたアイテムを次のコマンドで確認します:

https://<server>/arcgis/rest/services/ArcGIS_Shell/GPServer/uploads/<itemID>

アップロードした項目を次で削除します:

https://<server>/arcgis/rest/services/ArcGIS_Shell/GPServer/uploads/<itemID>/delete

そのページの REST Web フォームを使用して、削除操作を送信します。

アップロードされたファイルは、ArcGIS Server のシステムディレクトリクリーンアップポリシーの対象にもなります。デフォルトのシステムディレクトリクリーンアップ期間は通常 24 時間ですが、管理者はこれを変更できます。

ディスク上のアップロードファイルを見つける

ArcGIS はサービスアップロードを ArcGIS Server サイトのシステムディレクトリに保存し、サービスフォルダ内や .sd パッケージ内には保存しません。通常の場所は次のとおりです:

<server-directories-root>/arcgissystem/arcgisuploads/<itemID>/

一般的なWindowsレイアウト:

C:\arcgisserver\directories\arcgissystem\arcgisuploads\<itemID>\

一般的な Linux レイアウト:

/arcgis/server/usr/directories/arcgissystem/arcgisuploads/<itemID>/

これらはあくまで例です。正確なパスは、ArcGIS Server サイトのディレクトリがどのように構成されているかによって異なります。

正確なディスクパスを確認するには、Administrator Directory を開きます:

https://<server>/arcgis/admin/uploads?f=pjson

アップロードされたアイテムの itemID を探します。エントリには次のようなフィールドが含まれているはずです:

{
  "itemID": "if4582d33-f10a-41fe-85bc-cf2e2880c46e",
  "itemName": "authorized_test_binary.exe",
  "pathOnServer": "c:\\arcgisserver\\directories\\arcgissystem\\arcgisuploads\\if4582d33-f10a-41fe-85bc-cf2e2880c46e",
  "committed": true
}

pathOnServer はアップロード項目のディレクトリです。アップロードされたファイルは通常、itemName を使用してそのディレクトリ内に存在するため、完全なファイルパスは通常次のようになります:

<pathOnServer>\<itemName>

上記の例では:

C:\arcgisserver\directories\arcgissystem\arcgisuploads\if4582d33-f10a-41fe-85bc-cf2e2880c46e\authorized_test_binary.exe

Linux の場合:

/arcgis/server/usr/directories/arcgissystem/arcgisuploads/if4582d33-f10a-41fe-85bc-cf2e2880c46e/authorized_test_binary

許可されたペネトレーションテストでは、評価用バイナリをアップロードした後に Shell タスクでそれを操作したい場合に必要となるパスです。まず itemID を特定し、次に Administrator Directory から pathOnServer を取得し、それを itemName と組み合わせます。正確なファイル名が不明な場合は、何かを実行する前に Shell タスクを使ってアップロードアイテムのディレクトリを一覧表示してください:

dir "C:\arcgisserver\directories\arcgissystem\arcgisuploads\<itemID>"

またはLinuxの場合:

ls -la "/arcgis/server/usr/directories/arcgissystem/arcgisuploads/<itemID>"

arcgissystem から手動でファイルを削除しないでください。ArcGIS がアップロードメタデータの整合性を保つために、サービスのアップロード削除ページまたは Administrator Directory を使用してください。

サービス定義の再構築

7-Zip をインストールします。

Windows:

winget install 7zip.7zip

Kali/Debian:

sudo apt update
sudo apt install p7zip-full

両方の .sd ファイルを再ビルドします:

python3 package_sd.py ArcGIS_Shell_10.9.1_and_earlier
python3 package_sd.py ArcGIS_Shell_11_or_later

Windows の場合:

python .\package_sd.py .\ArcGIS_Shell_10.9.1_and_earlier
python .\package_sd.py .\ArcGIS_Shell_11_or_later

7-Zip が PATH 上にない場合は、明示的に指定してください:

python3 package_sd.py ArcGIS_Shell_11_or_later --seven-zip /usr/bin/7z

パッケージャは、.sd ルートにある展開済みフォルダの内容をアーカイブします。フォルダ自体は含まれません。

ファイルレイアウト

ArcGIS_Shell.pyt
package_sd.py
ArcGIS_Shell_10.9.1_and_earlier.sd
ArcGIS_Shell_11_or_later.sd
ArcGIS_Shell_10.9.1_and_earlier/
ArcGIS_Shell_11_or_later/

.sd ファイルが公開するものです。抽出されたフォルダは、必要に応じて編集し、package_sd.py で再パッケージ化する対象です。ArcGIS_Shell.pyt は .sd ファイルと抽出されたフォルダに含まれており、リポジトリのルートに置かれているのはレビューの便宜のためだけです。

2026年6月 ArcGIS セキュリティ速報の背景

ツールをダウンロード