忍者ブログ
[PR]
×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。



2017/10/19 14:16 |
RFI脆弱性

Remote File Include攻撃とは、外部から任意のPHPスクリプトを実行させることができてしまうという攻撃です。
allow_url_includeディレクティブを利用します。

allow_url_includeは、require_once()等で任意のURLをインクルードできるというディレクティブです。
他所にあるAPIを取得したいといった場合に、簡単にインクルードすることができます。
さて、これがどう脆弱性かというと、require_onceの引数にうっかりユーザ入力値が紛れ込んでしまうと大変なことになるわけです。
引数に'php://input'と入れられると、POSTで送られてきたPHPコードが実行されてしまいます。

穴を完全に塞ぐためにはallow_url_includeをオフにする必要がありますが、PHP_INI_SYSTEMのためini_setでは設定不可能です。
そもそもallow_url_includeのデフォルトは0のため、あえて1にしてあるということは何か理由があるのでしょう。
アプリケーション側で対策を行わなければなりません。

まあ、それ以前にrequire_once()に入力値なんか使うなという話ですが。
register_globalsがオンだったりするとうっかり引っかかってしまう可能性もありますので、require_once()の引数となるパスは__FILE__等信頼できるものを使用するか、あるいはコンフィグファイルなどでdefine()しておくと安全です。
そういやinclude_pathにURL入れたらどうなるんだろう?

さて、こちらの解説記事では、'php://input'ではなくURLをインクルードした際、あたかもrequire_onceを実行した側でPHPコードが実行される的なことが書いてあるのですが、試してみた結果では単に実行結果が取得されただけでした。
要するに、単にfile_get_contentsしてprintしたのと同じような動作をしたということです。
別に呼び出し元で定義した変数を呼び出し先で参照できるということもなく、逆に呼び出し先で定義した変数を呼び出し元で参照することもできませんでした。

まあ勿論想定と全然違うファイルがincludeされることで問題はありますし、呼び出し先でフィッシング的なコードを書くことで詐欺に使えるかもしれませんが、サーバの情報を盗み出せるというのがいまいちわからないんですが。
ターゲットサーバにアップローダ等が存在し、どうにかしてPHPファイルのアップロードに成功した場合、そのファイルをインクルードさせることで情報を入手することが可能になりますが、言ってることは違う感じですし。
それとも、どこか他に設定を行ったら本当に呼び出し元で呼び出し先に書いてあるコードが実行されてしまうのでしょうか?


※2010/12/23追記
取消線部分は間違っているので新記事を参照してください。
 

PR


2009/08/31 12:58 | Comments(0) | TrackBack(1) | セキュリティ

トラックバック

トラックバックURL:
かつてRemote File Include脆弱性についての記事を書いたのですが、結果のところに思いっきり嘘出鱈目を書いてしまっていたので訂正します。 php.ini  allow_url_fopen = On  allow_url_include = On http://hoge.localhost/rfi.php <?php require_once(''http://fuga.localhost/phpinfo.php''); htt...
弱小PHPerの憂鬱 | 2010/12/23 19:57

コメント

コメントを投稿する






Vodafone絵文字 i-mode絵文字 Ezweb絵文字 (絵文字)



<<任天堂はゲーム業界各社にとってのロールモデルになり得ない | HOME | Smarty-08:テンプレート変数>>
忍者ブログ[PR]