はじめに
Nikto は、人気のあるオープンソースのウェブサーバー スキャナーで、6700 を超える潜在的に危険なファイル/プログラム、1250 を超えるサーバーの古いバージョン、270 を超えるサーバーのバージョン固有の問題など、複数の項目に対してウェブサーバーに対して包括的なテストを実行します。デフォルトでは、Nikto は 80 や 443 のような標準的な HTTP/HTTPS ポートをスキャンします。しかし、実際のシナリオでは、ウェブサービスはそれらを隠蔽するために非標準ポートでホストされることがよくあります。
この実験 (Lab) では、ターゲット上の特定の非標準ポートをスキャンするために Nikto を使用する方法を学びます。これは、ポートに関係なく、すべてのウェブ公開サービスが適切に脆弱性の評価を受けていることを確認するための基本的なスキルです。
ターゲット上の非標準 HTTP ポートの特定
このステップでは、まずターゲットマシン上のオープンポートを特定します。Nikto で特定のポートをスキャンする前に、どのポートが開いていて、サービスがホストされている可能性があるかを知る必要があります。この目的のために、強力なネットワークスキャンツールである nmap を使用します。
設定したウェブサーバーを見つけるために、ローカルマシン (localhost) のポート範囲をスキャンしましょう。ポート範囲 8000 から 9000 をスキャンします。
ターミナルで以下のコマンドを実行してください。
nmap -p 8000-9000 localhost
以下のような出力が表示され、ポート 8001 と 8088 が開いていることが示されるはずです。
Starting Nmap 7.80 ( https://nmap.org ) at 2023-10-27 10:00 UTC
Nmap scan report for localhost (127.0.0.1)
Host is up (0.000087s latency).
Not shown: 98 closed ports
PORT STATE SERVICE
8001/tcp open vcom-tunnel
8088/tcp open radan-http
Nmap done: 1 IP address (1 host up) scanned in 0.04 seconds
この出力は、指定した範囲内の非標準ポートで 2 つのサービスが実行されていることを確認します。最初の Nikto スキャンでは、ポート 8088 に焦点を当てます。
ターゲットポートを指定するための -p フラグの使用
このステップでは、ポートスキャンに使用される特定の Nikto フラグについて学びます。デフォルトでは、Nikto はポート 80 をスキャンします。Nikto に別のポートをスキャンするように指示するには、-p (または -port) コマンドラインオプションを使用する必要があります。
構文は簡単です。
nikto -h <ターゲットホスト> -p <ポート番号>
例えば、前のステップで発見したホスト localhost のポート 8088 をスキャンする場合、コマンド構造は次のようになります。
nikto -h localhost -p 8088
このコマンドは、Nikto に完全なテストスイートを実行するように指示しますが、それらすべてをホスト localhost のポート 8088 に向けます。次のステップでは、このコマンドを実行して結果を確認します。
ホストと特定ポートに対するスキャンの実行
ターゲットポートの指定方法がわかったので、スキャンを実行しましょう。前のステップのコマンド構造を使用して、ポート 8088 の localhost に対して Nikto スキャンを開始します。
ターミナルで以下のコマンドを実行してください。
nikto -h localhost -p 8088
Nikto が起動し、その進捗と発見事項を詳細に記した出力が表示されます。出力は以下のようになります(一部の詳細が異なる場合があります)。
- Nikto v2.1.6
---------------------------------------------------------------------------
+ Target IP: 127.0.0.1
+ Target Hostname: localhost
+ Target Port: 8088
+ Start Time: 2023-10-27 10:05:10 (GMT0)
---------------------------------------------------------------------------
+ Server: SimpleHTTP/0.6 Python/3.10.12
+ 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)
+ OSVDB-3092: /cgi-bin/: This might be interesting...
+ 7558 requests: 0 error(s) and 5 item(s) reported on remote host
+ End Time: 2023-10-27 10:05:25 (GMT0) (15 seconds)
---------------------------------------------------------------------------
+ 1 host(s) tested
非標準ポートに対してターゲットを絞った脆弱性スキャンを正常に実行しました。
非標準サービスのスキャンの結果を分析する
このステップでは、先ほど実行した Nikto スキャンの出力を分析します。結果の理解は、スキャンを実行することと同じくらい重要です。
前のステップの出力から得られた主な発見事項を確認しましょう。
+ Target Port: 8088: Nikto が指定したポートを正しくターゲットにしたことを確認します。+ Server: SimpleHTTP/0.6 Python/3.10.12: これは非常に価値のある情報です。Nikto は Web サーバーのソフトウェアとバージョンを特定しました。この場合、Python によって提供されるシンプルなサーバーです。サーバーのテクノロジーを知ることは、攻撃者が特定の攻撃に焦点を当てるのに役立ちます。- セキュリティヘッダーの欠落:
The anti-clickjacking X-Frame-Options header is not presentのような行は、セキュリティ設定の誤りを示しています。これらのヘッダーは、クリックジャッキングやクロスサイトスクリプティング(XSS)のような一般的な攻撃から Web アプリケーションを保護するのに役立ちます。 + OSVDB-3092: /cgi-bin/: This might be interesting...: Nikto はcgi-binという名前のディレクトリを特定しました。このディレクトリは伝統的に実行可能スクリプトを保持しており、脆弱性を探している攻撃者にとって価値の高いターゲットとなります。
この分析は、非標準ポート上のシンプルなサービスでさえ、発見可能な特性と潜在的なセキュリティ上の弱点を持つ可能性があることを示しています。
単一ホストのポート範囲をスキャンする
この最後のステップでは、Nikto にチェックするポートの範囲を指定することで、スキャンをさらに効率化する方法を学びます。これは、nmap スキャンから複数の潜在的なポートを特定した場合や、特定の範囲内でサービスが実行されている可能性があると疑われる場合に非常に役立ちます。
-p フラグは、ハイフンで指定されたポート範囲も受け入れます。構文は次のとおりです。
nikto -h <ターゲットホスト> -p <開始ポート>-<終了ポート>
これを使用して、localhost のポート範囲 8000-8100 をスキャンします。この範囲には、実行中の 2 つの Web サーバー(ポート 8001 および 8088)の両方が含まれます。
以下のコマンドを実行してください。
nikto -h localhost -p 8000-8100
Nikto は指定された範囲内の各ポートを反復処理します。まずポート 8000 をスキャンして何も見つからず、次に 8001 に移動して Web サーバーを見つけ、それをスキャンして結果を報告します。ポート 8100 に到達するまでこのプロセスを継続し、その過程でポート 8088 のサーバーもスキャンします。
出力は広範囲にわたり、見つかった各アクティブポートに対して 2 つの別々のスキャンレポートが表示されます。
- Nikto v2.1.6
---------------------------------------------------------------------------
+ Target IP: 127.0.0.1
+ Target Hostname: localhost
+ Target Port: 8001
... (Results for port 8001) ...
---------------------------------------------------------------------------
+ Target IP: 127.0.0.1
+ Target Hostname: localhost
+ Target Port: 8088
... (Results for port 8088) ...
---------------------------------------------------------------------------
+ 2 host(s) tested
これにより、1 つのコマンドで単一ホスト上の複数のポートをどれだけ効率的にチェックできるかがわかります。
まとめ
この実験では、Nikto のスキャン機能を標準の Web ポート以外に拡張する方法を学びました。まず nmap を使用して、非標準ポートで実行されているサービスを特定しました。次に、Nikto の強力な -p フラグを使用して単一の特定のポートをターゲットにし、結果の出力を分析してサーバーテクノロジーと潜在的な設定ミスを特定しました。
最後に、-p フラグを使用してポート範囲をスキャンする方法を学びました。これは、ターゲット上の隠された Web サービスを効率的に検出するための強力なテクニックです。ターゲットを絞ったスキャンを習得することは、効果的かつ徹底的な Web アプリケーションのセキュリティテストにとって重要なスキルです。


