Nikto で以前のスキャンをリプレイおよび再フォーマットする

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

はじめに

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

Nikto の完全なスキャンは、特に大規模で複雑なウェブアプリケーションの場合、時間がかかることがあります。スキャン結果を複数の形式(たとえば、技術レポート用とプレゼンテーション用)で必要とする場合、スキャンを繰り返し実行するのは非効率的です。Nikto は、スキャン結果を保存し、ターゲットを再スキャンすることなくさまざまな形式でレポートを生成するためにそれらを「リプレイ」できる強力な機能を提供します。

この実験では、初期スキャンを実行し、結果を XML ファイルに保存し、次に -replay オプションを使用して効率的に HTML 形式で新しいレポートを生成する方法を学びます。

スキャンを実行し、出力を XML ファイルに保存する

このステップでは、ローカルのテストウェブサーバーに対して基本的な Nikto スキャンを実行します。重要なのは、Nikto が後で解析できる XML のような構造化された形式で出力をファイルに保存することです。-o オプションで出力ファイルを指定し、-Format でファイルタイプを定義します。

まず、~/project ディレクトリにいることを確認してください。セットアップスクリプトは、ポート 8000localhost でシンプルなウェブサーバーを既に起動しています。

次に、ターミナルで以下のコマンドを実行して、ローカルウェブサーバーをスキャンし、結果を scan_results.xml という名前のファイルに保存します。

nikto -h http://localhost:8000 -o scan_results.xml -Format xml

このコマンドの内訳を見てみましょう。

  • nikto: Nikto スキャナーを実行するコマンドです。
  • -h http://localhost:8000: スキャンするホスト(ターゲット)を指定します。
  • -o scan_results.xml: 出力ファイル名を指定します。
  • -Format xml: Nikto に出力を XML 形式で保存するように指示します。

スキャンが完了するまでしばらく時間がかかります。ターミナルには以下のような出力が表示されます(詳細は異なる場合があります)。

- Nikto v2.5.0
---------------------------------------------------------------------------
+ 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-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)
+ Allowed HTTP Methods: GET, HEAD, OPTIONS
+ Public HTTP Methods: GET, HEAD, OPTIONS
...
+ 1 host(s) tested

コマンドが終了すると、現在のディレクトリ(~/project)に scan_results.xml という名前のファイルが作成されます。

保存された XML ファイルで -replay オプションを使用する

このステップでは、Nikto の -replay 機能の使用方法を学びます。このオプションを使用すると、Nikto は以前に保存された XML スキャンファイルを解析し、ターゲットサーバーに再度接続することなく検出結果を表示できます。これは、結果をすばやく確認する場合や、ターゲットがオンラインでなくなった場合に非常に役立ちます。

先ほど保存したスキャンをリプレイするには、次のコマンドを使用します。

nikto -replay scan_results.xml

このコマンドは、Nikto に scan_results.xml ファイルを読み込み、検出結果をターミナルに出力するように指示します。出力は元のスキャンのターミナル出力とほぼ同じように見えますが、ファイルから即座に生成されます。

- Nikto v2.5.0
---------------------------------------------------------------------------
+ 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-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

コマンドがどれだけ速く完了したかに注目してください。これは、Nikto が新しいネットワークスキャンを実行しているのではなく、ローカルファイルから読み取っていることを示しています。

-Format htm を使用して新しい HTML レポートを生成する

このステップでは、-replay オプションと -Format オプションを組み合わせて、新しい形式のレポートを生成します。これがこの実験の主な教訓です。保存された 1 つのスキャンから複数の種類のレポートを作成できます。

たとえば、プレゼンテーション用に整形された HTML レポートが必要になったとします。保存された scan_results.xml ファイルから直接生成できます。

次のコマンドを実行します。

nikto -replay scan_results.xml -o report.html -Format htm

新しいコマンドの内訳は次のとおりです。

  • nikto -replay scan_results.xml: この部分は前のステップと同じです。保存されたデータを使用するように Nikto に指示します。
  • -o report.html: report.html という新しい出力ファイルを指定します。
  • -Format htm: 出力を HTML ファイルとしてフォーマットするように Nikto に指示します。

このコマンドは非常に速く実行され、レポートは直接 report.html ファイルに書き込まれるため、ターミナルへの出力は最小限になります。

- Nikto v2.5.0
+ 1 host(s) tested

ターゲットを再スキャンすることなく、別の形式で新しいレポートを正常に生成しました。

新しいレポートが再スキャンなしで作成されたことを確認する

このステップでは、新しい HTML レポートファイルが作成されたことを確認し、有効な HTML コンテンツが含まれていることを確認します。これにより、前のコマンドがファイルベースのレポートを生成したという理解が深まります。

まず、現在のディレクトリ (~/project) のファイルを表示して、新しく作成されたレポートを確認します。

ls -l

出力には、元の XML ファイルと新しい HTML ファイルの両方が表示されるはずです。

total 12
-rw-r--r-- 1 labex labex  68 ... index.html
-rw-r--r-- 1 labex labex ... ... report.html
-rw-r--r-- 1 labex labex ... ... scan_results.xml

次に、新しいレポートのコンテンツをすばやく確認するために、head コマンドを使用して report.html ファイルの最初の数行を表示できます。

head report.html

出力には HTML ドキュメントの冒頭が表示され、ファイルが正しく作成されたことを確認できます。

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
  <head>
    <title>Nikto Report</title>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
    <style type="text/css">
...

最も重要な観察結果は速度です。ステップ 3 のコマンドはほぼ瞬時に完了しましたが、ステップ 1 の元のスキャンにはかなりの時間がかかりました。これは、新しい時間のかかるスキャンを実行しているのではなく、既存のデータを再フォーマットしていることの確実な証拠です。

保存された結果のリプレイによる効率性を理解する

この最終ステップでは、リプレイ機能を使用することによって得られる効率性についての理解を深めます。さらに詳細な分析のためにスプレッドシートにインポートする必要がある CSV (Comma-Separated Values) 形式の結果も必要になったと想像してください。別のスキャンを実行する代わりに、同じ scan_results.xml ファイルから別のレポートを生成するだけです。

CSV レポートを作成するには、次のコマンドを実行します。

nikto -replay scan_results.xml -o report.csv -Format csv

このコマンドは HTML 用のコマンドとまったく同じ構造ですが、新しいファイル名 (report.csv) と新しい形式 (csv) を指定しています。これも数秒で完了します。

次に、ファイルを再度一覧表示して、生成されたすべてのレポートを確認します。

ls -l

これで、すべて 1 回のスキャンから生成された 3 つのレポートファイルが表示されます。

total 16
-rw-r--r-- 1 labex labex  68 ... index.html
-rw-r--r-- 1 labex labex ... ... report.csv
-rw-r--r-- 1 labex labex ... ... report.html
-rw-r--r-- 1 labex labex ... ... scan_results.xml

このワークフロー—一度スキャンして、複数回レポートを作成する—は、効率的な脆弱性評価の基盤です。数時間かかる可能性のある大規模なスキャンの場合、この機能は膨大な時間と計算リソースを節約し、スキャンの完了を待つのではなく、結果の分析に集中することを可能にします。

まとめ

この実験では、Nikto スキャン結果を扱うための非常に効率的なワークフローを学びました。Web サーバーのスキャンを正常に実行し、その結果を XML ファイルに保存しました。その後、強力な -replay オプションを使用して、この保存されたデータを解析し、時間のかかるネットワークスキャンを再実行することなく、異なる形式(HTML および CSV)で新しいレポートを生成しました。

練習した主要なコマンドと概念は次のとおりです。

  • nikto -h [host] -o [file.xml] -Format xml: スキャンを実行し、結果を保存します。
  • nikto -replay [file.xml] -o [new_report] -Format [htm/csv/txt]: 保存されたデータから新しいレポートを生成します。

スキャンフェーズとレポートフェーズを分離するこのテクニックは、効率的なセキュリティテストと分析にとって非常に重要です。