XXL-JOB は、軽量の分散タスク スケジューリング プラットフォームであり、その中心的な設計目標は、迅速な開発、容易な学習、軽量、容易な拡張です。ソースコードは現在公開されており、多くの企業のオンライン製品ラインに接続されており、すぐに使用できるようになっています。
この脆弱性の中核的な問題は GLUE モードです。 XXL-JOB は、「GLUE モード」を通じて多言語およびスクリプト タスクをサポートします。このモードのタスク機能は次のとおりです:
● 多言語サポート: Java、Shell、Python、NodeJS、 PHP、PowerShell...などのタイプ。
# Web IDE: タスクはソース コード形式でディスパッチ センターに維持され、Web IDE を介してオンライン開発とメンテナンスをサポートします。
# 動的効果: ユーザーが Web IDE を介してオンラインで開発したタスク コードは、リモートの実行プログラムにプッシュされ、実行のためにリアルタイムでロードされます。
#上図に示すように、GLUE モードのタスク コードに攻撃コードを記述し、それをエグゼキュータにプッシュして実行すると、リモート攻撃が発生する可能性があります。攻撃します。
[脆弱性の説明]
XXL-JOB の Restful API インターフェイスまたは RPC インターフェイスには認証手段が設定されていないため、不正な攻撃者が悪意のあるリクエストを作成し、リモートで実行される可能性があります。 .コマンド
[脆弱性評価]
高リスク
[影響を受けるバージョン]
XXL- JOB
全体的なアイデア: ソース コードのダウンロード -> Maven インストールの依存関係 -> 設定とデプロイメント「スケジュール センター」 "- >デプロイメントの設定 "executor プロジェクト"-> デプロイメントの完了
ローカル開発環境: Java8 Maven3.6
1. Github ダウンロード ソース コード
アドレス: https : //github.com/xuxueli/xxl-job/releases/tag/v2.2.0
2.Maven は必要な依存関係をダウンロードします
Idea は、解凍されたソース コードを開き、関連する依存関係を pom に自動的にインストールします。ターミナルで maven コマンドを使用して、必要な依存関係をダウンロードすることもできます。
3. データベース設定
スケジューリング データベース初期化 SQL スクリプトの場所は次のとおりです:
/xxl-job/doc/db/tables_xxl_job.sql
# #ローカルなので mysql をインストールするには、docker を使用してインストールします。 a) docker pull mysql:5.7b) sudo docker run -p 3306:3306 --name mysql -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7This mysql コンテナを開始しました。アカウントは root、パスワードは 123456です。navicat を使用してデータベースに接続します。左下隅をクリックしてテストを完了できます。繋がり。インポートされたデータベースを右クリックし、「SQL ファイルの実行」を選択し、「開始」をクリックしてデータベースのインポートを完了します。
4.「スケジュール センター」の設定と展開
スケジュール センター プロジェクト: xxl-job-admin 機能: タスク スケジューリング プラットフォーム上のスケジューリング タスクを一元管理し、スケジューリングの実行をトリガーし、タスク管理プラットフォームを提供します。実際の状況に応じて、application.properties のデータベース構成を変更できます。#XxlJobAdminApplication を実行してディスパッチ センターを開始します。
推奨されるものを使用します。実行を管理する Springboot 構成ファイルを確認し、xxl.job.executor.logpath パラメータを見つけます。パスを作成または変更して、プログラムの実行に関する問題を防ぐことができます。新しい Mac システムにデータ パスが存在しません。mkdir を使用したパスの作成に失敗したことがわかりました。これは、Mac システムで Sip がオフになっているためです。Sip 制限を削除するには、sudo mount -uw / を使用してください。 XxlJobExecutorApplication を実行してエグゼキューターを開始します。ブラウザで //localhost:8080/ を開き、ログイン インターフェイスを確認します。起動が成功したことを確認してください。デフォルトのログイン アカウントは「admin/123456」です。注:
最初に /data/applogs/xxl-job を作成し、プログラム内の多くの構成ファイルにこのパスを使用することをお勧めしますディスパッチ センター データベース構成の変更
Linux /Unix は lsof を使用してポート占有をチェックし、起動の失敗を防ぐことができます
実際の状況に応じてディスパッチセンターとエグゼキュータを個別に導入可能
公式ドキュメントを参照するとタスクが確認できますエグゼキュータでトリガーされる RESTful API インターフェイスの説明
タスク実行モードは次のとおりです
GulueTypeEnum ソース コードを表示します
そこで、Burpsuite を使用しますPOC を構築するには
ヒント:
glueSource を変更するときに、実行が有効にならない場合は、jobId
When を変更してください。プロジェクトを再起動すると、ポート起動例外が発生したことがわかりました。BurpSuite を閉じてください
XXL-JOB の正式版には独自の認証コンポーネントが付属しているため、システムの基礎となる通信のセキュリティを確保できますオンにしたとき。 XXL-JOB の作成者は、通常の状況では、ディスパッチ センターと実行者の間の基本的な通信は安全であり、リモート コマンドの脆弱性は存在しないと述べています。ただし、アクセス トークンがエグゼキュータで有効になっていない場合、不正なスケジューリング リクエストを特定して阻止することはできません。悪意のある要求者は、GLUE モードを使用して悪意のある攻撃コードをプッシュし、リモート攻撃を実行する可能性があります。したがって、XXL-JOB の作成者は、この問題は本質的に「脆弱性」ではないと考えており、公式 Web サイト版では、保護のために有効にすることができる認証コンポーネントが提供されています。
1. XXL-JOB に付属する認証コンポーネントをオンにします: 公式ドキュメントで「xxl.job.accessToken」を検索し、ドキュメントの指示に従ってください。有効にするだけです。
2. ポートアクセス制限: セキュリティグループ制限を設定することで、指定された IP のみがポートにアクセスできるようになります
以上がXXL-JOB API インターフェイスへの不正アクセスの RCE 脆弱性を再現する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。