include() / require() に対する文字列挿入攻撃について†
- ページ: BugTrack
- 投稿者: henoheno
- 優先順位: 重要
- 状態: 完了
- カテゴリー: その他
- 投稿日: 2004-12-30 (木) 15:48:02
- バージョン:
メッセージ†
- ひとまず状態を「完了」にしておきます。疑問点があれば随時コメントして下さい。今後も各自検証のほど、よろしくお願いします :) -- henoheno
以下は official:雑談/13 より移動。
phpスクリプトを狙った攻撃†
- PHPを狙う新たなワームが出現,Webページのプログラム・ミスを突く : IT Pro ニュース
- http://itpro.nikkeibp.co.jp/free/ITPro/NEWS/20041227/154332/
- apacheのログの例
- http://www.vbulletin.com/forum/showpost.php?p=783446&postcount=19
- ウチには[25/Dec/2004:21:04:55 +0900] に来ました。pukiwikiは大丈夫ですよね? -- tito
- 情報ありがとうございます :) include() や require() ねたですね。 -- henoheno
- 良い機会ですから簡単に見てみましょう。PukiWikiの中では include() は使われていません。あるのは全てrequire() あるいは require_once() です。 -- henoheno
- 第一階層にある index.php, pukiwiki.php がrequire() しているものは固定値です。 (LIB_DIR . pukiwiki.php) 外部からの入力は関係ありません。 -- henoheno
- lib/ ディレクトリ以下のファイルは全て固定値でロードされています (例: LIB_DIR . 'init.php') -- henoheno
- ウチにも来ましたcubic9.com:Blog/2004-12-27。ひとまずmod_rewriteで気休めの処置をして、標準パッケージのPukiWikiをgrepしてみましたが、不用意にincludeしているようなコードは見受けられませんでした。パッケージに含まれない自作のプラグインなどは改めてチェックする必要がありそうです。 -- でぃあばぁ
- プラグイン呼び出し周りについて。cmd= あるいは plugin= という形でプラグイン名を指定して、最終的に lib/plugin.php にて「require_once(PLUGIN_DIR . $name . '.inc.php');」している部分がありますが、見ての通り、左右に文字列を連結しています。また、*1ファイルが存在するかといったチェックが事前に行われます。さらに1.4.4においては、lib/ini.php で「英数字以外の入力を許さない」チェックを追加してあります。 -- henoheno
- 同梱しているプラグインや、スキンでのrequire()について。いずれも「require_once(PLUGIN_DIR.'attach.inc.php')」のように呼び出されており、固定の値です。 -- henoheno
- 後の細かい部分 (LANG_FILEなど) は設定ファイルから値を得るタイプのもので、外部入力ではないか固定値です(jcode関係など)。 -- henoheno
- こんなとこでしょうか :) -- henoheno
- ちょっと分量が増えてしまいましたね。ページ分けましょうか・・・ (^^; -- henoheno
- ということで、1.4.4以降に現状存在している require() 周りはおおむねよろしいんじゃないでしょうか。 -- henoheno
- 1.3系の方も、とくに状況は変わらないですね。 -- henoheno
- page= に関する入力値ですが、これは問答無用でページ名であると解釈しますから、解釈のしかたが間違っていないかぎりそのように扱われると思います。 -- henoheno
- 自作プラグインに関してですが、codehighlightではinclude()を使用しております。これまでも引数の左右に文字列を連結させていましたが、念をいれて関数の呼び出し時に文字列を連結させるように変更しました。 -- sky
- 検証&詳細な説明ありがとうございます。安心できました。 -- tito
- 追記: PHP 4.0.3 以降では、php.ini あるいは httpd.conf で allow_url_fopen を無効(デフォルトは有効)にすることが可能である様です。 -- henoheno
include() bypassing filter with php://input、および Null byte attack†
- 個人的なメモと備忘録 2004年 5月: 2004.05.30(Sun)
- BugTraq: [PHP] include() bypassing filter with php://input
- こちらは allow_url_fopenは効かないそうです。 -- henoheno
- Null-byte attack については、lib/func.php にある input_filter() (旧名sanitize()) にて、除去処理が行われています。 -- henoheno
- こちらも、入力値の左側に何らかの固定値を連結しているようなケースには通用しなそうではありますね。連結している実体(変数や定数を展開した結果)が空文字列だったりすると無意味ですが・・・ (^^; -- henoheno
「plugin_ . $name . _action」といった形で関数が存在するかどうか このチェックはフィルタの役割をしていないので、今回の件とは無関係ですね (^^; -- henoheno
Last-modified: 2007-02-10 (土) 03:36:21