にしし ふぁくとりー(西村文宏 個人サイト)

Presented by Nishishi via Movable Type. Last Updated: 2015/09/22. 13:23:47.

NUL文字で拡張子指定を迂回する攻撃

先日の情報処理技術者試験、「テクニカルエンジニア(情報セキュリティ)」では、Perlソースコード中に埋め込まれているファイル拡張子の指定をどうやったら無視して、任意のファイルを指定する攻撃が可能かを問う問題がありました。

出題されているのは、Web上の入力フォームからの文字列を変数 $fname に格納して、その$fnameの末尾に「.cep」という拡張子を合体させてファイル名として扱うプログラムです。入力フォームに「abcde」と入力すれば、「abcde.cep」というファイルにアクセスすることになります。

問題文中での担当者は、ソース中で「.cep」という拡張子を埋め込んでいるのだから、このシステムでは拡張子.cep以外のファイルにアクセスできることはない、と考えています。でも、「Perlの文字列の処理方法を十分に調査して」再検討しなさいと言われてしまいます。

それはなぜか?を問う問題です。

私は分かんなかったんですが(^^;)、どうやらNUL文字を渡すことで、その後に続く文字列を無効化できてしまうようです。水無月ばけらさんとこで解説されてました。↓

情報処理試験でNUL文字攻撃の問題など(@水無月ばけらのえび日記)

入力フォームから、「passwd.dat%00」などという文字列を送ってやると、プログラム中で文字列の末尾に.cepがくっつけられて、「passwd.dat%00.cep」というファイル名が作られるのだけど、NUL文字(%00)以降は無視されてしまうので、「passwd.dat」というファイルにアクセスできてしまうのだそうです。

そうだったのか…。

正確には、PerlがNUL文字以降を無視するのではなく、NUL文字を含むパスをそのままOSのAPIに渡してしまうため、OS側がNUL文字以降を無視するため、攻撃が成り立つようですが。言語によっては、パスにNUL文字が含まれる場合にエラーを吐くものもあり、そういう言語の場合はNUL文字を使った攻撃はできないことになります。

コメント

コメント数: 0件

コメント投稿欄 この日記に対するコメント投稿を歓迎します。

保存しますか?



※本文中にURLは書けません。(書くと投稿が拒否されますのでご注意下さい。)

※投稿内容は、実際にページ上に掲載される前に、管理者によって確認される設定にしている場合があります。その場合は、投稿後にその旨が表示されます。たいてい1~2日以内には表示されるはずですので、気長にお待ち願います。m(_ _)m

トラックバック

このエントリーへのトラックバックURLを表示するにはここをクリック
※スパム防止のため、トラックバックURLは別ウインドウで表示します。(JavaScriptが有効でないと表示されません。)

--- 当サイト内を検索 ---