oscommerce(v2.2RC2a)



2008年頃(もっと前かも)から言われている*icon_doc*admin/file_manager.phpの脆弱性(directory traversal)を利用したリモートアップロード(ダウンロードも可)。
そんな事から*icon_doc*admin/file_manager.phpは削除してしまうのが基本といわれています。

で、私が遊んでいる(放置中)oscommerce(v2.2RC2a)には*icon_doc*admin/file_manager.phpが放置されていたんですよね=:[

その結果がこれですよ:[]

ざっと調べてみると、*icon_doc*admin/file_manager.phpを利用して、書き込み可能なディレクトリ(images等)にリモートシェルスクリプト(使ってみましたが非常に高機能:))を設置して、それを足がかりに好き勝手に改竄するという感じです。

マクシモクブログの場合は特に改竄されたわけではなく、犯行声明(twe.html)が置かれていっただけなのですが、酷い場合にはトップページにトルコの国旗がはためいていたりするみたいです。

対策として簡単なのから、
1)*icon_dir*imagesなどのパーミッションを755で運用する。
2)*icon_dir*admin/のリネーム
3)*icon_doc*admin/file_manager.phpの削除
4)*icon_doc*admin/.htaccessで、アクセスを制御する。
5)本家フォーラムを参考にいろいろする。
6)osCommerceをあきらめる。
などがあります。

あと、多分に絶対*icon_doc*configure.phpは見られちゃっていますので、管理用のパスワードやユーザーネーム(サーバー・データベース等、全て)は速やかに変更する必要があります。

よし、これでタイトルの即死はもう無いよね?



とは、残念ながらならないんです。

これは今回の改竄の首謀者であるTheWayEndについて調べる過程で発見したんですが、管理エリアの全てのページを閲覧は当たり前、ゴニョゴニョまで出来そうな感じの攻撃方法があるんですよ:ase:

穴はずばり*icon_doc*admin/application_top.phpのリダイレクト処理。

// redirect to login page if administrator is not yet logged in
if (!tep_session_is_registered('admin')) {
$redirect = false;

$current_page = basename($PHP_SELF);

if ($current_page != FILENAME_LOGIN) {
if (!tep_session_is_registered('redirect_origin')) {
tep_session_register('redirect_origin');

$redirect_origin = array('page' => $current_page,
'get' => $HTTP_GET_VARS);
}

$redirect = true;
}

if ($redirect == true) {
tep_redirect(tep_href_link(FILENAME_LOGIN));
}

unset($redirect);
}
と、こんなコードなのですが、問題なのはこの部分。
$current_page = basename($PHP_SELF);
パス中のファイル名の部分を返す。という処理なのですが、
http://*****/catalog/admin/customers.php/login.php
こんなリクエストの場合、$current_pageに入るファイル名は何でしょう?



login.phpなんですよね。。。
すると、リダイレクト処理は行なわれずに*icon_doc*admin/customers.phpが走っちゃいます。具体例は書きませんが適当なパラメーターを付けると、もっといろいろ出来ちゃいそうです。

これを防ぐためには該当個所を、
$current_page = basename($_SERVER['SCRIPT_NAME']);
に書き換えてください。これで実行ファイルの名前を正確に取ることが出来て、適切なリダイレクトがなされます。