- PR -

OSコマンドインジェクション...JavaにおけるRuntime.exec()

1
投稿者投稿内容
mjh
会議室デビュー日: 2005/04/07
投稿数: 1
投稿日時: 2005-04-07 15:12
スレッド
http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=19046&forum=12&14
にレスするか新規スレッドにするかちょっと迷ったのですが、新規スレッドにしました。

http://www.atmarkit.co.jp/fsecurity/rensai/webhole02/webhole02.html

この記事では、JavaのRuntime.exec()も対象となって
いますが、私の環境ではインジェクションを再現できませんでした。

具体的には、Linux(RHL9)上のjava(J2SE SDK 1.4.2_07)にて

public classs abc {
 public static void main(String[] arg) throws Exception {
  java.lang.Runtime("touch abc ; rm abc");
 }
}

をコンパイル・実行させてみました。
もしインジェクションの可能性があるのなら、ファイル「abc」が一度作成され、
すぐに削除されるので、(もともとabcが無ければ)カレントディレクトリ
の状態に何も変化が無いと思ったのですが、実行させてみると、
「;」「abc」「rm」の3つのファイルが出来上がっていました。
StringTokenizerにて分解されたexecの引数は、その2番目以降があくまでも
1番目のトークンをコマンドとして実行したときの引数として扱われている
(よってシェルが関連する「;」「|」「&」「`」などもコマンドの引数と
みなされる)ように見えるので、ここで試行した範囲では、コマンドインジェクションの
危険性は無いように見えるのですが、Runtime.exec()にてコマンドインジェクションの
危険性を伴うにはなんらかの条件があるのでしょうか?
1

スキルアップ/キャリアアップ(JOB@IT)