はじめに
Nikto は、人気のあるオープンソースのウェブサーバー スキャナーであり、6,700 を超える潜在的に危険なファイル/プログラム、1,250 を超えるサーバーの古いバージョン、および 270 を超えるサーバーのバージョン固有の問題を含む、複数の項目に対してウェブサーバーに対して包括的なテストを実行します。
多くのウェブアプリケーションには、ユーザーが有効な認証情報を提供した後にのみアクセスできる制限された領域があります。HTTP Basic Authentication は、これらの領域を保護するために使用される最も単純な方法の 1 つです。徹底的なセキュリティ評価を実行するには、これらの認証済みセクションをスキャンすることが重要です。
この実験では、Basic Authentication によって保護されたウェブディレクトリに対して認証済みスキャンを実行するために Nikto を使用する方法を学びます。-id オプションを使用して必要な認証情報を提供し、Nikto が保護されたリソースにアクセスして脆弱性をテストできるようにします。
Basic Authentication で保護されたウェブリソースの特定
このステップでは、まず対象のウェブリソースが実際に Basic Authentication によって保護されていることを確認します。これをチェックする一般的な方法は、curl コマンドを使用して、リソースにアクセスしようとしたときにサーバーから返される HTTP ヘッダーを検査することです。
保護されていないリソースは 200 OK ステータスを返しますが、保護されているリソースは 401 Unauthorized ステータスと WWW-Authenticate ヘッダーを返し、必要な認証の種類を示します。
curl コマンドと -I オプション(HTTP ヘッダーのみを取得します)を使用して、保護されたディレクトリ http://localhost/protected/ にアクセスしてみましょう。
ターミナルで以下のコマンドを実行してください。
curl -I http://localhost/protected/
以下のような出力が表示されるはずです。HTTP/1.1 401 Unauthorized ステータスと WWW-Authenticate: Basic realm="..." ヘッダーに注目してください。これにより、ディレクトリが保護されていることが確認できます。
HTTP/1.1 401 Unauthorized
Date: [current_date]
Server: Apache/2.4.52 (Ubuntu)
WWW-Authenticate: Basic realm="Restricted Content"
Content-Type: text/html; charset=iso-8859-1
必要なユーザー名とパスワードの取得
このステップでは、保護された領域にアクセスするために必要な認証情報を確認します。実際のペネトレーションテストでは、パスワード推測、公開コードリポジトリでの発見、ソーシャルエンジニアリングなど、さまざまな手段でこれらの情報を取得する可能性があります。
この実験では、環境は特定のユーザー名とパスワードで事前に設定されています。認証済みスキャンを実行するために、後続のステップでこれらの認証情報が必要になります。
認証情報は以下の通りです。
- ユーザー名:
labex - パスワード:
P@ssw0rd123
このステップで実行するコマンドはありません。上記の認証情報をメモしておき、次のステップに進んで認証に使用してください。
'user:password' 形式の -id オプションの使用
このステップでは、HTTP 認証の認証情報を提供するために使用される Nikto の -id オプションについて学びます。この形式は、ユーザー名とパスワードをコロン (:) で区切った単一の文字列です。
構文は次のとおりです。-id <username>:<password>
Nikto でこれを使用する前に、認証情報が機能するかどうかを確認するのが良い習慣です。これは curl を使用して再度行うことができます。今回は --user オプションを使用して認証情報を提供します。
正しい認証情報で保護されたページにアクセスするには、次のコマンドを実行します。
curl --user labex:P@ssw0rd123 http://localhost/protected/
認証情報が正しい場合、サーバーはアクセスを許可し、以下に示すようにページのコンテンツを返します。これにより、正常に認証できることが確認できます。
This is a protected page accessible only with credentials.
これで認証情報を確認し、形式を理解したので、Nikto スキャンで使用する準備が整いました。
保護された領域に対する認証済みスキャンの実行
このステップでは、前のステップで学んだ知識を組み合わせて、Nikto で完全な認証済みスキャンを実行します。ターゲットホストと認証情報を指定する必要があります。
コマンドの構造は次のようになります。
nikto: 実行するプログラム。-h http://localhost/protected/: スキャンしたいディレクトリを直接指定する-h(ホスト) オプション。-id labex:P@ssw0rd123: ユーザー名とパスワードを指定する-idオプション。
次に、ターミナルで完全なコマンドを実行します。スキャンは完了するまでに数分かかる場合があります。
nikto -h http://localhost/protected/ -id labex:P@ssw0rd123
Nikto はスキャンを開始します。有効な認証情報を提供したため、http://localhost/protected/ にアクセスし、そのディレクトリ内の脆弱性をテストできます。出力は次のようになります。
- Nikto v2.5.0
---------------------------------------------------------------------------
+ Target IP: 127.0.0.1
+ Target Hostname: localhost
+ Target Port: 80
+ Start Time: [scan_start_time]
---------------------------------------------------------------------------
+ Server: Apache/2.4.52 (Ubuntu)
+ /: 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.
+ /: Server may leak inodes via ETags, header found with file /, fields: 0x1ed 0x5f7e21e8a2e80
+ OPTIONS: Allowed HTTP Methods: GET, POST, OPTIONS, HEAD.
+ /: Apache/2.4.52 appears to be outdated (current is at least Apache/2.4.54).
+ 8142 requests: 0 error(s) and 5 item(s) reported on remote host
+ End Time: [scan_end_time] (30 seconds)
---------------------------------------------------------------------------
+ 1 host(s) tested
Nikto が保護されたリソースに正常にアクセスできたことを確認する
このステップでは、スキャン出力を分析して、Nikto が正常に認証され、保護された領域をスキャンできたことを確認します。認証済みスキャンの成功を示す重要な指標は、広範な認証エラーが存在しないことです。
スキャン結果を分析する良い習慣として、出力をファイルに保存することがあります。これは -o (output) オプションを使用して行うことができます。スキャンを再実行し、レポートを nikto_report.txt という名前のテキストファイルに保存しましょう。
nikto -h http://localhost/protected/ -id labex:P@ssw0rd123 -o nikto_report.txt -Format txt
スキャンが完了すると、現在のディレクトリ (~/project) に nikto_report.txt という名前のファイルが作成されます。このファイルを確認して結果を検証できます。成功を確認する簡単な方法は、エラーの数を示すサマリー行を確認することです。
grep コマンドを使用して、レポートファイル内の「error(s)」を含む行を検索します。
grep "error(s)" nikto_report.txt
出力には 0 error(s) と表示されるはずです。これは、Nikto がリクエストを行う際に 401 Unauthorized のような問題に遭遇しなかったことを確認します。これは、検出された項目のリストと合わせて、認証済みスキャンが成功したことを証明します。
+ 8142 requests: 0 error(s) and 5 item(s) reported on remote host
まとめ
この実験を完了した皆さん、おめでとうございます!Nikto を使用して、認証済みウェブ脆弱性スキャンを正常に実行しました。
この実験では、以下の方法を学びました。
curlを使用して、HTTP Basic 認証で保護された Web リソースを特定する方法。- 認証済みスキャンに必要な認証情報の形式を理解する方法。
- Nikto の
-idオプションを使用してユーザー名とパスワードを指定する方法。 - 保護されたディレクトリに対してスキャンを実行し、出力を分析してその成功を確認する方法。
認証済みスキャンの習得は、セキュリティ専門家にとって非常に重要なスキルです。これにより、ログインウォールによって隠されている脆弱性を発見することで、Web アプリケーションのセキュリティ体制をより深く、より包括的に評価することができます。


