はじめに
Nikto は、人気のあるオープンソースのウェブサーバー スキャナーであり、6,700 を超える潜在的に危険なファイル/プログラム、1,250 を超えるサーバーの古いバージョン、および 270 を超えるサーバーのバージョン固有の問題を含む、複数の項目に対してウェブサーバーに対して包括的なテストを実行します。
スキャンを実行すると、結果は通常ターミナルに直接表示されます。ドキュメント化、さらなる分析、またはチームとの共有のためには、この出力をファイルに保存することが不可欠です。Nikto は、さまざまな形式でスキャン レポートを保存するための柔軟なオプションを提供します。
この実験では、Nikto スキャン結果をファイルに保存する方法を学びます。ローカルで実行されているシンプルなウェブサーバーをスキャンすることにより、プレーン テキスト (.txt) およびカンマ区切り値 (.csv) 形式で出力を保存する練習をします。
プレーンテキスト出力形式の選択
このステップでは、Nikto がサポートするさまざまな出力形式を調べます。Nikto はレポート機能にプラグインを使用しており、それらを一覧表示して利用可能な形式を確認できます。
-list-plugins オプションは、レポート用のプラグインを含む、利用可能なすべてのプラグインを表示します。このコマンドを実行して、使用できる形式を確認しましょう。
ターミナルで次のコマンドを実行します。
nikto -list-plugins
長いプラグインのリストが表示されます。出力をスクロールして、「Reporting」セクションを探してください。このセクションには、スキャン結果を保存できるすべてのファイル形式がリストされています。
...
Reporting
--------------------------------------------------
csv - Comma-separated value
htm - HTML Report
json - JSON Report
nbe - Nessus NBE format
sql - SQL (generic)
txt - Plain text
xml - XML
...
ご覧のとおり、txt は「Plain text」形式としてリストされています。まずこの形式を使用します。
出力ファイル名を指定するために -o フラグを使用する
このステップでは、出力ファイルを指定するために使用されるフラグについて学びます。Nikto にレポートをどこに保存するかを伝えるには、-o (または --output) フラグを使用します。
このフラグは、前のステップで選択したファイル形式を指定する -Format フラグと組み合わせて使用する必要があります。基本的な構文は次のとおりです。
nikto -h <target> -Format <format> -o <filename>
-help オプションを使用して、-o フラグの公式な説明を確認しましょう。出力を grep にパイプすることで、関連する行をすばやく見つけることができます。
次のコマンドを実行します。
nikto -help | grep -- "-o "
出力には、-o および --output フラグの使用方法が表示されます。
-o, -output <file> Write output to this file
これで、形式とファイル名の両方を指定する方法がわかりました。次のステップでは、これらを組み合わせてスキャンを実行し、結果を保存します。
スキャンを実行し、テキストファイルを生成する
このステップでは、スキャンを実行し、出力をプレーンテキストファイルに保存します。前のステップからのフラグと情報を組み合わせます。
ターゲットはポート 8000 で実行されているローカル Web サーバーです。このサーバーの URL は http://127.0.0.1:8000 です。
- ターゲットホスト (
-h):http://127.0.0.1:8000 - 形式 (
-Format):txt - 出力ファイル (
-o):scan_report.txt
次に、完全なコマンドを構築し、ターミナルで実行します。すべての操作は、デフォルトの ~/project ディレクトリで実行する必要があります。
nikto -h http://127.0.0.1:8000 -Format txt -o scan_report.txt
Nikto はスキャンを開始します。ターミナルでスキャンの進行状況が表示されますが、最終的なレポートは scan_report.txt ファイルに書き込まれます。スキャンが完了するまでお待ちください。
- Nikto v2.5.0
---------------------------------------------------------------------------
+ Target IP: 127.0.0.1
+ Target Hostname: 127.0.0.1
+ 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-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.
...
+ 1 host(s) tested
コマンドが終了すると、現在のディレクトリ (~/project) に scan_report.txt という名前の新しいファイルが作成されます。
保存されたテキストファイルの内容を確認する
このステップでは、スキャン結果がテキストファイルに正しく保存されたことを確認します。cat のようなコマンドラインツールを使用して、ファイルの内容を表示できます。
scan_report.txt の内容を表示するには、次のコマンドを実行します。
cat scan_report.txt
出力は完全な Nikto レポートであり、スキャン中にターミナルで表示されたものと非常によく似ているはずです。
Nikto V2.5.0
================================================================
+-----------+
| General |
+-----------+
Date: ...
Start Time: ...
End Time: ...
Version: 2.5.0
...
+-----------+
| Target |
+-----------+
IP: 127.0.0.1
Hostname: 127.0.0.1
Port: 8000
...
+-----------+
| Findings |
+-----------+
+ The anti-clickjacking X-Frame-Options header is not present.
...
Nikto スキャンレポートをプレーンテキストファイルに正常に保存しました。このファイルは、簡単に保存、アーカイブ、または共有できるようになりました。
CSV 形式で保存するためにプロセスを繰り返す
このステップでは、スキャン結果を別の形式である CSV(Comma-Separated Values)で保存するために、プロセスを繰り返します。CSV 形式は構造化されており、Excel や LibreOffice Calc のようなスプレッドシートにインポートしたり、スクリプトで処理したりするのに理想的です。
手順はほぼ同じです。-Formatフラグの値をcsvに変更し、.csv拡張子を持つ新しいファイル名を提供するだけです。
- ターゲットホスト (
-h):http://127.0.0.1:8000 - 形式 (
-Format):csv - 出力ファイル (
-o):scan_report.csv
CSV 形式でレポートを生成するには、次のコマンドを実行します。
nikto -h http://127.0.0.1:8000 -Format csv -o scan_report.csv
スキャンが完了すると、scan_report.csvという名前の新しいファイルが作成されます。catコマンドでその内容を見てみましょう。
cat scan_report.csv
出力は、CSV ファイルの標準であるカンマ区切りのフィールドで構造化されます。
"Host","IP","Port","Banner","Date","Vulnerability","Method","Description","Reference"
"127.0.0.1","127.0.0.1","8000","","...","OSVDB-3233: The anti-clickjacking X-Frame-Options header is not present.","GET","",""
"127.0.0.1","127.0.0.1","8000","","...","OSVDB-3092: 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.","GET","",""
...
これで、2 つの異なる形式でレポートを正常に生成し、Nikto の出力オプションの柔軟性を示すことができました。
まとめ
この実験では、Nikto Web サーバースキャナーの出力を管理する方法を学びました。ローカル Web サーバーをスキャンし、結果をファイルに保存して後で利用できるようにしました。
具体的には、以下の練習を行いました。
-list-pluginsオプションを使用して、利用可能な出力形式を一覧表示する。-oおよび-Formatフラグを使用して、出力ファイルとその形式を制御する。- プレーンテキスト(
.txt)でスキャンレポートを生成する。 - カンマ区切り値(
.csv)でスキャンレポートを生成する。
このスキルは、発見事項を文書化したり、オフライン分析を実行したり、スキャン結果をより大きなレポートシステムに統合したりする必要があるすべてのセキュリティ専門家にとって基本的なものです。


