はじめに
Nikto は、人気のあるオープンソースのウェブサーバー スキャナーで、6700 を超える潜在的に危険なファイル/プログラム、1250 を超えるサーバーの古いバージョン、270 を超えるサーバーのバージョン固有の問題など、複数の項目に対してウェブサーバーに対して包括的なテストを実行します。
コマンドラインから Nikto を実行すると、リアルタイムで多くの出力が生成され、対話的な使用に役立ちます。しかし、スクリプトを使用してスキャンを自動化したい場合、この冗長な出力は望ましくない場合があります。
この実験では、-Mute オプションを使用して Nikto スキャンをサイレントに実行する方法を学びます。これは、Nikto を自動化されたセキュリティ ワークフローやシェル スクリプトに統合するための重要なスキルであり、コンソールを散らかすことなく結果をファイルにキャプチャできます。
標準スキャンを実行し、詳細なコンソール出力を確認する
このステップでは、テスト用ウェブサーバーに対して基本的な Nikto スキャンを実行します。これにより、デフォルトの動作とコンソールに表示される情報の量について理解を深めることができます。
まず、標準スキャンを実行しましょう。-h オプションは、ターゲットホストを指定するために使用されます。テストサーバーはローカルのポート 8000 で実行されています。
ターミナルで以下のコマンドを実行してください。
nikto -h http://127.0.0.1:8000
Nikto のバージョンバナー、ターゲット情報、スキャンが進むにつれてのリアルタイムのステータス更新など、多くの出力が表示されます。
- 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.
+ No CGI directories found (use '-C all' to force check all possible dirs)
... (さらに多くの出力行) ...
+ 1 host(s) tested
この詳細な出力は、スキャンをリアルタイムで監視するのに役立ちますが、自動化には理想的ではありません。
-Mute オプションを使用して通常のコンソール出力を抑制する
このステップでは、-Mute オプションを使用してコンソール出力を大幅に削減する方法を学びます。このオプションは、Nikto に対してスキャン中に通常表示される HTTP リクエストとレスポンスを抑制するように指示します。
-Mute オプションは、ステップごとの進行状況ではなく、最終的な検出結果のみに関心がある場合に最適です。
それでは、以前と同じスキャンを実行しますが、コマンドの末尾に -Mute オプションを追加してください。
nikto -h http://127.0.0.1:8000 -Mute
現在の出力を確認してください。はるかにクリーンになっています。バナーとリアルタイムのステータス更新はなくなりました。検出結果の最終的な概要のみが表示されます。
- 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.
+ No CGI directories found (use '-C all' to force check all possible dirs)
+ 1 host(s) tested
ご覧のとおり、出力の煩雑さが大幅に軽減され、スキャンがより大きなプロセスの一部である場合に、解析や読み取りが容易になります。
-Mute と -o を組み合わせて結果をサイレントにファイルに保存する
このステップでは、ミュートをさらに進めます。目標は、コンソールに出力なしでスキャンを実行し、すべての検出結果を直接ファイルに保存することです。これは、自動スクリプティングで最も一般的な要件です。
これを達成するには、-Mute オプションと、出力ファイルを指定する -o (または --output) オプションを組み合わせることができます。
以下のコマンドを実行してください。これによりスキャンが実行され、すべてのコンソール出力が抑制され、レポートが nikto_report.txt という名前のファイルに保存されます。
nikto -h http://127.0.0.1:8000 -Mute -o nikto_report.txt
コマンドを実行した後、ターミナルプロンプトがスキャン結果を何も表示せずにすぐに返ってくることに気づくでしょう。スキャンはバックグラウンドでサイレントに実行されました。
レポートが生成されたことを確認するには、まず現在のディレクトリのファイルを表示します。
ls
リストに nikto_report.txt が表示されるはずです。
nikto_report.txt www
次に、レポートファイルの内容を表示します。
cat nikto_report.txt
ファイルの内容は、前のステップで見たミュートされた出力と同じになります。このテクニックは、ログを保持したり、スキャン結果をプログラムで処理したりするために不可欠です。
サイレントな Nikto スキャンを呼び出す簡単な bash スクリプトを作成する
このステップでは、サイレントな Nikto スキャンを自動化するための簡単な bash スクリプトを作成します。これにより、-Mute および -o オプションが実際の自動化シナリオでどのように使用されるかが実証されます。
まず、nano テキストエディタを使用して scan.sh という名前の新しいファイルを作成します。
nano scan.sh
nano エディタ内で、以下のコンテンツを追加します。このスクリプトは、ユーザーにステータスメッセージを表示し、サイレントな Nikto スキャンを実行し、結果を script_report.txt という名前の新しいファイルに保存します。
#!/bin/bash
echo "Starting silent Nikto scan..."
nikto -h http://127.0.0.1:8000 -Mute -o script_report.txt
echo "Scan complete. Report saved to script_report.txt"
Ctrl+X を押して終了し、Y を押して変更を保存し、Enter を押してファイル名を確認します。
次に、スクリプトを実行可能にする必要があります。chmod コマンドを使用して実行権限を追加します。
chmod +x scan.sh
最後に、新しいスクリプトを実行します。
./scan.sh
スクリプトは「Starting」と「Scan complete」のメッセージを表示しますが、Nikto スキャン自体はコンソールに出力を生成しません。
Starting silent Nikto scan...
Scan complete. Report saved to script_report.txt
再度 ls コマンドを使用して、新しいレポートファイル script_report.txt が作成されたことを確認できます。
スクリプトの終了コードを確認してスキャンの完了を判断する
このステップでは、スクリプトの終了コードを確認する方法を学びます。シェルスクリプトでは、終了コードはコマンドまたはスクリプトが実行を終了した後に返す数値です。終了コード 0 は、慣例的にコマンドが正常に完了したことを意味します。
これは、信頼性の高いスクリプトを構築するための基本的な概念であり、次のステップに進む前にステップが成功したかどうかを確認できます。
まず、スクリプトを再度実行します。
./scan.sh
スクリプトが終了した直後に、特別なシェル変数 $? を調べることで終了コードを確認できます。この変数は、常に最後に実行されたコマンドの終了コードを保持しています。
以下のコマンドを実行します。
echo $?
出力は 0 になるはずです。これは、scan.sh スクリプトがエラーなしで完了したことを示しています。
0
より高度なスクリプトでは、このチェックを if ステートメントで使用して、例えばエラーを処理することができます。
./scan.sh
if [ $? -eq 0 ]; then
echo "Script completed successfully."
else
echo "Script failed with an error."
fi
これにより、スクリプト内でサイレントな Nikto スキャンを確実に実行し、その完了をプログラムで検証できることが確認できます。
まとめ
この実験では、効果的なスクリプト作成と自動化のために Nikto のコンソール出力を制御する方法を学びました。
まず、標準的な Nikto スキャンの詳細な出力を観察しました。次に、-Mute オプションを使用して不要な出力を抑制し、-o オプションを使用してスキャン結果をサイレントにファイルに保存しました。最後に、これらのオプションを bash スクリプトに統合し、スクリプトの終了コードを確認して正常な完了を検証する方法を学びました。
これらのスキルは、Web セキュリティ評価を自動化し、強力で非対話的なセキュリティツールを構築したい人にとって基本的なものです。


