Nikto - Web アプリケーションの脆弱性と Web サーバー用 CGI スキャナー
Nikto Web Scanner も、Linux 管理者にとって便利なツールです。これは、GPL ライセンスの下でリリースされたオープンソースの Web スキャナであり、6500 を超える 潜在的に危険なファイル/CGI を含む複数のアイテムに対して Web サーバー上で包括的なテストを実行するために使用されます。 です。
推奨読書: WPSeku – WordPress のセキュリティ問題を見つけるための脆弱性スキャナー
これは脆弱性評価のためにクリス・ ソロとデイビッド・ ロッジによって書かれており、1250のWebサーバー上で古いバージョンがないかチェックし、 270 以上のバージョン固有の問題。また、古い Web サーバー ソフトウェアやプラグインをスキャンしてレポートします。
Nikto Webスキャナーの特徴
- SSLをサポート
- 完全なHTTPプロキシをサポート
- テキスト、HTML、XML、CSV をサポートしてレポートを保存します。
- 複数のポートをスキャンする
- nmap 出力などのファイルから入力を取得することで、複数のサーバーでスキャンできます
- LibWhisker IDS のサポート
- インストールされているソフトウェアをヘッダー、ファイル、ファビコンで識別するのに十分な機能
- Metasploits のログ
- 「異常な」ヘッダーのレポート。
- Apache および cgiwrap ユーザーの列挙
- Basic および NTLM を使用してホストを認証する
- スキャンは指定した時間に自動一時停止できます。
ニクトの要件
基本的なPerl、Perl モジュール、OpenSSLがインストールされているシステムでは、Niktoを実行できるようになります。 Windows、Mac OSX、およびRed などのさまざまなUnix/Linuxディストリビューションで徹底的にテストされています。ハット、Debian、Ubuntu、BackTrackなど。
Linux への Nikto Web スキャナーのインストール
現在の Linux システムのほとんどには、Perl、Perl モジュール、およびOpenSSL パッケージがプリインストールされています。含まれていない場合は、yum または apt-get と呼ばれるデフォルトのシステム パッケージ マネージャー ユーティリティを使用してインストールできます。
Red Hat/CentOS/Fedora の場合
[root@tecmint ]# yum install perl perl-Net-SSLeay openssl
Debian/Ubuntu/Linux Mint の場合
[root@tecmint ]# apt-get install perl openssl libnet-ssleay-perl
次に、最新の安定した Nikto ソース ファイルを Github リポジトリからクローンし、Nikto/programs/ ディレクトリに移動して、perl を使用して実行します。
git clone https://github.com/sullo/nikto.git
cd nikto/programs
perl nikto.pl -h
サンプル出力
Option host requires an argument
-config+ Use this config file
-Display+ Turn on/off display outputs
-dbcheck check database and other key files for syntax errors
-Format+ save file (-o) format
-Help Extended help information
-host+ target host
-id+ Host authentication to use, format is id:pass or id:pass:realm
-list-plugins List all available plugins
-output+ Write output to this file
-nossl Disables using SSL
-no404 Disables 404 checks
-Plugins+ List of plugins to run (default: ALL)
-port+ Port to use (default 80)
-root+ Prepend root value to all requests, format is /directory
-ssl Force ssl mode on port
-Tuning+ Scan tuning
-timeout+ Timeout for requests (default 10 seconds)
-update Update databases and plugins from CIRT.net
-Version Print plugin and database versions
-vhost+ Virtual host (for Host header)
+ requires a value
Note: This is the short help output. Use -H for full help text.
「オプション ホストには引数が必要」は、テストの実行中に必要なパラメータが含まれていないことを明確に示しています。したがって、テスト実行を行うために基本的に必要なパラメータを追加する必要があります。
基本的なテスト
基本スキャンには対象となるホストが必要です。何も指定しない場合、デフォルトではポート 80 がスキャンされます。ホストは、 システムのホスト名またはIP アドレスのいずれかです。 「-h 」オプションを使用してホストを指定できます。
たとえば、IP 172.16.27.56 の TCP ポート 80 でスキャンを実行したいとします。
[root@tecmint nikto-2.1.5]# perl nikto.pl -h 172.16.27.56
サンプル出力
- Nikto v2.1.5
---------------------------------------------------------------------------
+ Target IP: 172.16.27.56
+ Target Hostname: example.com
+ Target Port: 80
+ Start Time: 2014-01-10 00:48:12 (GMT5.5)
---------------------------------------------------------------------------
+ Server: Apache/2.2.15 (CentOS)
+ Retrieved x-powered-by header: PHP/5.3.3
+ The anti-clickjacking X-Frame-Options header is not present.
+ Server leaks inodes via ETags, header found with file /robots.txt, inode: 5956160, size: 24, mtime: 0x4d4865a054e32
+ File/dir '/' in robots.txt returned a non-forbidden or redirect HTTP code (200)
+ "robots.txt" contains 1 entry which should be manually viewed.
+ Apache/2.2.15 appears to be outdated (current is at least Apache/2.2.22). Apache 1.3.42 (final release) and 2.0.64 are also current.
+ Multiple index files found: index.php, index.htm, index.html
+ DEBUG HTTP verb may show server debugging information. See http://msdn.microsoft.com/en-us/library/e8z01xdh%28VS.80%29.aspx for details.
+ OSVDB-877: HTTP TRACE method is active, suggesting the host is vulnerable to XST
+ OSVDB-3233: /phpinfo.php: Contains PHP configuration information
+ OSVDB-12184: /index.php?=PHPB8B5F2A0-3C92-11d3-A3A9-4C7B08C10000: PHP reveals potentially sensitive information via certain HTTP requests that contain specific QUERY strings.
+ OSVDB-3092: /test.html: This might be interesting...
+ OSVDB-3268: /icons/: Directory indexing found.
+ OSVDB-3233: /icons/README: Apache default file found.
+ /connect.php?path=http://cirt.net/rfiinc.txt?: Potential PHP MySQL database connection string found.
+ OSVDB-3092: /test.php: This might be interesting...
+ 6544 items checked: 0 error(s) and 16 item(s) reported on remote host
+ End Time: 2014-01-10 00:48:23 (GMT5.5) (11 seconds)
---------------------------------------------------------------------------
+ 1 host(s) tested
別のポート番号でスキャンする場合は、「-p 」 [-port] オプションを追加します。たとえば、IP 172.16.27.56 の TCP ポート 443 でスキャンを実行したいとします。
[root@tecmint nikto-2.1.5]# perl nikto.pl -h 172.16.27.56 -p 443
サンプル出力
- Nikto v2.1.5
---------------------------------------------------------------------------
+ Target IP: 172.16.27.56
+ Target Hostname: example.com
+ Target Port: 443
---------------------------------------------------------------------------
+ SSL Info: Subject: /O=*.mid-day.com/OU=Domain Control Validated/CN=*.mid-day.com
Ciphers: DHE-RSA-AES256-GCM-SHA384
Issuer: /C=US/ST=Arizona/L=Scottsdale/O=Starfield Technologies, Inc./OU=http://certificates.starfieldtech.com/repository/CN=Starfield Secure Certification Authority/serialNumber=10688435
+ Start Time: 2014-01-10 01:08:26 (GMT5.5)
---------------------------------------------------------------------------
+ Server: Apache/2.2.15 (CentOS)
+ Server leaks inodes via ETags, header found with file /, inode: 2817021, size: 5, mtime: 0x4d5123482b2e9
+ The anti-clickjacking X-Frame-Options header is not present.
+ Apache/2.2.15 appears to be outdated (current is at least Apache/2.2.22). Apache 1.3.42 (final release) and 2.0.64 are also current.
+ Server is using a wildcard certificate: '*.mid-day.com'
+ Allowed HTTP Methods: GET, HEAD, POST, OPTIONS, TRACE
+ OSVDB-877: HTTP TRACE method is active, suggesting the host is vulnerable to XST
+ OSVDB-3268: /icons/: Directory indexing found.
+ OSVDB-3233: /icons/README: Apache default file found.
+ 6544 items checked: 0 error(s) and 8 item(s) reported on remote host
+ End Time: 2014-01-10 01:11:20 (GMT5.5) (174 seconds)
---------------------------------------------------------------------------
+ 1 host(s) tested
完全なURL構文を使用してホスト、ポート、およびプロトコルを指定することもでき、スキャンされます。
[root@tecmint nikto-2.1.5]# perl nikto.pl -h http://172.16.27.56:80
あらゆる Web サイトをスキャンすることもできます。たとえば、ここではgoogle.com でスキャンを実行しました。
[root@tecmint nikto-2.1.5]# perl nikto.pl -h http://www.google.com
サンプル出力
- Nikto v2.1.5
---------------------------------------------------------------------------
+ Target IP: 173.194.38.177
+ Target Hostname: www.google.com
+ Target Port: 80
+ Start Time: 2014-01-10 01:13:36 (GMT5.5)
---------------------------------------------------------------------------
+ Server: gws
+ Cookie PREF created without the httponly flag
+ Cookie NID created without the httponly flag
+ Uncommon header 'x-frame-options' found, with contents: SAMEORIGIN
+ Uncommon header 'x-xss-protection' found, with contents: 1; mode=block
+ Uncommon header 'alternate-protocol' found, with contents: 80:quic
+ Root page / redirects to: http://www.google.co.in/?gws_rd=cr&ei=xIrOUomsCoXBrAee34DwCQ
+ Server banner has changed from 'gws' to 'sffe' which may suggest a WAF, load balancer or proxy is in place
+ Uncommon header 'x-content-type-options' found, with contents: nosniff
+ No CGI Directories found (use '-C all' to force check all possible dirs)
+ File/dir '/groups/' in robots.txt returned a non-forbidden or redirect HTTP code (302)
….
上記のコマンドは、Web サーバー上で多数の http リクエスト (つまり、2000 を超える テスト) を実行します。
複数ポートのテスト
同じセッションで複数のポート スキャンを実行することもできます。同じホスト上の複数のポートをスキャンするには、「-p」 [-port] オプションを追加し、ポートのリストを指定します。ポートは範囲 (例: 80-443) またはカンマ区切り (例: 80,443) として定義できます。たとえば、ホスト 172.16.27.56 上のポート 80 と 443 をスキャンしたいとします。
[root@tecmint nikto-2.1.5]# perl nikto.pl -h 172.16.27.56 -p 80,443
サンプル出力
- Nikto v2.1.5
---------------------------------------------------------------------------
+ No web server found on cmsstage.mid-day.com:88
---------------------------------------------------------------------------
+ Target IP: 172.16.27.56
+ Target Hostname: example.com
+ Target Port: 80
+ Start Time: 2014-01-10 20:38:26 (GMT5.5)
---------------------------------------------------------------------------
+ Server: Apache/2.2.15 (CentOS)
+ Retrieved x-powered-by header: PHP/5.3.3
+ The anti-clickjacking X-Frame-Options header is not present.
---------------------------------------------------------------------------
+ Target IP: 172.16.27.56
+ Target Hostname: example.com
+ Target Port: 443
---------------------------------------------------------------------------
+ SSL Info: Subject: /O=*.mid-day.com/OU=Domain Control Validated/CN=*.mid-day.com
Ciphers: DHE-RSA-AES256-GCM-SHA384
Issuer: /C=US/ST=Arizona/L=Scottsdale/O=Starfield Technologies, Inc./OU=http://certificates.starfieldtech.com/repository/CN=Starfield Secure Certification Authority/serialNumber=10688435
+ Start Time: 2014-01-10 20:38:36 (GMT5.5)
---------------------------------------------------------------------------
+ Server: Apache/2.2.15 (CentOS)
+ All CGI directories 'found', use '-C none' to test none
+ Apache/2.2.15 appears to be outdated (current is at least Apache/2.2.22). Apache 1.3.42 (final release) and 2.0.64 are also current.
.....
プロキシの使用
Nikto が実行されているシステムがHTTP プロキシ経由でのみターゲット ホストにアクセスできるとします。テストは 2 つの異なる方法を使用して実行できます。 1 つはnikto.conf ファイルを使用する方法、もう 1 つはコマンド ライン から直接実行する方法です。
Nikto.conf ファイルの使用
任意のコマンドラインエディタを使用してnikto.confファイルを開きます。
[root@localhost nikto-2.1.5]# vi nikto.conf
変数「PROXY」を検索し、次のように行頭の「#」のコメントを解除します。次にプロキシ ホスト、ポート、プロキシ ユーザー、およびパスワードを追加します。ファイルを保存して閉じます。
Proxy settings -- still must be enabled by -useproxy
PROXYHOST=172.16.16.37
PROXYPORT=8080
PROXYUSER=pg
PROXYPASS=pg
ここで、「-useproxy」 オプションを使用してNiktoを実行します。すべての接続は HTTP プロキシ経由で中継されることに注意してください。
root@localhost nikto-2.1.5]# perl nikto.pl -h localhost -p 80 -useproxy
サンプル出力
- Nikto v2.1.5
---------------------------------------------------------------------------
+ Target IP: 127.0.0.1
+ Target Hostname: localhost
+ Target Port: 80
+ Start Time: 2014-01-10 21:28:29 (GMT5.5)
---------------------------------------------------------------------------
+ Server: squid/2.6.STABLE6
+ Retrieved via header: 1.0 netserv:8080 (squid/2.6.STABLE6)
+ The anti-clickjacking X-Frame-Options header is not present.
+ Uncommon header 'x-squid-error' found, with contents: ERR_CACHE_ACCESS_DENIED 0
+ Uncommon header 'x-cache-lookup' found, with contents: NONE from netserv:8080
コマンドラインの使用
コマンドラインからNiktoを直接実行するには、「-useproxy」オプションを使用し、引数としてプロキシを設定します。
root@localhost nikto-2.1.5]# perl nikto.pl -h localhost -useproxy http://172.16.16.37:8080/
サンプル出力
- Nikto v2.1.5
---------------------------------------------------------------------------
+ Target IP: 127.0.0.1
+ Target Hostname: localhost
+ Target Port: 80
+ Start Time: 2014-01-10 21:34:51 (GMT5.5)
---------------------------------------------------------------------------
+ Server: squid/2.6.STABLE6
+ Retrieved via header: 1.0 netserv:8080 (squid/2.6.STABLE6)
+ The anti-clickjacking X-Frame-Options header is not present.
+ Uncommon header 'x-squid-error' found, with contents: ERR_CACHE_ACCESS_DENIED 0
+ Uncommon header 'x-cache-lookup' found, with contents: NONE from netserv:8080
ニクトを更新中
「-update」 コマンドを実行するだけで、Nikto を最新のプラグインとデータベースに自動的に更新できます。
[root@localhost nikto-2.1.5]# perl nikto.pl -update
新しいアップデートが利用可能な場合は、ダウンロードされた新しいアップデートのリストが表示されます。
+ Retrieving 'nikto_report_csv.plugin'
+ Retrieving 'nikto_headers.plugin'
+ Retrieving 'nikto_cookies.plugin'
+ Retrieving 'db_tests'
+ Retrieving 'db_parked_strings'
+ Retrieving 'CHANGES.txt'
+ CIRT.net message: Please submit Nikto bugs to http://trac2.assembla.com/Nikto_2/report/2
http://cirt.net/nikto/UPDATES/ から Nikto プラグインとデータベースを手動でダウンロードして更新することもできます。
参考リンク
ニクトホームページ