
意図的に脆弱なクライアント・サーバーアプリケーションで、非HTTPのシッククライアントのペネトレーションテストを学ぶためのものです。SQLインジェクション、RCE、XML攻撃、バッファオーバーリード、アクセス制御の脆弱性に関するチャレンジが含まれています。
脆弱なクライアント-サーバーアプリケーション (VuCSA) は、非HTTPのクライアント-サーバーアプリケーションに対するペネトレーションテストの方法を学習・説明するために作られています。 Java(JavaFX グラフィカルユーザーインターフェース)で書かれています。
現在、この脆弱なアプリケーションには以下のチャレンジが含まれています:
これらのチャレンジの解き方を知りたい場合は、PETEP ウェブサイトを参照してください。このサイトでは、オープンソースツール PETEP を使用してそれらを悪用する方法が説明されています。
ヒント 1: ハッキングを始める前に、以下のメッセージのデータ構造を必ず確認してください。ネットワークトラフィックを変更する際には、特にペイロード長のバイトを考慮する必要があります。
ヒント 2: ほとんどのチャレンジは、ネットワークトラフィックの変更を通じて悪用できます。そのため、テストには TCP プロキシまたはプロセスフックの使用が推奨されます。
ヒント 3: 一部のチャレンジでは、入力検証と制限が設定されています。これはシッククライアントでは一般的ですが、サーバーが同じ検証を使用しているとは限りません。
このチャレンジの目標は、クライアントとサーバー間のネットワークトラフィックを操作して、バッファオーバーリードを引き起こすことです。
コマンド実行チャレンジは、非常に単純なコマンド実行の脆弱性を表しています。目標は、サーバー上で悪意のあるコマンドを実行することです。
SQLインジェクションチャレンジには、SQLインジェクションに対して脆弱な検索入力が含まれています。しかし、すぐに気づくでしょうが、その入力では必要な文字を入力することはできません。
列挙チャレンジは、列挙から保護されていないシミュレートされたログインフォームに基づいています。5人のユーザー全員を見つけて、そのパスワードを推測できますか?
このチャレンジでは、複数の XML の脆弱性を見つけることができます:
水平アクセス制御チャレンジは、ユーザーが自分のドキュメントを表示し、その内容を読むことができるドキュメントリーダーを表しています。目標は、他のユーザーのドキュメントを5つ見つけることです。
垂直アクセス制御チャレンジは、ユーザーの基本情報を表示するシミュレートされたユーザーパネルに基づいています。目標は、隠された管理者機能を見つけ、ゲストユーザーとしてそれを使用できるかどうかを確認することです。
RCE デシリアライゼーションの脆弱性は、ネットワーク経由でデータを送信するために Java のデシリアライゼーション/シリアライゼーションを使用します。アプリケーションには、脆弱な Java デシリアライゼーションを通じてリモートコード実行を達成するために使用できる2つのパスがあります。
サーバーの JAR ファイルを調べるか、ソースコードを確認することで、両方のパスを見つけることができます。
目標は、両方のパスに対するエクスプロイトを作成し、サーバー上で悪意のあるコマンドを実行することです。
ヒント: エクスプロイトの作成を容易にするために、サーバー JAR をライブラリとして使用できます。
Java 11 以上が必要です。
注記: ARM64 アーキテクチャ(M1、M2 チップ)の Mac の場合は、Java 17 用の特別なビルドを使用してください。
脆弱なサーバーとクライアントを実行するには、GitHub のリリースのいずれかを使用するか、gradle assemble を実行して配布パッケージ(Windows および Unix の両方)を作成できます。これらのパッケージには、JVM を使用してサーバーとクライアントを実行する sh/bat スクリプトが含まれています。
# Linux / Mac
chmod +x client.sh server.sh
./client.sh
./server.sh
# Windows
client.bat
server.bat
注記: これらの実行スクリプトには、Java 実行可能ファイルへのパスを含む便利な変数が含まれています。Java が PATH にない場合や、複数の Java バージョンを使用している場合は、変更する必要があるかもしれません。
サーバー設定は、存在しない場合は自動的に作成され、その後、サーバーが実行されている同じディレクトリにある server.json から読み込まれます:
{
"network": {
"serverHost": "0.0.0.0",
"serverPort": 8765
}
}
クライアント設定は、実行中のアプリケーションで指定できます。
プロジェクトは3つのモジュールに分かれています:
サーバーとクライアント間で送信されるメッセージは、以下の単純な形式を持っています:
[タイプ][ターゲット][長さ][ペイロード]
32b 32b 32b ???
これらの4つの部分は以下の意味を持っています:
カスタムペイロードを送信するには、ペイロードの長さを更新する必要があるかもしれません。そうしないと、正しく動作しません。チュートリアルでは、ペイロード長のバイトを自動修正するスクリプトが開発されています。
脆弱なクライアント-サーバーアプリケーション(VuCSA)には複数の脆弱性が含まれており、さまざまな方法で悪用できます。これらの脆弱性を悪用するための公式ガイドでは、オープンソースの PEnetration TEsting Proxy(PETEP 方法論を参照)を使用しています。
PETEP 方法論では、有用なペイロードを含め、チャレンジを悪用する全プロセスが説明されています。