自分のサイトにWPScanしてみた

自分のサイトにWPScanしてみた

WordPressを使っている人たちからよく聞く話として、「乗っ取られた」「不正アクセスされた」というものがあります。

WordPressは世界中の多くのサイトで利用されるほど便利ですが、反面、多くの人が利用するから、脆弱性が突かれてしまうとクラッキングが横行します。

そのため、アップデートはリリースされてからすぐにすることが推奨されています。

WPScanで調べてみる

というわけで、自分のサイトがちゃんとセキュリティー対策として万全かどうかということを調べてみます。

名前278Mt
やっていたセキュリティー対策/wp/にアクセスさせない
/wp-login.phpにアクセスさせない
/authorにアクセスさせない
reCAPTHCA 3を導入する
アカウント名は伏せる
セキュリティー対策についてひとこと自信あり(後に撃沈)

では、WPScanをインストールしてみましょう。

$ brew install wpscan

実行してみます。

$ wpscan --version
_______________________________________________________________
        __          _______   _____                  
        \ \        / /  __ \ / ____|                 
         \ \  /\  / /| |__) | (___   ___  __ _ _ __ ®
          \ \/  \/ / |  ___/ \___ \ / __|/ _` | '_ \ 
           \  /\  /  | |     ____) | (__| (_| | | | |
            \/  \/   |_|    |_____/ \___|\__,_|_| |_|

        WordPress Security Scanner by the WPScan Team 
                       Version 2.9.4
          Sponsored by Sucuri - https://sucuri.net
      @_WPScan_, @ethicalhack3r, @erwan_lr, @_FireFart_
_______________________________________________________________

このスパイみがある感じ好き(なんか、前もどこかでそんな感じのことを言っていたような気がする)

では、ググりながら見つけてきたコマンドをカタカタと打って実行してみましょう。さて、セキュリティー対策万全自信ありありの私ですから、まさかまずい結果は出てこないと思いますが。

$ wpscan --url www.withcation.com --random-agent

[i] The remote host tried to redirect to: https://withcation.com/
[?] Do you want follow the redirection ? [Y]es [N]o [A]bort, default: [N] >y
The plugins directory 'wp-content/plugins' does not exist.
You can specify one per command line option (don't forget to include the wp-content directory if needed)
[?] Continue? [Y]es [N]o, default: [N]
y
[+] URL: https://withcation.com/
[+] Started: Sun May 12 20:47:50 2019

[+] Interesting header: LINK: <https://withcation.com/wp-json/>; rel="https://api.w.org/", <https://withcation.com/>; rel=shortlink
[+] Interesting header: SERVER: Apache
[+] Interesting header: X-POWERED-BY: PHP/5.6.40
[+] robots.txt available under: https://withcation.com/robots.txt   [HTTP 200]
[+] Interesting entry from robots.txt: https://withcation.com/wp/wp-admin/   [HTTP 302]
[+] Interesting entry from robots.txt: https://withcation.com/wp/wp-admin/admin-ajax.php   [HTTP 400]
[+] API exposed: https://withcation.com/wp-json/   [HTTP 200]
[!] 2 users exposed via API: https://withcation.com/wp-json/wp/v2/users
+----+------+------------------------------------+
| ID | Name | URL                                |
+----+------+------------------------------------+
| 3  | **** | https://withcation.com/author/****/ |
| 4  | **** | https://withcation.com/author/****/ |
+----+------+------------------------------------+

????????

そ、そんなバカな……。

/authorの編集をしたはずなのに、なんと、突破されてしまったではありませんか!

どういうことなのか、実行文を読んでみると、どうやらhttps://withcation.com/wp-json/wp/v2/usersにアクセスできちゃったらしい(現在はアクセスできません!)

では、これの対策をしなければ。

とりあえず、「wp-json 無効 方法」と調べてみると、ありがたいことに出てきました。

このブログを参考にすると、.htaccessを書き換えればOKらしい(/wp-json/にアクセス制限をかけると、二度と投稿できなくなってしまうので注意!!)

さっそく、FileZillaを使って、サイトへアクセス。そして、.htaccessを編集。

# .htaccesss
# BEGIN WordPress <IfModule mod_rewrite.c>
RewriteEngine On RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !^/wp-json/wp/v2/users
RewriteCond %{REQUEST_URI} !^/oembed/
RewriteRule . /index.php [L] </IfModule>
# END WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{QUERY_STRING} rest_route=
RewriteRule ^$ /? [R=404,L]
</IfModule>

これで/wp-jsonにアクセスできなくしました!

さて、再びさっきのコマンドを実行してみましょう。

$ wpscan --url www.withcation.com --random-agent

[i] The remote host tried to redirect to: https://withcation.com/
[?] Do you want follow the redirection ? [Y]es [N]o [A]bort, default: [N] >y
The plugins directory 'wp-content/plugins' does not exist.
You can specify one per command line option (don't forget to include the wp-content directory if needed)
[?] Continue? [Y]es [N]o, default: [N]
y
[+] URL: https://withcation.com/
[+] Started: Sun May 12 20:54:45 2019

[+] Interesting header: LINK: <https://withcation.com/wp-json/>; rel="https://api.w.org/", <https://withcation.com/>; rel=shortlink
[+] Interesting header: SERVER: Apache
[+] Interesting header: X-POWERED-BY: PHP/5.6.40
[+] robots.txt available under: https://withcation.com/robots.txt   [HTTP 200]
[+] Interesting entry from robots.txt: https://withcation.com/wp/wp-admin/   [HTTP 302]
[+] Interesting entry from robots.txt: https://withcation.com/wp/wp-admin/admin-ajax.php   [HTTP 400]
[+] Found an RSS Feed: https://withcation.com/comments/feed/   [HTTP 200]
[!] Detected 1 user from RSS feed:
+------+
| Name |
+------+
| **** |
+------+

[+] Enumerating WordPress version ...

なんか出てきた……

どうやら、まだダメらしい。

これもまた、「/comments/feed/ 無効化」でググると、この方法はプラグインを入れないといけないとあった。

でも面倒だし、さっきの方法でできるんじゃね? というその場のノリで、やってみました。

# .htaccess
# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !^/wp-json/wp/v2/users
RewriteCond %{REQUEST_URI} !^/oembed/
RewriteCond %{REQUEST_URI} !^/comments/feed/
RewriteRule . /index.php [L] </IfModule>
# END WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{QUERY_STRING} rest_route=
RewriteRule ^$ /? [R=404,L]
</IfModule>

さて、今度はどうなるか?

$ wpscan --url www.withcation.com --random-agent

[i] The remote host tried to redirect to: https://withcation.com/
[?] Do you want follow the redirection ? [Y]es [N]o [A]bort, default: [N] >y
The plugins directory 'wp-content/plugins' does not exist.
You can specify one per command line option (don't forget to include the wp-content directory if needed)
[?] Continue? [Y]es [N]o, default: [N]
y
[+] URL: https://withcation.com/
[+] Started: Sun May 12 21:00:36 2019

[+] Interesting header: LINK: <https://withcation.com/wp-json/>; rel="https://api.w.org/", <https://withcation.com/>; rel=shortlink
[+] Interesting header: SERVER: Apache
[+] Interesting header: X-POWERED-BY: PHP/5.6.40
[+] robots.txt available under: https://withcation.com/robots.txt   [HTTP 200]
[+] Interesting entry from robots.txt: https://withcation.com/wp/wp-admin/   [HTTP 302]
[+] Interesting entry from robots.txt: https://withcation.com/wp/wp-admin/admin-ajax.php   [HTTP 400]
[+] Found an RSS Feed: https://withcation.com/comments/feed/   [HTTP 404]

[+] Enumerating WordPress version ...

どうやら上手くいったようです!(拍手)

さいごに

今回はセキュリティー対策として、WPScanを使ってみました。

これでセキュリティー対策は万全(?)になったと思います。

でも、慢心せずに、これからもセキュリティー対策は万全な状態を保ってゆけるようにしたいです。

セキュリティー対策のために

  • アクセスさせたくないページはアクセスできないようにする
  • 非公表にした方が良いものは非公表にする
  • WordPressのアップデートはリリースされた後すぐにする(ゼロデイ攻撃対策)
  • どんなにセキュリティー対策が自分の中では万全なつもりでも、慢心しない