Wordpress

WordPressにXSSを実装したら思いがけず苦戦した件(Chrome)

投稿日:2018-09-28 更新日:

0. はじめに

前回、WordPressのセキュリティ診断ツールではカスタマイズ部分の脆弱性を検出できないという記事でWordpressにXSS(クロスサイトスクリプティング)の脆弱性を埋め込んだのですが、これが思ったより苦戦したので、誰かの役に立つかどうか分かりませんが、記録に残しておきたいと思います。

1. 苦戦ポイントその1 Wordfence のブロック

前回の検証を行うにあたり、簡単に検証したかったので、最も単純なXSSを実装することを考えました。

つまり、ユーザからの入力をブラウザに表示する箇所があれば良いことになります。

少し探したところ、Wordpressの標準テーマで、検索結果ページでそれらしい箇所がありました。

ユーザからの入力をそのまま出力しているので、この出力をサニタイズせずに出力してあげればうまく行きそうです。

念のための確認として、デフォルトの状態ではXSSの脆弱性がないことを確認してみます。

確認の仕方は、検索ボックスに以下のようにJavascriptのコードを入力します。

<script>alert("hello")</script>

それでは実際に<script>alert("hello")</script>と入力してみます。

ばーん。


Wordfenceにブロックされたようです、、、

素晴らしいですね、Wordfence。

まぁ、テストサイトなので一時的にWordfenceを無効化して解決です。

気を取り直して<script>alert("hello")</script>と入力してみます。

ばばーん。

ああ、検索結果がゼロの時は検索文字列を出力しないのね、、、

ということで、次はソースコードをいじります。

2. 苦戦ポイントその2 WordPressのサニタイズ

上記のテストから、検索結果ページで検索文字列を出力してやるために、ソースコードを加工する必要があることが分かりました。

そして、いざ実装してみたのが以下です。

これで、<script>alert("hello")</script>と検索ボックスに入力すると、、、

どーん。

そのまま表示されました。

というわけで、WordpressがきちんとXSS対策されていることが分かりました。

さて、次はここから、XSSを埋め込むために、サニタイズ処理を外してやる必要があります。
しかし良く見ると、get_search_query()の戻り値ってサニタイズされてないな?と気付きました。

そんなはずはないので、get_search_query()の中身をの覗いてみると以下のようになっています。

なるほど。

引数がない時は自動的にサニタイズ用の関数であるesc_attr( $query )が使われているようです。

なので、以下のように、引数にfalseを渡して呼び出してやれば、サニタイズを外すことができそうです。

これでどうだ!と満を持して実行してみます。

ばばばーん。


あああ、ChromeのXSSブロックに引っかかったようです。

3. 苦戦ポイントその3 Chromeのブロック

Chromeを含む最近のいわゆるモダンブラウザでは、XSS(クロスサイトスクリプティング)の疑いがあるアクセスをブロックする機能が標準で備わっています。

この機能の正式名称はChromeではXSS Auditorといいます。

そしてこの機能は、Chromeを起動する際、以下のように特殊な引数をつけることで無効化できます。

"C:\Program Files (x86)\Google\Chrome\Application\chrome.exe" --args --disable-xss-auditor

以下のように、ショートカットを作っておくと便利です。

ここで、はまりポイントが2点ありました。

ひとつは、ネットで検索すると古い情報が引っかかってしまう事です。

というか、そもそもこの引数の体系も、Chromeのアップデートによっていつ変更されるか分からない類のもののようです。

なので、古い情報があちこちに出回っているようです。

例えば、引数は--disable-web-securityにする、といっていたり、Chromeが使用するユーザディレクトリを指定するために、--user-data-dir="%UserProfile%\AppData\Local\Google\Chrome\User Data"を付けないとダメ、といった具合です。

少なくとも2018年9月の時点では--args --disable-xss-auditorを付けるだけで行けます。

逆に言えば、この仕様も将来変更されている可能性があるのでご注意ください。

そしてもう一つは、Chromeを一度全てクローズしなければいけないということです。

タスクマネージャでChromeのプロセスが残っていたら全部終了してしまいましょう。

4. まとめ

Webサイトの脆弱性はいとも簡単に混入する、と思っていましたが、いざ意図的に再現しようと思うとなかなか難しいことが分かりました。

まぁ、わざと脆弱性を実装するなんて人はそんなにいないと思いますが、この記事が誰かの役に立てばいいな、と思います。

おすすめ記事

1

こんにちは。ワラゴンです。 今日は、アメリカで見つけた、日本ではあまり知られていないけど超絶おいしいお菓子を紹介したいと思います。 その名も Loacker Quadratini。 なんて読むのかは分 ...

2

こんにちは。ワラゴンです。 アメリカに在住することのひとつのデメリットは、「日本への一時帰国が簡単ではない」という点です。 特に、子供が小さいうちはなるべく親に孫を見せてあげたいと思うのが心情なのでは ...

3

こんにちは。ワラゴンです。 みなさん、Netflix(ネットフリックス)って知っていますか? アメリカ発の動画配信サービスなんですが、これが英語の勉強をするのにとても便利なのです。 英語学習では、映画 ...

4

0. はじめに こんばんわ。ワラゴンです。 さて、今日は久しぶりにアメリカ生活について、 特にロサンゼルスの賃貸事情について少しお話したいと思います。 これからロサンゼルス周辺に駐在でいらっしゃる皆様 ...

5

どうもワラゴンです。 今日は、タイトルにもあるように、一歩進んだバックアップのプラグイン、 UpdraftPlusを紹介したいと思います 1. はじめに みなさん、Wordpressのバックアップを取 ...

6

0. はじめに こんにちは。ワラゴンです。 調べ物をしている最中、すごいサイトを発見したので紹介したいと思います。 そのサイトというのは、以下になります。 副業クエスト100 もう、何というか、アフィ ...

7

前回、アメリカ生活のここがイヤ!移住して後悔したこと 前編 3つという記事を書きました。 今回はその続きになります。 シリーズを最初から読みたい方は以下の目次ページが便利です エンジニアのアメリカ進出 ...

-Wordpress

Copyright© 40歳から始める資産ブログ , 2024 All Rights Reserved Powered by STINGER.