2006年4月21日(金) 11時34分33秒 [Perl/CGI]
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 トラックバック数:0
| « 本買いすぎ |
前後のエントリ < 旧 / 新 > | プログラミングの課題を出したものの… » |
このエントリーへのトラックバックURLを表示するにはここをクリック
※スパム防止のため、トラックバックURLは別ウインドウで表示します。(JavaScriptが有効でないと表示されません。)
コメント数: 0件