nikto

Nikto2 | CIRT.net

WEBサーバーと、そのWEBサーバーで稼働しているアプリケーションに対して、すでに公表されているセキュリティホールや、セキュリティ上で問題のある設定を辞書ベースでスキャンするツール。

root@kali:~# nikto -h 192.168.56.105
- Nikto v2.1.6
---------------------------------------------------------------------------
+ Target IP:          192.168.56.105
+ Target Hostname:    192.168.56.105
+ Target Port:        80
+ Start Time:         2019-09-01 06:48:18 (GMT9)
---------------------------------------------------------------------------
+ Server: Apache/2.2.8 (Ubuntu) DAV/2
+ Retrieved x-powered-by header: PHP/5.2.4-2ubuntu5.10
   ( ↑ PHP/5.2.4 が使われている)
+ The anti-clickjacking X-Frame-Options header is not present.
   ( ↑ アンチクリックジャッキング X-Frame-Option header が設定されていない)
+ The X-XSS-Protection header is not defined. This header can hint to the user agent to protect against some forms of XSS
   ( ↑ クロスサイトスクリプティング-Protection header が設定されていない)
+ 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
   ( ↑ X-Content-Type-Options header が設定されていない)
+ Apache/2.2.8 appears to be outdated (current is at least Apache/2.4.37). Apache 2.2.34 is the EOL for the 2.x branch.
   ( ↑ Apache/2.2.8 は時代遅れである)
+ Uncommon header 'tcn' found, with contents: list
+ Apache mod_negotiation is enabled with MultiViews, which allows attackers to easily brute force file names. See http://www.wisec.it/sectou.php?id=4698ebdc59d15. The following alternatives for 'index' were found: index.php
+ Web Server returns a valid response with junk HTTP methods, this may cause false positives.
+ OSVDB-877: HTTP TRACE method is active, suggesting the host is vulnerable to XST
   ( ↑ HTTP TRACE method が有効である)
+ /phpinfo.php: Output from the phpinfo() function was found.
   ( ↑ phpinfo.php が閲覧できる)
+ OSVDB-3268: /doc/: Directory indexing found.
+ OSVDB-48: /doc/: The /doc/ directory is browsable. This may be /usr/doc.
   ( ↑ doc ディレクトリーが閲覧できる)
+ OSVDB-12184: /?=PHPB8B5F2A0-3C92-11d3-A3A9-4C7B08C10000: PHP reveals potentially sensitive information via certain HTTP requests that contain specific QUERY strings.
+ OSVDB-12184: /?=PHPE9568F36-D428-11d2-A769-00AA001ACF42: PHP reveals potentially sensitive information via certain HTTP requests that contain specific QUERY strings.
+ OSVDB-12184: /?=PHPE9568F34-D428-11d2-A769-00AA001ACF42: PHP reveals potentially sensitive information via certain HTTP requests that contain specific QUERY strings.
+ OSVDB-12184: /?=PHPE9568F35-D428-11d2-A769-00AA001ACF42: PHP reveals potentially sensitive information via certain HTTP requests that contain specific QUERY strings.
+ OSVDB-3092: /phpMyAdmin/changelog.php: phpMyAdmin is for managing MySQL databases, and should be protected or limited to authorized hosts.
+ Server may leak inodes via ETags, header found with file /phpMyAdmin/ChangeLog, inode: 92462, size: 40540, mtime: Wed Dec 10 02:24:00 2008
+ OSVDB-3092: /phpMyAdmin/ChangeLog: phpMyAdmin is for managing MySQL databases, and should be protected or limited to authorized hosts.
+ OSVDB-3268: /test/: Directory indexing found.
+ OSVDB-3092: /test/: This might be interesting...
+ OSVDB-3233: /phpinfo.php: PHP is installed, and a test script which runs phpinfo() was found. This gives a lot of system information.
+ OSVDB-3268: /icons/: Directory indexing found.
+ OSVDB-3233: /icons/README: Apache default file found.
+ /phpMyAdmin/: phpMyAdmin directory found
+ OSVDB-3092: /phpMyAdmin/Documentation.html: phpMyAdmin is for managing MySQL databases, and should be protected or limited to authorized hosts.
+ OSVDB-3092: /phpMyAdmin/README: phpMyAdmin is for managing MySQL databases, and should be protected or limited to authorized hosts.
+ 8726 requests: 0 error(s) and 27 item(s) reported on remote host
+ End Time:           2019-09-01 06:48:53 (GMT9) (35 seconds)
---------------------------------------------------------------------------
+ 1 host(s) tested

PHP の脆弱性に関する注意喚起
php-cgi のリクエスト処理に関する脆弱性
遠隔の第三者PHP スクリプトソースコードを閲覧したり、Web サーバの権 限で任意のコードを実行したりする可能性がある

確認方法 末尾に「?-s」(ソースコードを表示させるオプション) を付与した URL を Web ブラウザで閲覧した際に、ソースコードが表示された 場合は、本脆弱性の対象になる
http://example.com/index.php?-s

f:id:hirose-test:20190901065931j:plain

『クリックジャッキング』に関するレポートに関するレポート
https://www.ipa.go.jp/files/000026479.pdf

X-XSS-Protection - HTTP | MDN
HTTP の X-XSS-Protection レスポンスヘッダーは Internet Explorer, Chrome, Safari の機能で、反射したクロスサイトスクリプティング (XSS) 攻撃を検出したときに、ページの読み込みを停止するためのものです。

X-Content-Type-Options - HTTP | MDN

f:id:hirose-test:20190901071413j:plain

f:id:hirose-test:20190901071424j:plain

実はそんなに怖くないTRACEメソッド | 徳丸浩の日記

セキュリティを強化する7つの便利なHTTPヘッダ
https://devcentral.f5.com/s/articles/7http

脆弱性を修正する

後で戻せるように Metaspolitable2 のスナップショットを撮っておく
f:id:hirose-test:20190901170818j:plain

Apache の設定ファイルを修正する

msfadmin@metasploitable:~$ sudo -s
[sudo] password for msfadmin:

# cd /etc/apache2/
# ls
# cp -p apache2.conf apache2.conf.org
# vim apache2.conf

ServerTokens Full → ServerTokens Prod

ServerSignature On → ServerSignature Off
TraceEnable Off ← その下に1行追加

最終行に  
<IfModule mod_headers.c>  
Header always append X-FRAME-OPTIONS "DENY"  
</IfModule>

core - Apache HTTP サーバ バージョン 2.4
ServerTokens ディレクティブ
クライアントに送り返す Server 応答ヘッダ内に、サーバの一般的な OS 種別や、 コンパイルされて組み込まれているモジュールの情報を 含めるかどうかを指定します。
最小の設定が Prod (ProductOnly)
https://httpd.apache.org/docs/2.4/ja/mod/core.html#serversignature
ServerSignature ディレクティブ
サーバが生成するドキュメント (エラーメッセージ、mod_proxy における FTPディレクトリリスト、 mod_info の出力、等々) の最下行に付与するフッタの設定を行ないます。 https://httpd.apache.org/docs/2.4/ja/mod/core.html#traceenable
TraceEnable ディレクティブ
デフォルトの TraceEnable on は、リクエストボディを受け入れないような、RFC2616 に準拠した TRACE リクエストを受け付けます。 TraceEnable off と設定すると、コアサーバと mod_proxy は 405 (メソッド不許可) エラーをクライアントに返します。
https://httpd.apache.org/docs/2.4/ja/mod/core.html#ifmodule
IfModule ディレクティブ
モジュールの存在するかしないかに応じて処理される ディレクティブを囲む https://devcentral.f5.com/s/articles/7http
X-Frame-Options / Frame-Options
X-Frame-Options HTTPレスポンスヘッダとは、外部サイトからの、HTMLのiframeタグの読み込み許可範囲を設定できるもの。設定出来る値は以下の3つです。
DENY
問答無用で全てのiframeタグが無効となる

Apache2 に ModHeaders を追加する(無効化は a2dismod)

# a2enmod headers  
Module headers installed; run /etc/init.d/apache2 force-reload to enable.

PHP の設定ファイルのあるディレクトリに移動

# cd /etc/php5/cgi/
# ls
# cp -p php.ini php.ini.org
# vi php.ini

expose_php = ON → expose_php = Off
# /etc/init.d/apache2 restart
 * Restarting web server apache2
httpd (no pid file) not running

https://www.php.net/manual/ja/ini.core.php#ini.expose-php
PHP がサーバーにインストールされていることを全世界に晒し、PHP のバージョンも HTTP ヘッダに含めます (X-Powered-By: PHP/5.3.7 など)

再度 nikto でスキャン

+ Server: Apache/2.2.8 (Ubuntu) DAV/2
 ↓
+ Server: Apache

+ Retrieved x-powered-by header: PHP/5.2.4-2ubuntu5.10
 ↓
消えた

+ The anti-clickjacking X-Frame-Options header is not present.
 ↓
消えた

+ OSVDB-877: HTTP TRACE method is active, suggesting the host is vulnerable to XST
 ↓
消えた

スナップショットを修正前のに戻しておくこと

/* -----codeの行番号----- */