弾さんのperlを実行するAPIでお気楽ハックする

2009年3月11日 17:49

404 Blog Not Found:Ajax - perlを実行するAPI

いろいろ試してみてください。

/etc/passwd 見れちゃった。

# $FreeBSD: src/etc/master.passwd,v 1.40 2005/06/06 20:19:56 brooks Exp $

何が問題なのか書いた方がセキュリティの参考にはなるけど、まずはメールでお知らせしておきます。

exec 関数が使えた

2009年3月13日(金曜日) 23:02:13 JST 追記。

前回見つけた問題点がなくなったので、どうやって /etc/passwd が見れたのか公開します。

今は使えなくなりましたが、前は exec 関数が使えたのでそれを利用してディレクトリやファイルの中身を見ることができました。

IPA のセキュア・プログラミング講座で参考になる情報があります。

セキュリティーに関する情報で、何を考えながらやったかという部分について語られることが少ないと思うので、思考過程も合わせて説明します。

始めにperlを実行するAPIの記事を見たときに、注意点の次の項目でそれぞれ疑問を抱きました。

ファイルシステムの読み書きはできません。

特定の関数が使えない?、それとも権限がない?

実行時間は一秒以内に抑える必要があります。さもないとtimeoutします。

100回別けて実効するなら100秒使える?

サブプロセスは使えません。

親プロセスなら使える?

まずは、こうした疑問を確かめる事から始めました。

system 関数は使えるか:

use YAML::Syck;
system

system 関数など特定の関数は使えない:

'system' trapped by operation mask at - line 2.

そして、一秒を越えるとタイムアウトする事も確かめました。

こうやって調べているうちに exec 関数が使えると判明したのですが、試しに使ってみたものの、シェルだとか echo だとかのコマンド実効はできないようになっていたので、Perl 以外は動かないと思い、これ以上は無理かなと諦めかけました。

しかし、この段階で「サブプロセスが使えない」という制限がヒントになり、exec 関数で実効したものが 元の Perl プロセス自身が動くことになるのを思い出しました。

exec 関数で Perl を実効したとき、もしかしたら元の Perl にあった制限がなくなるのかも。

そう思って次のように実効してみました:

use YAML::Syck;

exec "/usr/local/bin/perl", "-e", '

@glob = glob "*";
for my $file (@glob) {
    print "$file\n";
}

';

/usr/local/bin/perl の後にある引数 -e は、続くクォート''で囲まれた部分をスクリプトとして解釈させることができます。

すると、glob などの関数が使えるようになり、ディレクトリ内のファイル一覧を見ることができました。この程度の実行なら一秒あれば十分なので、後はちょっとずつ上の階層も見たりしながら /etc/password までの相対パスを確かめることができます。

同様にファイルの中身も次にようにして見れました:

open my $HACK, "<", "見たいファイルのパス" or die $!;
while (my $line = <$HACK>) {
    print $line;
}

私の Perl に関する知識は初めてのPerlで遊んでいる程度なので、これ以上の事を試していませんが、モジュールを利用して他に方法がないか試してみたいな。

法的な問題

今回の件で不正アクセス行為の禁止等に関する法律の概要Topics:ACCS裁判を追う - ITmedia Newsなどを参考にしながら今回の行為が不正アクセスに当たるのか考えてみたけど:

exec 関数で Perl を実効したとき、もしかしたら元の Perl にあった制限がなくなるのかも。

という理由で私がアクセスしたのは、条文にある「不正アクセス行為の禁止 第三条 第三項」:

電気通信回線を介して接続された他の特定電子計算機が有するアクセス制御機能によりその特定利用を制限されている特定電子計算機に電気通信回線を通じてその制限を免れることができる情報又は指令を入力して当該特定電子計算機を作動させ、その制限されている特定利用をし得る状態にさせる行為

これに該当する気がします。けど、とりあえず罰則には該当しないからいいか:

(罰則)

第八条 次の各号の一に該当する者は、一年以下の懲役又は五十万円以下の罰金に処する。

  1. 第三条第一項の規定に違反した者
  2. 第六条第三項の規定に違反した者

第九条 第四条の規定に違反した者は、三十万円以下の罰金に処する。

ACCS裁判ではアクセスして得た情報の扱いが問題視され、結果は有罪判決になったようですが、やってることは同じ CGI に渡す値をいじっているだけなので、罰則に該当しないのにね。

裁判例情報で「不正アクセス」の検索結果見てみたけど、ACCSの判決文はなかった。判決文読みたいなー。

タグ:

コメント

トラックバック

トラックバックURL:http://edry.jp/cms/mt-tb.cgi/40