よーでんのブログ

One for All,All for わんわんお!

WordPressをハックしてみる

WordPressをハックしてみる

この記事はIPFactory Advent Calendar 2020の12日目の記事です。

qiita.com

前日12/11はn01e0による「彼女を実装しました」でした。

feneshi.co

WordPress(の拡張機能)をハックしてみる

Mr-Robotなどに挑戦してみるも全く歯が立たず・・・

もっと初歩からやってみようと思い、適当な拡張機能脆弱性から試してみることに。
やられサーバを探すのもいいですが、自分で構築してみるのも楽しいものです。

やってみたらとても簡単で、お手軽に構築できたので書きました。

Easing Slider <= 2.2.0.6 - 2 x Cross-Site Scripting (XSS)

https://wpscan.com/vulnerability/7787wpscan.com

seclists.org

Easing Sliderというプラグインのバージョン2.2.0.6以下でXSSがあるらしい。
環境構築からやっていきます。

WordPress

次の設定をdocker-compose.ymlとして保存し、docker-compose up -dで起動します

version: '3'

services:
   db:
     image: mysql:latest
     volumes:
       - db_data:/var/lib/mysql
     environment:
       MYSQL_ROOT_PASSWORD: somewordpress
       MYSQL_DATABASE: wordpress
       MYSQL_USER: wordpress
       MYSQL_PASSWORD: wordpress

   wordpress:
     depends_on:
       - db
     image: wordpress:latest
     ports:
       - "8000:80"
     environment:
       WORDPRESS_DB_HOST: db:3306
       WORDPRESS_DB_USER: wordpress
       WORDPRESS_DB_PASSWORD: wordpress
volumes:
    db_data:
sudo docker-compose up -d

http://localhost:8000 からいい感じにインストールします。

Plugins

ログインまでできたら、Pluginsを開き、Add Newからプラグインを2つ入れましょう。

Easing Slider

今回ハックするプラグイン。「Easing Slider」で検索したらちょっと下の方に出てきます*1

f:id:y0d3n:20201208052652p:plain
Easing Slider

WP Rollback

プラグインのバージョンを指定できるようになるプラグイン

f:id:y0d3n:20201207203401p:plain
WP Rollback

Rollback

両方ともインストール完了したら、PluginsからEasing SliderのRollbackをクリックしてEasing Sliderのバージョンを下げていきます。

f:id:y0d3n:20201208123901p:plain
Plugins

3.0.8installed versionと書かれていますね。

f:id:y0d3n:20201212111655p:plain
installed

今回再現したい脆弱性は「Easing Slider <= 2.2.0.6 - 2 x Cross-Site Scripting (XSS)」なので、2.2.0.6以下のバージョンを選択しましょう。

ここでは2.2.0.6で進めていきます。
Rollbackボタンを押すとAre you sure you want to perform the following rollback?と聞かれるのでRollbackボタンをクリックします。

f:id:y0d3n:20201212111859p:plain
Rollback alert

Rollbackが始まったらそのまま数秒まてばよしなにしてくれます。Activate Pluginをクリックしてプラグインを有効化しましょう。

f:id:y0d3n:20201208132803p:plain
Rollback

Pluginsからバージョンを確認すると、2.2.0.6になっています。

f:id:y0d3n:20201212111950p:plain
Rollbacked

Writeup

準備完了です。やっていきましょう。

Easing Sliderの影響で左のペインにSlidersがでてきています。

f:id:y0d3n:20201208123641p:plain
Sliders

Add Newから適当にスライダーを追加した後、All Slidersから作成したスライダーを開きます。
http://localhost:8000/wp-admin/admin.php?page=easingslider_edit_sliders&edit=5

ソースを見ると、URLが反映されている箇所があります。

f:id:y0d3n:20201208134121p:plain
source

http://localhost:8000/wp-admin/admin.php?page=easingslider_edit_sliders&edit=5%22%3E
%22%3E">。適切にサニタイズされてないらしく、actionからHTMLが崩れているのが確認できます。

f:id:y0d3n:20201208134726p:plain
source

ということで、次のURLでアラートがでます。
http://localhost:8000/wp-admin/admin.php?page=easingslider_edit_sliders&edit=%27%22%3E%3Cscript%3Ealert%281%29%3B%3C%2Fscript%3E

f:id:y0d3n:20201208135451p:plain
source

f:id:y0d3n:20201208112322p:plain
alert

XSSの再現ができました。

Easing Slider:latest

最新のバージョンは3.0.8。アップデートしてから同じようなペイロードを試してみました。

http://localhost:8000/wp-admin/admin.php?page=easingslider&edit=5%22%3E

f:id:y0d3n:20201208140849p:plain
Ver.3.0.8

actionedit=...が反映されなくなっています。しっかり直ってるみたいですね。

試した後はしっかり停止しましょう

sudo docker-compose down

余談: あとがき

本記事では「環境構築の簡単さ」がメインだったので、単純で攻撃成功がわかりやすそうな脆弱性をずっと試してたのですが、なかなか( exploit/writeupが転がってる && プラグインがまだある && プラグインの脆弱なバージョンがインストールできる) ものが見つけられず・・・

CVSSv2 Base Score: 2.6 (AV:N/AC:H/Au:N/C:N/I:P/A:N)とスコアはだいぶ低いものの、アラート出せばわかりやすくて再現も簡単ということでこれを選びました。

環境構築やバージョンの指定がだいぶ簡単なので、いいexploitが見つかったらすぐに試せるのはうれしいですね。RCEとかも丁度良いのがあったら再現したいです。

余談: IPFactoryについて

IPFactoryとは、情報科学専門学校という学校に存在する学内サークルです。
IPFに在籍するメンバーがそれぞれ自身の専門分野についての勉強やアウトプット活動を行っています。
サークル内有志メンバーでCTFを主催したりもしています。
IPFに所属する各メンバーのTwitterやブログ等はこちらのページを参照してください。

ipfactory.github.io

明日13日目はPeD1yの「Raspberry Pi 4で作る監視カメラ(検出・撮影)」です。お楽しみに

*1:4年前にアップデートが止まっているので検索上位にはでてこないっぽい?