お行儀悪いですよ・・・おまえもなぁ~w

このブログサイトのLogwatchから不穏なログが通知されてきた。
「apache脆弱性攻撃と思われるアクセスがありましたよ~」
で、中を見るとこんな感じ。(IPの最後はとりあえず隠しておきますです)

A total of 1 sites probed the server
119.63.198.xx

A total of 1 possible successful probes were detected (the following URLs
contain strings that match one or more of a listing of strings that
indicate a possible exploit):

/wordpress/tag/\xe3\x83\xa1\xe3\x83\xbc\xe3\x83\xab\xe9\x80\x81\xe4\xbf\xa1/ HTTP Response 200

そこでアクセス元はというと、whoisでこの[119.63.198.xx]を見てみると、このセグメントは[Baidu, Inc.]が所有している。つまり検索サイト「百度」を運営している日本法人である。
警告を超意訳すると、「成功したっぽい探査が見つかったよ~、下記のURLで1つ以上の脆弱性攻撃の可能性を示す文字列リストが含まれてやんす」と。(この訳は役に立たないのでご自分で訳してくださいな)
それで、問題のURLを見ると・・・、
「あぁ~、タグに使われている漢字コードっぽいな~」
「ん?、なんで[\x]なの?、本来[%]じゃ・・・」
ふ~ん、「百度」クローラエンジンのリクエストURLのエンコードがバグっているものと思われますな。
UTF-8エンコードを別のエンコードに変換しているのならまだ可愛げがあるが、[\x]はねぇ~だろうよ・・・

実際、[\x]を[%]に置き換えると、
「\xe3\x83\xa1\xe3\x83\xbc\xe3\x83\xab\xe9\x80\x81\xe4\xbf\xa1」は、
「%e3%83%a1%e3%83%bc%e3%83%ab%e9%80%81%e4%bf%a1」=「メール送信」
という文字列になる。(実際タグとして使われている)

で、この変態リクエストを受け取るとどうなるかをtelnet接続で試してみると、Wordpressは404ページを作って返しているのだが、ヘッダが以下のようになっている。

# telnet localhost 80
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
GET /wordpress/tag/\xe3\x83\xa1\xe3\x83\xbc\xe3\x83\xab\xe9\x80\x81\xe4\xbf\xa1/ HTTP/1.1

HTTP/1.0 404 Not Found
Date: Sun, 28 Jun 2009 01:24:44 GMT
Server: Apache/x.x.xx
X-Powered-By: PHP/5.2.9
Expires: Wed, 11 Jan 1984 05:00:00 GMT
Last-Modified: Sun, 28 Jun 2009 01:24:50 GMT
Cache-Control: no-cache, must-revalidate, max-age=0
Pragma: no-cache
Connection: close
Content-Type: text/html; charset=UTF-8

「ほぇっ?、HTTP 1.1 対応のエラーコードが帰ってねぇ~!」
ってことは、変態URLに伴う404ページが、検索インデックス(検索データベース)に登録されちゃってる可能性がある、まずい・・・のか?元来リクエストのエンコードがミスっているんだろ・・・(ry
ということで、正しく404ステータスコードを返すように下記コードを、使用テーマの404.phpに追加。(get_header()の前)

<?php header("HTTP/1.1 404 Not Found"); ?>
<?php header("Status: 404 Not Found"); ?>

で、どうなったか。

telnet localhost 80
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
GET /wordpress/tag/\xe3\x83\xa1\xe3\x83\xbc\xe3\x83\xab\xe9\x80\x81\xe4\xbf\xa1/ HTTP/1.1

HTTP/1.1 404 Not Found
Date: Sun, 28 Jun 2009 01:42:30 GMT
Server: Apache/2.2.11 (Fedora)
X-Powered-By: PHP/5.2.9
Expires: Wed, 11 Jan 1984 05:00:00 GMT
Last-Modified: Sun, 28 Jun 2009 01:42:33 GMT
Cache-Control: no-cache, must-revalidate, max-age=0
Pragma: no-cache
Status: 404 Not Found                        <<<===HTTP/1.1用に 追加された・・・
Connection: close
Transfer-Encoding: chunked
Content-Type: text/html; charset=UTF-8

ということで、ヘッダには確かな値が入ったので、あちらさんがヘッダ情報を正確に拾ってくれることを祈って、ちょっと様子見してみまひょ。
ちなみに、他のクローラ(googleやyahoo)は正常なURLエンコードでリクエストしてきてますけどね。
「あんたのところだけよ」と小一時間程問い詰めたいが、小心者なので止めとこ。

  1. Logwatchが気持ち悪い件につきまして|Broken Relations - pingback on 2011 年 11 月 28 日 at 13:22

Leave a Comment


*


NOTE - You can use these HTML tags and attributes:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <img localsrc="" alt="">