Nikto における CGI ディレクトリスキャンの制御

Kali LinuxBeginner
オンラインで実践に進む

はじめに

Nikto は、人気のあるオープンソースのウェブサーバー スキャナーであり、6,700 を超える潜在的に危険なファイル/プログラム、1,250 を超えるサーバーの古いバージョン、270 を超えるサーバーのバージョン固有の問題など、複数の項目に対してウェブサーバーに対して包括的なテストを実行します。

その主な機能の 1 つは、Common Gateway Interface (CGI) ディレクトリのスキャンです。CGI スクリプトは、適切に保護されていない場合、重大な脆弱性の原因となる可能性があります。デフォルトでは、Nikto は一般的な CGI ディレクトリの定義済みリストをスキャンします。ただし、より効率的でターゲットを絞ったスキャンを行うには、この動作を制御する方法を知ることが重要です。

この実験では、Nikto の -Cgidirs オプションを使用して、CGI ディレクトリのスキャンを無効にする方法、可能なすべてのディレクトリをスキャンする方法、およびテストするカスタムディレクトリを指定する方法を学びます。

Nikto のデフォルト CGI ディレクトリ スキャン動作を理解する

このステップでは、簡単なウェブサーバーを起動し、デフォルトの Nikto スキャンを実行して、CGI ディレクトリを見つけるための標準的な動作を観察します。

まず、スキャン対象の簡単なウェブサーバーをセットアップしましょう。ここでは Python の組み込み http.server モジュールを使用します。

お客様のために準備された webroot ディレクトリに移動してください。

cd ~/project/webroot

次に、ポート 8000 でウェブサーバーを起動します。コマンドの末尾にある & は、サーバーをバックグラウンドで実行し、ターミナルを引き続き使用できるようにします。

python3 -m http.server 8000 &

サーバーが実行されていることを示すメッセージが表示されるはずです。

Serving HTTP on 0.0.0.0 port 8000 (http://0.0.0.0:8000/) ...

サーバーが実行されている状態で、基本的な Nikto スキャンを実行しましょう。-h オプションは、ターゲットホストを指定するために使用されます。

nikto -h http://localhost:8000

スキャンが完了したら、出力を確認してください。Nikto は多くの項目をチェックしますが、/cgi-bin/ ディレクトリが見つかったことを示す行が見つかるはずです。これは、/cgi-bin/ が Nikto がデフォルトでチェックする一般的なディレクトリの 1 つであるためです。

- Nikto v2.x
---------------------------------------------------------------------------
+ Target IP:          127.0.0.1
+ Target Hostname:    localhost
+ Target Port:        8000
+ Start Time:         ...
---------------------------------------------------------------------------
+ Server: SimpleHTTP/0.6 Python/3.10.6
+ The anti-clickjacking X-Frame-Options header is not present.
+ The X-XSS-Protection header is not defined. This header can hint to the user agent to protect against some forms of XSS
+ The X-Content-Type-Options header is not set. This could allow the user agent to render the content of the site in a different fashion to the MIME type
+ No CGI directories found (use '-C all' to force check all possible dirs)
+ "robots.txt" not found.
+ OSVDB-3233: /: HTTP TRACE method is active, suggesting the host is vulnerable to XST
+ OSVDB-3092: /: This might be interesting...
+ /index.html: This might be interesting...
+ 7 items found on remote host
+ End Time:           ...
---------------------------------------------------------------------------
+ 1 host(s) tested

注意:一部の新しい Nikto のバージョンまたは設定では、特定のテストがトリガーされない限り、デフォルトのスキャンで /cgi-bin/ が報告されない場合があります。重要な点は、デフォルトのパスセットがチェックされていることを理解することです。次のステップでこれらのチェックを強制して、より明確な結果を確認します。

-Cgidirs none を使用してすべての CGI ディレクトリ スキャンを無効にする

このステップでは、CGI ディレクトリ スキャンを完全に無効にする方法を学びます。これは、他の脆弱性に焦点を当てた迅速なスキャンを実行したい場合や、ターゲットサーバーが CGI スクリプトを使用していないと確信している場合に役立ちます。

-Cgidirs オプションは CGI スキャンを制御します。その値を none に設定することで、Nikto にこのテスト部分を完全にスキップするように指示します。

CGI スキャンを無効にして、サーバーを再度スキャンするには、次のコマンドを実行します。

nikto -h http://localhost:8000 -Cgidirs none

出力を確認してください。以前のスキャンと非常に似ていますが、CGI ディレクトリがスキャンされなかったことが明示的に確認されます。No CGI directories found という行は引き続き表示されますが、今回は Nikto にそれらを検索しないように指示したためです。これにより、スキャンがわずかに速くなります。

- Nikto v2.x
---------------------------------------------------------------------------
+ Target IP:          127.0.0.1
+ Target Hostname:    localhost
+ Target Port:        8000
+ Start Time:         ...
---------------------------------------------------------------------------
+ Server: SimpleHTTP/0.6 Python/3.10.6
+ The anti-clickjacking X-Frame-Options header is not present.
+ The X-XSS-Protection header is not defined. This header can hint to the user agent to protect against some forms of XSS
+ The X-Content-Type-Options header is not set. This could allow the user agent to render the content of the site in a different fashion to the MIME type
+ CGI directory scanning has been disabled.
+ "robots.txt" not found.
+ OSVDB-3233: /: HTTP TRACE method is active, suggesting the host is vulnerable to XST
+ OSVDB-3092: /: This might be interesting...
+ /index.html: This might be interesting...
+ 7 items found on remote host
+ End Time:           ...
---------------------------------------------------------------------------
+ 1 host(s) tested

コマンドが期待どおりに機能したことを確認する + CGI directory scanning has been disabled. という行に注目してください。

-Cgidirs all を使用してすべての設定済み CGI ディレクトリをスキャンする

このステップでは、-Cgidirs オプションに all 値を使用します。これにより、Nikto は内部設定にリストされているすべてのディレクトリをチェックすることで、最も包括的な CGI スキャンを実行するように強制されます。これはデフォルトのスキャンよりも詳細です。

-Cgidirs all オプションを使用して Nikto スキャンを実行します。

nikto -h http://localhost:8000 -Cgidirs all

次に、出力を注意深く確認してください。今回は、テストサーバーに /cgi-bin/ が存在し、all フラグがチェックを確実に実行するため、Nikto は /cgi-bin/ ディレクトリを明示的に報告します。

- Nikto v2.x
---------------------------------------------------------------------------
+ Target IP:          127.0.0.1
+ Target Hostname:    localhost
+ Target Port:        8000
+ Start Time:         ...
---------------------------------------------------------------------------
+ Server: SimpleHTTP/0.6 Python/3.10.6
+ The anti-clickjacking X-Frame-Options header is not present.
+ The X-XSS-Protection header is not defined. This header can hint to the user agent to protect against some forms of XSS
+ The X-Content-Type-Options header is not set. This could allow the user agent to render the content of the site in a different fashion to the MIME type
+ OSVDB-3233: /cgi-bin/: Directory indexing found.
+ OSVDB-3092: /cgi-bin/: This might be interesting...
+ "robots.txt" not found.
+ OSVDB-3233: /: HTTP TRACE method is active, suggesting the host is vulnerable to XST
+ OSVDB-3092: /: This might be interesting...
+ /index.html: This might be interesting...
+ 8 items found on remote host
+ End Time:           ...
---------------------------------------------------------------------------
+ 1 host(s) tested

/cgi-bin/ に関連する 2 つの新しい発見があり、強制スキャンが成功したことを確認できます。

スキャン対象のカスタム CGI ディレクトリパスを指定する

このステップでは、特定の非標準 CGI ディレクトリをスキャンする方法を学びます。これは、スクリプトがユニークな場所に配置されているカスタム Web アプリケーションを評価する際に非常に役立ちます。

私たちのセットアップには /cgi-custom/ という名前のディレクトリが含まれています。デフォルトの Nikto スキャンではこれを見つけることはできません。-Cgidirs オプションにパスを渡すことで、Nikto にこれを特定してチェックするように指示できます。

/cgi-custom/ ディレクトリのみをスキャンするには、次のコマンドを実行します。

nikto -h http://localhost:8000 -Cgidirs /cgi-custom/

出力を確認してください。Nikto は /cgi-custom/ を見つけたことを報告します。指定したパスにスキャンを限定したため、/cgi-bin/ は報告されません。

- Nikto v2.x
---------------------------------------------------------------------------
+ Target IP:          127.0.0.1
+ Target Hostname:    localhost
+ Target Port:        8000
+ Start Time:         ...
---------------------------------------------------------------------------
+ Server: SimpleHTTP/0.6 Python/3.10.6
+ The anti-clickjacking X-Frame-Options header is not present.
+ The X-XSS-Protection header is not defined. This header can hint to the user agent to protect against some forms of XSS
+ The X-Content-Type-Options header is not set. This could allow the user agent to render the content of the site in a different fashion to the MIME type
+ OSVDB-3233: /cgi-custom/: Directory indexing found.
+ OSVDB-3092: /cgi-custom/: This might be interesting...
+ "robots.txt" not found.
+ OSVDB-3233: /: HTTP TRACE method is active, suggesting the host is vulnerable to XST
+ OSVDB-3092: /: This might be interesting...
+ /index.html: This might be interesting...
+ 8 items found on remote host
+ End Time:           ...
---------------------------------------------------------------------------
+ 1 host(s) tested

ご覧のとおり、スキャンはカスタムディレクトリを正常に特定しました。これにより、Nikto の CGI スキャンを特定のニーズに合わせて調整する方法を示すことができます。

異なる CGI スキャン戦略の結果を比較する

最終ステップとして、これまで使用したさまざまなスキャン戦略の結果を確認し、比較しましょう。これにより、Nikto の CGI スキャンを制御する方法についての理解を深めることができます。

あなたは 4 つの異なるタイプのスキャンを実行しました。

  1. デフォルトスキャン (nikto -h ...): 一般的なディレクトリのデフォルトリストをスキャンしました。この場合、最初は /cgi-bin/ をフラグ付けしませんでしたが、ディレクトリは存在していました。このスキャンは良いベースラインを提供します。
  2. CGI スキャンなし (-Cgidirs none): すべての CGI ディレクトリチェックを完全にスキップしました。出力は CGI directory scanning has been disabled と確認されました。CGI をチェックする必要がない場合は、これが最も高速なオプションです。
  3. すべての CGI スキャン (-Cgidirs all): Nikto が認識しているすべての CGI ディレクトリのチェックを強制しました。このスキャンは、/cgi-bin/ ディレクトリを正常に見つけて報告しました。これは最も徹底的ですが、最も遅いオプションでもあります。
  4. カスタム CGI スキャン (-Cgidirs /cgi-custom/): 特定のディレクトリ /cgi-custom/ のみをスキャンし、正常に見つけました。/cgi-bin/ のような他のすべてのディレクトリは無視されました。これは最もターゲットを絞ったアプローチです。

適切な戦略の選択は、あなたの目標によって異なります。

  • 簡単な概要を得るには、デフォルトスキャンで十分な場合が多いです。
  • 完全に徹底的に行うには、**all** を使用します。
  • CGI が存在しないことがわかっているサーバーで時間を節約するには、**none** を使用します。
  • カスタムアプリケーションの場合、カスタムパスを指定するのが最も効率的な方法です。

最後に、Python Web サーバーを停止してクリーンアップしましょう。これはあなたが開始した最初の、そして唯一のバックグラウンドジョブだったので、kill %1 コマンドで停止できます。

kill %1

「Terminated」というメッセージが表示され、サーバーがシャットダウンされたことを確認できます。

まとめ

この実験では、Nikto における CGI ディレクトリのスキャンを制御する実践的な経験を積みました。テスト目的でシンプルな Web サーバーを起動し、-Cgidirs オプションを使用してさまざまなスキャン戦略を適用する方法を学びました。

あなたは以下のことを成功させました。

  • デフォルトの Nikto スキャンを実行しました。
  • -Cgidirs none を使用して CGI スキャンを完全に無効にしました。
  • -Cgidirs all を使用して、既知のすべての CGI ディレクトリの包括的なスキャンを実施しました。
  • カスタムパスを指定して、特定の非標準ディレクトリをターゲットにしました。

これらのオプションを習得することで、ターゲットの特定の特性に合わせてテストを調整し、Nikto を使用して、より効率的でターゲットを絞った、効果的な Web サーバーの脆弱性スキャンを実行できるようになります。