Hatena::ブログ(Diary)

ろば電子が詰まっている

2013-08-30

WordPressの脆弱性スキャンwpscanでログインID取得

全く空気を読まずに、またKali Linuxを使って(自宅サーバの)WordPressの脆弱性を突いてみようと思う。前回やってみた際、「ニックネームを付けていても、どうしてログインIDを取得できてしまうのか?」が宿題になっていた。

予備知識

前回の記事(http://d.hatena.ne.jp/ozuma/20130820/1376927068)に書いたけど、おさらい。

  • WordPressは、ログインに用いる「ユーザ名」と、ブログの投稿者として表示される「表示名」がある。
  • ユーザ作成直後は、ユーザ名と表示名が一致している。
  • 表示名は閲覧者が目で見てすぐ分かるため、変更することが望ましい。そのままにしているとログインIDとしてブルートフォースの餌食となりやすい。
  • しかし表示名を変更しても、wpscanをかけるとユーザ名は取得できてしまう。Why?

テスト環境

まずWordPressは最新版の3.6を用いた。対象ユーザは新しく作ったjohnというユーザで、以下のように設定されている。

ユーザ名表示名ユーザ番号
johnhoney2

表示名を"honey"にしているので、以下のように投稿者ページを見てもjohnという名前はどこにも無く、honeyしか見えない……パっと見は。

f:id:ozuma:20130830220607p:image:w640

では、おもむろにwpscanをKali Linuxからかけてみよう。前と同じならば、johnが出てくるはず……。

f:id:ozuma:20130830220739p:image:w640

ふーむ。やっぱり、元のユーザ名"john"がちゃんと盗られている。

ユーザ名はbodyタグにある

どうやってユーザ名を取得するのかを地道に探してみようかと思ったが、なんか面倒くさくなってきたので、wpscanのソースの方を読んでみることする。

どうやら lib/common/models/wp_user/existable.rb にて、以下のようにusernameを取得しているようだ。

login = body[%r{<body class="archive author author-([^\s]+) author-(\d+)}i, 1]

ほほう。と思ってこちらのHTMLを見ると、確かにbodyのところに "john" が入っている。

f:id:ozuma:20130830221037p:image:w640

まりWordPressのbodyタグにはclass属性があるが、その中に "author-${username}" という項目がある。ここはユーザ名そのままが入っており、表示名を変えても更新されないため、この値がそのままログインIDとしてブルートフォースアタックに使われてしまうようだ。なんてこったい。

では対策としては……うーん、無いね。少しいじってみたけど、ここの値を隠蔽することはできなかった。WordPress本体が何らかの対策をしてくれないとムリそう。

結論

ということで結論としては、「WordPressのログインIDは、隠すことは不可能」なようです。残念!

カシマカシマ 2014/04/07 13:47 もう時間がずいぶん経っておりますので、ご存知かもしれませんが、authorのslugから引っ張ってきているようですので、pluginのEdit Author Slugで各ユーザのslugを変更することで解決できましたよー。

ozumaozuma 2014/04/08 22:28 おおっ、しばらくこの問題は放っておいたので知りませんでした!
ありがとうございます〜

スパム対策のためのダミーです。もし見えても何も入力しないでください
ゲスト


画像認証

リンク元