WordPressをハックしてみる
この記事はIPFactory Advent Calendar 2020の12日目の記事です。
前日12/11はn01e0による「彼女を実装しました」でした。
WordPress(の拡張機能)をハックしてみる
Mr-Robotなどに挑戦してみるも全く歯が立たず・・・
もっと初歩からやってみようと思い、適当な拡張機能の脆弱性から試してみることに。
やられサーバを探すのもいいですが、自分で構築してみるのも楽しいものです。
やってみたらとても簡単で、お手軽に構築できたので書きました。
Easing Slider <= 2.2.0.6 - 2 x Cross-Site Scripting (XSS)
https://wpscan.com/vulnerability/7787wpscan.com
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
WP Rollback
Rollback
両方ともインストール完了したら、PluginsからEasing SliderのRollbackをクリックしてEasing Sliderのバージョンを下げていきます。
3.0.8
にinstalled version
と書かれていますね。
今回再現したい脆弱性は「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
ボタンをクリックします。
Rollbackが始まったらそのまま数秒まてばよしなにしてくれます。Activate Plugin
をクリックしてプラグインを有効化しましょう。
Plugins
からバージョンを確認すると、2.2.0.6
になっています。
Writeup
準備完了です。やっていきましょう。
Easing Slider
の影響で左のペインにSliders
がでてきています。
Add New
から適当にスライダーを追加した後、All Sliders
から作成したスライダーを開きます。
http://localhost:8000/wp-admin/admin.php?page=easingslider_edit_sliders&edit=5
ソースを見ると、URLが反映されている箇所があります。
http://localhost:8000/wp-admin/admin.php?page=easingslider_edit_sliders&edit=5%22%3E
%22%3E
は">
。適切にサニタイズされてないらしく、action
からHTMLが崩れているのが確認できます。
ということで、次のURLでアラートがでます。
http://localhost:8000/wp-admin/admin.php?page=easingslider_edit_sliders&edit=%27%22%3E%3Cscript%3Ealert%281%29%3B%3C%2Fscript%3E
XSSの再現ができました。
Easing Slider:latest
最新のバージョンは3.0.8
。アップデートしてから同じようなペイロードを試してみました。
http://localhost:8000/wp-admin/admin.php?page=easingslider&edit=5%22%3E
action
にedit=...
が反映されなくなっています。しっかり直ってるみたいですね。
試した後はしっかり停止しましょう
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やブログ等はこちらのページを参照してください。
明日13日目はPeD1yの「Raspberry Pi 4で作る監視カメラ(検出・撮影)」です。お楽しみに
*1:4年前にアップデートが止まっているので検索上位にはでてこないっぽい?