はじめに
この実験では、情報セキュリティの重要な側面である Web アプリケーションのペネトレーションテストについて学びます。Web アプリケーションはさまざまな分野で広く利用されており、そのセキュリティ確保は最優先事項です。本実験の目的は、ターゲットマシン上でホストされている脆弱な Web アプリケーションを使用して、脆弱性の特定と悪用に関する実践的な経験を積むことです。一般的な Web アプリケーションの脆弱性と、それらを悪用するためのテクニックを理解することを目指します。
環境のセットアップ
このステップでは、実験環境をセットアップし、ツールとターゲットシステムに慣れていきます。
まず、デスクトップ上の xfce ターミナルをダブルクリックし、以下のコマンドを実行して Kali Linux イメージの ID を確認します。
docker images
次に、攻撃マシンとなる Kali Linux コンテナを起動します。ターミナルを開き、以下のコマンドを実行してください。
docker run -ti --network host image-id bash
このコマンドにより、新しい Kali Linux コンテナが起動し、そのシェルを操作できるようになります。
続いて、別のターミナルを開き、ターゲットマシンである脆弱なシステム「Metasploitable2」を起動します。以下のコマンドを実行して仮想マシンを起動してください。
sudo virsh start Metasploitable2
ターゲットマシンが起動するまで 1〜3 分ほど待ちます。
仮想マシンが起動したら、Kali Linux コンテナからターゲットマシンに ping が通ることを確認します。
ping 192.168.122.102
偵察と情報収集
このステップでは、さまざまなテクニックを使用してターゲットシステムに関する偵察と情報収集を行います。
まず、Kali Linux コンテナ内の nmap ツールを使用してターゲットマシンをスキャンし、開いているポートと実行中のサービスを特定します。
nmap -sV -sC -oN nmap_scan.txt 192.168.122.102
このコマンドは、TCP 接続スキャン (-sC) を実行して開いているポートを特定し、バージョン検出スキャン (-sV) を実行して各ポートで実行されているサービスとバージョンを特定します。出力結果は nmap_scan.txt (-oN) という名前のファイルに保存されます。
スキャンには時間がかかります。完了後、cat コマンドを使用して nmap_scan.txt ファイルを確認し、開いているポートとサービスに基づいて攻撃の足がかりとなる箇所を特定します。
cat nmap_scan.txt
次に、gobuster ツールを使用して、ターゲット Web サーバーのディレクトリとファイルの列挙を行います。
gobuster dir -u http://192.168.122.102 -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt -t 30 -o gobuster_scan.txt
このコマンドは、指定したワードリスト (-w) を使用して、ターゲット Web サーバー上のディレクトリとファイルを総当たりで検索します。-t オプションは同時実行スレッド数を指定し、-o オプションは出力結果を gobuster_scan.txt というファイルに保存します。
gobuster_scan.txt ファイルを分析し、追加情報や攻撃の足がかりとなりそうな興味深いディレクトリやファイルがないか確認してください。
脆弱性の悪用
このステップでは、前のステップで特定した脆弱性の悪用を試みます。
nmap と gobuster のスキャンから得られた情報に基づき、ターゲットシステムの潜在的な脆弱性を特定します。Metasploitable2 には脆弱なトレーニング用アプリケーション「Mutillidae」が含まれているため、ここではプレースホルダーの URL ではなく、そのアプリケーションの実際のページをテストします。
Web アプリケーションによく見られる脆弱性に SQL インジェクションがあります。Mutillidae の user-info.php ページはクエリ文字列で username パラメータを受け付けるため、Kali Linux コンテナ内の sqlmap にとって具体的なターゲットとなります。
sqlmap -u "http://192.168.122.102/mutillidae/index.php?page=user-info.php&username=admin&password=admin&user-info-php-submit-button=View+Account+Details" -p username --batch --risk=3 --level=5 --random-agent --dbs
このコマンドは、ターゲット VM 上の実際の Mutillidae エンドポイントをテストします。-u オプションは脆弱な完全な URL を指定し、-p username は sqlmap が注目すべきパラメータを指示します。--batch は非対話モードで実行し、--risk=3 と --level=5 はより詳細なテストを有効にし、--random-agent はユーザーエージェント文字列をランダムに変更します。そして --dbs は、悪用に成功した場合にデータベース名を列挙するよう sqlmap に指示します。
悪用しようとしている脆弱性に応じて、異なるツールやテクニックが必要になる場合があります。特定の脆弱性やツールについては、ドキュメントやリソースを参照してください。
侵入後の活動と権限昇格
このステップでは、偵察中に発見されたサービス公開を利用して、ターゲットシステムへのシェルアクセスを確認し、侵入後の基本的な証拠を収集します。
Metasploitable2 の nmap スキャンでは、通常 TCP ポート 1524 が開いていることがわかります。この VM では、そのサービスが root シェルを提供しているため、別途リバースシェルが存在すると仮定するのではなく、Kali Linux コンテナから直接接続することができます。
Kali Linux コンテナで以下のコマンドを実行してください。
printf 'id\nuname -a\nexit\n' | nc 192.168.122.102 1524
これは、ターゲット VM 上の公開されたシェルサービスに 3 つのコマンドを送信します。id コマンドはサービスが提供するアカウントを確認し、uname -a はカーネル情報を記録し、exit は出力がターミナルに表示された後にシェルをクリーンに終了させます。
接続が成功すれば、uid=0(root) を含む出力と Metasploitable2 のカーネル詳細が表示されるはずです。この出力は、侵入後のフェーズでシェルアクセスに成功したことを証明するのに十分です。
実際の評価業務では、この公開されたサービスは、追加の攻撃チェーンなしで即座に特権アクセスを許可してしまうため、重大な発見事項として文書化することになります。
まとめ
この実験では、Web アプリケーションのペネトレーションテストについて学び、ターゲットマシン上でホストされている脆弱な Web アプリケーションを使用して、脆弱性の特定と悪用に関する実践的な経験を積みました。偵察、Web アプリケーションの列挙、sqlmap を使用した SQL インジェクションのテスト、および基本的な侵入後の検証について網羅しました。
この実験は、現実世界のシナリオを練習し、Web アプリケーションセキュリティのスキルを開発するための制御された環境を提供しました。各ステップに従うことで、実験環境のセットアップ方法、偵察と情報収集の実行方法、SQL インジェクションに対する実際の Mutillidae エンドポイントのテスト方法、そしてターゲットシステム上の公開サービスを通じたシェルアクセスの確認方法を学びました。
この実験を通じて、Web アプリケーションを保護し、悪意のある攻撃者に悪用される前に潜在的な脆弱性を特定するために不可欠な、Web アプリケーションのペネトレーションテストに関する実践的な知識と経験を身につけることができました。



