WordPressの脆弱性スキャンwpscanでログインID取得
全く空気を読まずに、またKali Linuxを使って(自宅サーバの)WordPressの脆弱性を突いてみようと思う。前回やってみた際、「ニックネームを付けていても、どうしてログインIDを取得できてしまうのか?」が宿題になっていた。
予備知識
前回の記事(http://d.hatena.ne.jp/ozuma/20130820/1376927068)に書いたけど、おさらい。
テスト環境
まずWordPressは最新版の3.6を用いた。対象ユーザは新しく作ったjohnというユーザで、以下のように設定されている。
ユーザ名 | 表示名 | ユーザ番号 |
---|---|---|
john | honey | 2 |
表示名を"honey"にしているので、以下のように投稿者ページを見てもjohnという名前はどこにも無く、honeyしか見えない……パっと見は。
では、おもむろにwpscanをKali Linuxからかけてみよう。前と同じならば、johnが出てくるはず……。
ふーむ。やっぱり、元のユーザ名"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" が入っている。
つまりWordPressのbodyタグにはclass属性があるが、その中に "author-${username}" という項目がある。ここはユーザ名そのままが入っており、表示名を変えても更新されないため、この値がそのままログインIDとしてブルートフォースアタックに使われてしまうようだ。なんてこったい。
では対策としては……うーん、無いね。少しいじってみたけど、ここの値を隠蔽することはできなかった。WordPress本体が何らかの対策をしてくれないとムリそう。
結論
ということで結論としては、「WordPressのログインIDは、隠すことは不可能」なようです。残念!