Webエンジニア向けプログラミング解説動画をYouTubeで配信中!
▶ チャンネル登録はこちら

【ITニュース解説】Top 20 Nikto Commands Every Security Professional Should Know

2026年10月14日に「Dev.to」が公開したITニュース「Top 20 Nikto Commands Every Security Professional Should Know」について初心者にもわかりやすく解説しています。

作成日: 更新日:

ITニュース概要

Niktoは、Webサーバーの危険なファイル、古いソフトウェア、設定ミスなどのセキュリティ問題を検査するオープンソースツールだ。基本的なスキャンから詳細な設定まで、様々なコマンドを使いWebサーバーの脆弱性を効率的に発見できる。システム管理やセキュリティ診断の基礎を学ぶのに役立つツールだ。

ITニュース解説

Niktoは、Webサーバーのセキュリティをチェックするための強力なオープンソースツールである。システムエンジニアを目指す皆さんにとって、Webサーバーがどのように攻撃されうるか、そしてそれらの脆弱性をどのように見つけ出すかを知ることは非常に重要だ。Niktoは、Webサーバーに潜在する「危険なファイル」「古いソフトウェア」「設定ミス」といった様々なセキュリティ問題を発見する手助けをする。これは、WebサイトやWebアプリケーションの入り口となるWebサーバーが安全かどうかを確認するための、いわば健康診断ツールのようなものだと考えると良いだろう。

NiktoはPerlというプログラミング言語で書かれており、LibWhisker2というライブラリを基盤としている。SSL(暗号化通信)、プロキシ(代理サーバー経由の通信)、ホスト認証(IDとパスワードによるログイン)、攻撃エンコーディング(検出を回避するためのデータの符号化)など、様々な機能をサポートしている。似たようなツールとして、Wapitiのようなアプリケーションスキャナーがあるが、NiktoはWebアプリケーションの内部ロジックを深く探索するよりも、Webサーバー自体の既知の脆弱性や危険な設定、一般的なパスの探索に特化している点が異なる。つまり、Webサーバーという土台のセキュリティを重点的にチェックするツールだと言える。

これから、Niktoの具体的な使い方、特に重要な20のコマンドについて解説していく。

まず、最も基本的なスキャン方法から説明する。

  1. 基本的なターゲットスキャン: nikto -h http://example.com -hフラグは、スキャン対象のホスト名やURLを指定するために使う。これはNiktoの最もシンプルな使い方であり、指定されたターゲットに対して、デフォルトで用意されているすべてのプラグイン(テスト項目)を使って包括的なスキャンを実行する。具体的には、危険なファイル、CGIスクリプトの存在、古いサーバーバージョン、一般的な設定ミスなどを自動的に調査する。Webサーバーがインターネットに公開されている場合、まずこのコマンドで基本的な健全性を確認するところから始めるのが一般的だ。

  2. 特定のポートをスキャン: nikto -h 192.168.1.1 -p 8080 Webサーバーは通常ポート80(HTTP)や443(HTTPS)で通信を行うが、開発環境や本番環境では、セキュリティや運用の都合上、8080や8443といった標準以外のポートでWebサービスを稼働させていることも多い。-pフラグを使うと、そうした非標準ポートを指定してスキャンできる。複数のポートをチェックしたい場合は、カンマで区切って一度に指定することも可能だ。

  3. HTTPSターゲットをスキャン: nikto -h https://example.com -ssl 現代のWebサイトの多くはHTTPS(SSL/TLSによる暗号化通信)を利用している。-sslフラグは、NiktoにHTTPSを使って接続し、スキャンを実行するよう指示する。特に、自己署名証明書など、正規の認証局から発行されていない証明書を使っている場合、このフラグがないと接続エラーになることがあるため、HTTPSサイトのスキャンには必須のオプションとなる。

  4. 結果をHTMLレポートで保存: nikto -h http://example.com -o scan.html -Format html スキャン結果を人間が読みやすい形式で保存したい場合、-oフラグで出力ファイル名を、-Formatフラグで出力形式を指定できる。HTML形式は、発見された脆弱性の深刻度や説明が視覚的にわかりやすくまとめられるため、プロジェクトのメンバーや管理者など、技術的な詳細をすべて追う必要がない関係者と結果を共有する際に非常に便利だ。

  5. 結果をJSON形式で保存: nikto -h http://example.com -o scan.json -Format json JSON形式は、機械が読み取りやすいデータ形式として広く使われている。スキャン結果をプログラムで処理したり、継続的インテグレーション/継続的デリバリー(CI/CD)パイプラインに組み込んだり、独自のダッシュボードや脆弱性管理システムに連携させたりする場合に役立つ。自動化されたセキュリティテストフローにおいて、この形式は欠かせない。

  6. 一つのホストで複数のポートをスキャン: nikto -h 192.168.0.1 -p 80,443,8080 前述の-pフラグの応用だが、複数の一般的なWebポートを一つのターゲットに対して一度にスキャンできるため、個別にスキャンを実行するよりも効率的だ。

  7. ファイルから複数のホストをスキャン: nikto -h targets.txt 大規模なシステム評価で、数十、数百といった多数のWebサーバーをスキャンする必要がある場合、ターゲットのURLやIPアドレスを一つずつ指定するのは非現実的だ。-hフラグにファイル名を指定すると、そのファイルに記述されたホストリストを一括でスキャンできる。これは大規模なセキュリティ診断で非常に重宝する機能だ。

  8. 認証情報を使用: nikto -h http://example.com -id admin:password 多くのWebアプリケーションは、管理画面や機密性の高いコンテンツにアクセスする際に認証を要求する。-idフラグを使うと、「ユーザー名:パスワード」の形式でHTTPベーシック認証の資格情報を提供できる。これにより、認証が必要な領域についてもNiktoでセキュリティチェックが可能になる。

  9. プロキシ経由でトラフィックをルーティング: nikto -h http://example.com -useproxy http://127.0.0.1:8080 Burp SuiteやOWASP ZAPのようなプロキシツールを間に挟むことで、NiktoがWebサーバーに送信するすべてのリクエストと、サーバーからのレスポンスをリアルタイムで詳細に確認・変更・記録できる。-useproxyフラグは、Niktoのテスト内容をより深く理解したり、特定の条件でリクエストを調整したりする上で非常に価値のある機能だ。

  10. カスタムUser-Agentを設定: nikto -h http://example.com -useragent "Mozilla/5.0 (Windows NT 10.0; Win64; x64)" User-Agentとは、WebブラウザやクライアントがWebサーバーに自身を識別させるための文字列だ。一部のWebアプリケーションやファイアウォールは、デフォルトのNiktoのUser-Agentを検知してスキャンをブロックしたり、異なるコンテンツを返したりすることがある。-useragentフラグで一般的なWebブラウザのUser-Agentを偽装することで、こうした基本的なフィルタリングを回避し、通常どおりコンテンツにアクセスしてスキャンを実行できる可能性がある。

  11. チューニングでテストカテゴリを選択: nikto -h http://example.com -Tuning 1234 Niktoは様々な種類のテストを「カテゴリ」に分類している。-Tuningフラグを使うと、実行するテストカテゴリを絞り込める。例えば「1」は危険なファイル、「2」は設定ミス、「3」は情報漏えい、「4」はインジェクションといった具合に対応している。この機能を使うことで、特定の種類の脆弱性に焦点を当てたスキャンを実行したり、スキャン時間を短縮したりできる。

  12. 特定のカテゴリのみをスキャン: nikto -h http://example.com -Tuning 34 これは前述の-Tuningの具体的な例で、情報漏えい(3)とインジェクション(4)のテストのみを実行する。特定の脆弱性クラスに注目したい場合や、時間がない場合に役立つ。

  13. リバースチューニング(カテゴリを除外): nikto -h http://example.com -Tuning x6 「x」という文字を-Tuningフラグの先頭に付けると、指定したカテゴリ「以外」のすべてのテストを実行するようになる。例えばx6は、サービス妨害(DoS)のテスト(6)を除いて、他のすべてのテストを実行するという意味だ。DoSテストはターゲットに負荷をかける可能性があるため、本番環境で避けたい場合などに有効だ。

  14. IDS回避テクニックを使用: nikto -h http://example.com -evasion 1 IDS(侵入検知システム)やIPS(侵入防止システム)は、Webサーバーへの悪意あるアクセスパターンを検知してブロックしようとする。-evasionフラグは、NiktoがIDS/IPSによる検出を回避するための様々なテクニックを適用するよう指示する。例えば「1」はURIをランダムにエンコードする技術を意味する。これにより、Niktoのスキャン活動が通常のWebトラフィックに見えるように偽装し、検出されにくくする。

  15. 複数の回避テクニックを組み合わせる: nikto -h http://example.com -evasion 123 複数の回避テクニックを組み合わせることで、IDS/IPSによる検出をさらに困難にできる。例えば123は、URIのランダムエンコード、ディレクトリ自己参照、URLの早期終了という複数の技術を同時に適用する。これは防御側のシステムが複数の側面から攻撃を監視している場合に特に有効だ。

  16. 利用可能なプラグインをリスト表示: nikto -list-plugins Niktoは様々なテスト項目を「プラグイン」として提供している。このコマンドは、スキャンを実行せずに、Niktoが利用可能なすべてのプラグインのリストを表示する。これにより、どのようなテストが可能かを把握し、より詳細なスキャン計画を立てるのに役立つ。

  17. 特定のプラグインのみを実行: nikto -h http://example.com -Plugins "apacheusers" -Pluginsフラグを使うと、実行したい特定のプラグインを名前で指定できる。例えばapacheusersプラグインは、Apacheサーバーの設定ファイルに記載されたユーザー情報を探索するテストを行う。特定のサーバーコンポーネントに焦点を当てたテストを行いたい場合に、スキャン時間を短縮しつつ効率的な検査が可能になる。ALLで全プラグイン、NONEでプラグインなしを指定することもできる。

  18. すべてのCGIディレクトリをスキャン: nikto -h http://example.com -Cgidirs all CGI(Common Gateway Interface)スクリプトは、Webサーバーで動的なコンテンツを生成するための古い技術だが、依然として多くのシステムで使われており、セキュリティホールとなる可能性がある。-Cgidirsフラグは、どのCGIディレクトリをテストするかを制御する。allを指定すると、Niktoが認識しているすべてのCGIディレクトリを検査し、既知の脆弱なCGIスクリプトがないかを確認する。

  19. 最大テスト時間を制限: nikto -h http://example.com -maxtime 1h Webサーバーの状態が悪かったり、非常に大規模なWebアプリケーションだったりすると、スキャンが予想以上に長時間にわたる場合がある。-maxtimeフラグを使うと、各ホストに対するスキャンの最大実行時間を指定できる(例: 1時間、30分、3600秒)。これにより、スキャンが無限に続くことを防ぎ、限られた時間内で効率的にテストを完了できる。

  20. Niktoのデータベースを更新: nikto -update Webの脆弱性は日々新しく発見されている。Niktoが最新の脅威に対応できるよう、そのプラグインと脆弱性データベースを常に最新の状態に保つことは非常に重要だ。-updateフラグは、Niktoの公式サイトから最新の情報をダウンロードして、データベースを更新する。重要なスキャンを実行する前には、必ずこのコマンドを実行して、最新の脆弱性チェックが可能であることを確認すべきだ。

これらのコマンドは、システムエンジニアがWebサーバーのセキュリティを理解し、実際にテストを行う上で非常に役立つ基本的なツールとなる。Niktoを使いこなすことで、Webサーバーの潜在的な弱点を発見し、悪用される前にそれらを修正するための知識とスキルを身につけることができるだろう。Webセキュリティの第一歩として、Niktoの利用法をマスターすることは、皆さんのキャリアにおいて大きな強みとなるはずだ。

関連コンテンツ

関連IT用語